1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
/** @file
OSTA Universal Disk Format (UDF) definitions.
Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#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
|