You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.1 KiB

4 years ago
/** @file
OSTA Universal Disk Format (UDF) definitions.
Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com>
This program and the accompanying materials are licensed and made available
under the terms and conditions of the BSD License which accompanies this
distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef __UDF_H__
#define __UDF_H__
#define UDF_BEA_IDENTIFIER "BEA01"
#define UDF_NSR2_IDENTIFIER "NSR02"
#define UDF_NSR3_IDENTIFIER "NSR03"
#define UDF_TEA_IDENTIFIER "TEA01"
#define UDF_LOGICAL_SECTOR_SHIFT 11
#define UDF_LOGICAL_SECTOR_SIZE ((UINT64)(1ULL << UDF_LOGICAL_SECTOR_SHIFT))
#define UDF_VRS_START_OFFSET ((UINT64)(16ULL << UDF_LOGICAL_SECTOR_SHIFT))
typedef enum {
UdfPrimaryVolumeDescriptor = 1,
UdfAnchorVolumeDescriptorPointer = 2,
UdfVolumeDescriptorPointer = 3,
UdfImplemenationUseVolumeDescriptor = 4,
UdfPartitionDescriptor = 5,
UdfLogicalVolumeDescriptor = 6,
UdfUnallocatedSpaceDescriptor = 7,
UdfTerminatingDescriptor = 8,
UdfLogicalVolumeIntegrityDescriptor = 9,
UdfFileSetDescriptor = 256,
UdfFileIdentifierDescriptor = 257,
UdfAllocationExtentDescriptor = 258,
UdfFileEntry = 261,
UdfExtendedFileEntry = 266,
} UDF_VOLUME_DESCRIPTOR_ID;
#pragma pack(1)
typedef struct {
UINT16 TagIdentifier;
UINT16 DescriptorVersion;
UINT8 TagChecksum;
UINT8 Reserved;
UINT16 TagSerialNumber;
UINT16 DescriptorCRC;
UINT16 DescriptorCRCLength;
UINT32 TagLocation;
} UDF_DESCRIPTOR_TAG;
typedef struct {
UINT32 ExtentLength;
UINT32 ExtentLocation;
} UDF_EXTENT_AD;
typedef struct {
UINT8 CharacterSetType;
UINT8 CharacterSetInfo[63];
} UDF_CHAR_SPEC;
typedef struct {
UINT8 Flags;
UINT8 Identifier[23];
union {
//
// Domain Entity Identifier
//
struct {
UINT16 UdfRevision;
UINT8 DomainFlags;
UINT8 Reserved[5];
} Domain;
//
// UDF Entity Identifier
//
struct {
UINT16 UdfRevision;
UINT8 OSClass;
UINT8 OSIdentifier;
UINT8 Reserved[4];
} Entity;
//
// Implementation Entity Identifier
//
struct {
UINT8 OSClass;
UINT8 OSIdentifier;
UINT8 ImplementationUseArea[6];
} ImplementationEntity;
//
// Application Entity Identifier
//
struct {
UINT8 ApplicationUseArea[8];
} ApplicationEntity;
//
// Raw Identifier Suffix
//
struct {
UINT8 Data[8];
} Raw;
} Suffix;
} UDF_ENTITY_ID;
typedef struct {
UINT32 LogicalBlockNumber;
UINT16 PartitionReferenceNumber;
} UDF_LB_ADDR;
typedef struct {
UINT32 ExtentLength;
UDF_LB_ADDR ExtentLocation;
UINT8 ImplementationUse[6];
} UDF_LONG_ALLOCATION_DESCRIPTOR;
typedef struct {
UDF_DESCRIPTOR_TAG DescriptorTag;
UDF_EXTENT_AD MainVolumeDescriptorSequenceExtent;
UDF_EXTENT_AD ReserveVolumeDescriptorSequenceExtent;
UINT8 Reserved[480];
} UDF_ANCHOR_VOLUME_DESCRIPTOR_POINTER;
typedef struct {
UDF_DESCRIPTOR_TAG DescriptorTag;
UINT32 VolumeDescriptorSequenceNumber;
UDF_CHAR_SPEC DescriptorCharacterSet;
UINT8 LogicalVolumeIdentifier[128];
UINT32 LogicalBlockSize;
UDF_ENTITY_ID DomainIdentifier;
UDF_LONG_ALLOCATION_DESCRIPTOR LogicalVolumeContentsUse;
UINT32 MapTableLength;
UINT32 NumberOfPartitionMaps;
UDF_ENTITY_ID ImplementationIdentifier;
UINT8 ImplementationUse[128];
UDF_EXTENT_AD IntegritySequenceExtent;
UINT8 PartitionMaps[6];
} UDF_LOGICAL_VOLUME_DESCRIPTOR;
#pragma pack()
#endif