MicroUDFClassTypes.pas
上传用户:wanyu_2000
上传日期:2021-02-21
资源大小:527k
文件大小:28k
源码类别:

DVD

开发平台:

Delphi

  1. {-----------------------------------------------------------------------------  Unit Name: MicroUDFClassTypes
  2.  Author:    Dancemammal
  3.  Purpose:   Volume discriptors for MicroUDF File system
  4.  History:   First Release
  5. -----------------------------------------------------------------------------}
  6. Unit MicroUDFClassTypes;
  7. interface
  8. Uses      Windows, Messages, SysUtils, Classes, Graphics, Controls,      MicroUDFConsts;
  9. Type  Dstring = Char;
  10. Type (* Character set specification (ECMA 167r3 1/7.2.1) *)      UDF_CharSpec = packed record           CharSetType : Byte;                    //OSTA_CS0_CHARACTER_SET_TYPE           CharSetInfo : array [0..62] of Char;   //OSTA_CS0_CHARACTER_SET_INFO      end;
  11.   PUDF_CharSpec = ^UDF_CharSpec;
  12. (* Timestamp (ECMA 167r3 1/7.3) *)      UDF_Timestamp = packed record           TypeAndTimezone        : Word;           Year                   : Word;           Month                  : Byte;           Day                    : Byte;           Hour                   : Byte;           Minute                 : Byte;           Second                 : Byte;           Centiseconds           : Byte;           HundredsOfMicroseconds : Byte;           Microseconds           : Byte;      end;     PUDF_TimeStamp = ^UDF_TimeStamp;
  13. (* Recorded Address (ECMA 167r3 4/7.1) *)
  14. Type   UDF_RecordedAddress = packed record     LogicalBlockNum       : DWord;
  15.     PartitionReferenceNum : Word;
  16.   end;
  17.   PUDF_RecordedAddress = ^UDF_RecordedAddress;
  18. (* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) *)   UDF_ShortAllocationDescriptor = packed record     ExtentLength     : DWord;
  19.     ExtentPosition   : DWord;
  20.   end;
  21.   PUDF_ShortAllocationDescriptor = ^UDF_ShortAllocationDescriptor;
  22. (* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) *)   UDF_LongAllocationDescriptor = packed record     ExtentLength        : DWord;
  23.     ExtentLocation      : UDF_RecordedAddress;
  24.     ImplementationUse   : packed array [0..5] of Byte;
  25.   end;
  26.   PUDF_LongAllocationDescriptor = ^UDF_LongAllocationDescriptor;
  27. (* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) *)   UDF_ExtendedAllocationDescriptor = packed record     ExtentLength         : DWord;
  28.     RecordedLength       : DWord;
  29.     InformationLength    : DWord;
  30.     ExtentLocation       : UDF_RecordedAddress;
  31.     ImplementationUse    : packed array [0..1] of Byte;
  32.   end;   PUDF_ExtendedAllocationDescriptor = ^UDF_ExtendedAllocationDescriptor;
  33. (* Entity identifier (ECMA 167r3 1/7.4) *) Type   UDF_EntityIdentifier = packed record     Flags             : Byte;
  34.     Identifier        : packed array [0..22] of Char;
  35.     IdentifierSuffix  : packed array [0..7] of Char;
  36.   end;
  37.     PUDF_EntityIdentifier = ^UDF_EntityIdentifier;
  38. Type (* Volume Structure Descriptor (ECMA 167r3 2/9.1) *)   UDF_VolumeStructureDescriptor = packed record
  39.     StructureType       : Byte;
  40.     StandardIdentifier  : packed array [0..VSD_STD_ID_LEN-1] of Char;
  41.     StructureVersion    : Byte;
  42.     StructureData       : packed array [0..2040] of Byte;
  43.   end;
  44.   PUDF_VolumeStructureDescriptor = ^UDF_VolumeStructureDescriptor;
  45. (* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) *)
  46. Type      UDF_BeginningExtendedAreaDesc = packed record           StructureType       : Byte;           StandardIdentifier  : array [0..VSD_STD_ID_LEN-1] of Char;           StructureVersion    : Byte;           StructureData       : array [0..2040] of Byte;      end;       PUDF_BeginningExtendedAreaDesc = ^UDF_BeginningExtendedAreaDesc;
  47. (* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) *)      UDF_TerminatingExtendedAreaDesc = packed record           StructureType       : Byte;           StandardIdentifier  : array [0..VSD_STD_ID_LEN-1] of Char;           StructureVersion    : Byte;           StructureData       : array [0..2040] of Byte;      end;        PUDF_TerminatingExtendedAreaDesc = ^UDF_TerminatingExtendedAreaDesc;
  48. (* Boot Descriptor (ECMA 167r3 2/9.4) *)      UDF_BootDesc = packed record           StructureType                       : Byte;           StandardIdentifier                  : array [0..VSD_STD_ID_LEN-1] of Char;           StructureVersion                    : Byte;           Reserved1                           : Byte;           ArchitectureType                    : UDF_EntityIdentifier;           BootIdentifier                      : UDF_EntityIdentifier;           BootExtentLocation                  : DWord;           BootExtentLength                    : DWord;           loadAddress                         : Int64;           StartAddress                        : Int64;           DescriptorCreationDateAndTime       : UDF_Timestamp;           Flags                               : Word;           Reserved2                           : array [0..31] of Byte;           BootUse                             : array [0..1905] of Byte;      end;        PUDF_BootDesc = ^UDF_BootDesc;
  49. (* Extent Descriptor (ECMA 167r3 3/7.1) *) Type   UDF_ExtentDescriptor = packed record     ExtentLength     : DWord;
  50.     ExtentLocation   : DWord;
  51.   end;     PUDF_ExtentDescriptor = ^UDF_ExtentDescriptor;
  52. (* Tag Identifier (ECMA 167r3 3/7.2.1) *     TAG_IDENT_PVD                        = $0001;     TAG_IDENT_AVDP                       = $0002;     TAG_IDENT_VDP                        = $0003;     TAG_IDENT_IUVD                       = $0004;     TAG_IDENT_PD                         = $0005;     TAG_IDENT_LVD                        = $0006;     TAG_IDENT_USD                        = $0007;     TAG_IDENT_TD                         = $0008;     TAG_IDENT_LVID                       = $0009; }
  53. (* Descriptor Tag (ECMA 167r3 3/7.2) *)   UDF_DescriptorTag = packed record     TagIdentifier        : Word;
  54.     DescriptorVersion    : Word;
  55.     TagChecksum          : Byte;
  56.     Reserved             : Byte;
  57.     TagSerialNumber      : Word;
  58.     DescriptorCRC        : Word;
  59.     DescriptorCRCLength  : Word;
  60.     TagLocation          : DWord;
  61.   end;    PUDF_DescriptorTag = ^UDF_DescriptorTag;
  62. Type      UDF_TDB = packed record           T               : Byte;           D               : Byte;           I               : Byte;           Length          : Word;           Res             : Byte;           LowestTrack     : Byte;           HighestTrack    : Byte;           TrackNumber     : Byte;           RecordingMethod : Byte;           PacketSize      : packed array [0..2] of Byte;           Res1            : packed array [0..10] of Byte;      end;       PUDF_TDB = ^UDF_TDB;
  63. (* NSR Descriptor (ECMA 167r3 3/9.1) *)      UDF_NSRDescriptor = record           StructureType      : Byte;           StandardIdentifier : array [0..VSD_STD_ID_LEN-1] of Char;           StructureVersion   : Byte;           Reserved           : Byte;           StructureData      : array [0..2039] of Byte;      end;       PUDF_NSRDescriptor = ^UDF_NSRDescriptor;
  64. (* Primary Volume Descriptor (ECMA 167r3 3/10.1) *)   UDF_PrimaryVolumeDescriptor = packed record
  65.     DescriptorTag                        : UDF_DescriptorTag;
  66.     VolumeDescriptorSequenceNumber       : DWord;
  67.     PrimaryVolumeDescriptorNumber        : DWord;
  68.     VolumeIdentifier                     : packed array [0..31] of dstring;
  69.     VolumeSequenceNumber                 : Word;
  70.     MaximumVolumeSequenceNumber          : Word;
  71.     InterchangeLevel                     : Word;
  72.     MaximumInterchangeLevel              : Word;
  73.     CharacterSetList                     : DWord;
  74.     MaximumCharacterSetList              : DWord;
  75.     VolumeSetIdentifier                  : packed array [0..127] of dstring;
  76.     DescriptorCharacterSet               : UDF_CharSpec;
  77.     ExplanatoryCharacterSet              : UDF_CharSpec;
  78.     VolumeAbstract                       : UDF_ExtentDescriptor;
  79.     VolumeCopyrightNotice                : UDF_ExtentDescriptor;
  80.     ApplicationIdentifier                : UDF_EntityIdentifier;
  81.     RecordingDateAndTime                 : UDF_TimeStamp;
  82.     ImplementationIdentifier             : UDF_EntityIdentifier;
  83.     ImplementationUse                    : packed array [0..63] of Byte;
  84.     PredecessorVolumeDescriptorSequenceLocation : Byte;
  85.     Flags                                : Word;
  86.     Reserved                             : packed array [0..21] of Byte;
  87.   end;    PUDF_PrimaryVolumeDescriptor = ^UDF_PrimaryVolumeDescriptor;
  88. Type (* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) *)   UDF_AnchorVolumeDescriptorPointer = packed record     DescriptorTag                         : UDF_DescriptorTag;
  89.     MainVolumeDescriptorSequenceExtent    : UDF_ExtentDescriptor;
  90.     ReserveVolumeDescriptorSequenceExtent : UDF_ExtentDescriptor;
  91.     Reserved                              : packed array [0..479] of Byte;
  92.   end;    PUDF_AnchorVolumeDescriptorPointer = ^UDF_AnchorVolumeDescriptorPointer;
  93. (* Volume Descriptor Pointer (ECMA 167r3 3/10.3) *)   UDF_VolumeDescriptorPointer = packed record     DescriptorTag                      : UDF_DescriptorTag;
  94.     VolumeDescriptorSequenceNumber     : DWord;
  95.     NextVolumeDescriptorSequenceExtent : UDF_ExtentDescriptor;
  96.     Reserved                           : packed array [0..483] of Byte;
  97.   end;    PUDF_VolumeDescriptorPointer = ^UDF_VolumeDescriptorPointer;
  98. (* LV information (UDF2.01,2.2.7.2*)   UDF_LVInformation = packed record     LVICharset               : UDF_CharSpec;
  99.     LogicalVolumeIdentifier  : packed array [0..127] of dstring;
  100.     LVInfo1                  : packed array [0..35] of dstring;
  101.     LVInfo2                  : packed array [0..35] of dstring;
  102.     LVInfo3                  : packed array [0..35] of dstring;
  103.     ImplementionID           : UDF_EntityIdentifier;
  104.     ImplementationUse        : packed array [0..127] of Byte;
  105.   end;    PUDF_LVInformation = ^UDF_LVInformation;
  106. (* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) *)   UDF_ImplementationUseVolumeDescriptor = packed record     DescriptorTag                   : UDF_DescriptorTag;
  107.     VolumeDescriptorSequenceNumber  : DWord;
  108.     ImplementationIdentifier        : UDF_EntityIdentifier;
  109.     LVInformation                   : UDF_LVInformation;
  110.   end;    PUDF_ImplementationUseVolumeDescriptor = ^UDF_ImplementationUseVolumeDescriptor;
  111. (* Partition Descriptor (ECMA 167r3 3/10.5) *)   UDF_PartitionDescriptor = packed record     DescriptorTag                       : UDF_DescriptorTag;
  112.     VolumeDescriptorSequenceNumber      : DWord;
  113.     PartitionFlags                      : Word;
  114.     PartitionNumber                     : Word;
  115.     PartitionContents                   : UDF_EntityIdentifier;
  116.     PartitionContentsUse                : packed array [0..127] of Byte;
  117.     AccessType                          : DWord;
  118.     PartitionStartingLocation           : DWord;
  119.     PartitionLength                     : DWord;
  120.     ImplementationIdentifier            : UDF_EntityIdentifier;
  121.     ImplementationUse                   : packed array [0..127] of Byte;
  122.     Reserved                            : packed array [0..155] of Byte;
  123.   end;    PUDF_PartitionDescriptor = ^UDF_PartitionDescriptor;
  124. Type      UDF_PartitionMapType1 = packed record           PartitionMapType     : Byte;           PartitionMapLength   : Byte;           VolumeSeqNumber      : Word;           partitionNumber      : Word;      end;        PUDF_PartitionMapType1 = ^UDF_PartitionMapType1;
  125.      UDF_partitionMapType2 = packed record           PartitionMapType     : Byte;           PartitionMapLength   : Byte;           Res                  : packed array [0..1] of Byte;           Ident                : UDF_EntityIdentifier;           VolumeSeqNumber      : Word;           PartitionNumber      : Word;           reserved             : packed array [0..23] of Byte;      end;       PUDF_partitionMapType2 = ^UDF_partitionMapType2;
  126. (* Logical Volume Descriptor (ECMA 167r3 3/10.6) *)      UDF_logicalVolDesc = packed record           DescriptorTag            : UDF_DescriptorTag;           VolumeDescSeqNum         : DWord;           DescriptorCharacterSet   : UDF_CharSpec;           LogicalVolumeIdentifier  : packed array [0..127] of dstring;           LogicalBlockSize         : DWord;           DomainIdentifier         : UDF_EntityIdentifier;           LogicalVolumeContentsUse : UDF_LongAllocationDescriptor;           MapTableLength           : DWord;           NumPartitionMaps         : DWord;           ImplementationIdentifier : UDF_EntityIdentifier;           ImplementationUse        : array [0..127] of Byte;           IntegritySequenceExtent  : UDF_ExtentDescriptor;           partitionMap1            : UDF_PartitionMapType1;           partitionMap2            : UDF_partitionMapType2;      end;        PUDF_logicalVolDesc = ^UDF_logicalVolDesc;
  127. (* Generic Partition Map (ECMA 167r3 3/10.7.1) *)      UDF_GenericPartitionMap = packed record           PartitionMapType        : Byte;           PartitionMapLength      : Byte;           PartitionMapping1stByte : Byte;      end;       PUDF_GenericPartitionMap = ^UDF_GenericPartitionMap;
  128. (* Type 1 Partition Map (ECMA 167r3 3/10.7.2) *)      UDF_GenericPartitionMap1 = packed record           PartitionMapType       : Byte;           PartitionMapLength     : Byte;           VolumeSeqNum           : Word;           PartitionNum           : Word;      end;       PUDF_GenericPartitionMap1 = ^UDF_GenericPartitionMap1;
  129. (* Type 2 Partition Map (ECMA 167r3 3/10.7.3) *)      UDF_GenericPartitionMap2 = packed record           PartitionMapType      : Byte;           PartitionMapLength    : Byte;           PartitionIdent        : packed array [0..61] of Byte;      end;       pUDF_GenericPartitionMap2 = ^UDF_GenericPartitionMap2;
  130. (* Unallocated Space Descriptor (ECMA 167r3 3/10.8) *)      UDF_UnallocSpaceDesc = packed record           DescriptorTag    : UDF_DescriptorTag;           VolumeDescSeqNum : DWord;           AumAllocDescs    : DWord;           AllocDescs       : UDF_ExtentDescriptor;      end;       PUDF_UnallocSpaceDesc = ^UDF_UnallocSpaceDesc;
  131. (* Terminating Descriptor (ECMA 167r3 3/10.9) *)      UDF_TerminatingDesc = packed record           DescriptorTag     : UDF_DescriptorTag;           reserved          : packed array [0..495] of Byte;      end;       PUDF_TerminatingDesc = ^UDF_TerminatingDesc;
  132. (* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) *)      UDF_logicalVolumeIntegrityDesc = packed record           DescriptorTag            : UDF_DescriptorTag;           RecordingDateAndTime     : UDF_Timestamp;           IntegrityType            : DWord;           NextIntegrityExt         : UDF_ExtentDescriptor;           LogicalVolContentsUse    : packed array [0..31] of char;           NumOfPartitions          : DWord;           LengthOfImpUse           : DWord;           FreeSpaceTable           : DWord;           SizeTable                : DWord;           ImpUse                   : UDF_EntityIdentifier;           NumberOfFiles            : DWord;           NumberOfDirectories      : DWord;
  133.           MinimumUDFReadRevision   : Word;
  134.           MinimumUDFWriteRevision  : Word;
  135.           MaximumUDFWriteRevision  : Word;      end;        PUDF_logicalVolumeIntegrityDesc = ^UDF_logicalVolumeIntegrityDesc;
  136. (* File Set Descriptor (ECMA 167r3 4/14.1) *) Type   UDF_FileSetDescriptor = packed record     DescriptorTag                    : UDF_DescriptorTag;
  137.     RecordingDateAndTime             : UDF_TimeStamp;
  138.     InterchangeLevel                 : Word;
  139.     MaximumInterchangeLevel          : Word;
  140.     CharacterSetList                 : DWord;
  141.     MaximumCharacterSetList          : DWord;
  142.     FileSetNumber                    : DWord;
  143.     FileSetDescriptorNumber          : DWord;
  144.     LogicalVolumeIdentifierCharSet   : UDF_CharSpec;
  145.     LogicalVolumeIdentifier          : packed array [0..127] of dstring;
  146.     FileSetCharacterSet              : UDF_CharSpec;
  147.     FileSetIdentifier                : packed array [0..31] of dstring;
  148.     CopyrightFileIdentifier          : packed array [0..31] of dstring;
  149.     AbstractFileIdentifier           : packed array [0..31] of dstring;
  150.     RootDirectoryICB                 : UDF_LongAllocationDescriptor;
  151.     DomainIdentifier                 : UDF_EntityIdentifier;
  152.     NextExtent                       : UDF_LongAllocationDescriptor;
  153.     StreamDirectoryICB               : UDF_LongAllocationDescriptor;
  154.     Reserved                         : packed array [0..31] of Byte;
  155.   end;    PUDF_FileSetDescriptor = ^UDF_FileSetDescriptor;
  156. (* Partition Header Descriptor (ECMA 167r3 4/14.3) *)   UDF_PartitionHeaderDescriptor = packed record
  157.     UnallocatedSpaceTable     : UDF_ShortAllocationDescriptor;
  158.     UnallocatedSpaceBitmap    : UDF_ShortAllocationDescriptor;
  159.     PartitionIntegrityTable   : UDF_ShortAllocationDescriptor;
  160.     FreedSpaceTable           : UDF_ShortAllocationDescriptor;
  161.     FreedSpaceBitmap          : UDF_ShortAllocationDescriptor;
  162.     Reserved                  : packed array [0..87] of Byte;
  163.   end;    PUDF_PartitionHeaderDescriptor = ^UDF_PartitionHeaderDescriptor;
  164. (* File Identifier Descriptor (ECMA 167r3 4/14.4) *)   UDF_FileIdentifierDescriptor = packed record     DescriptorTag              : UDF_DescriptorTag;
  165.     FileVersionNumber          : Word;
  166.     FileCharacteristics        : Byte;
  167.     LengthOfFileIdentifier     : Byte;
  168.     ICB                        : UDF_LongAllocationDescriptor;
  169.     LengthOfImplementationUse  : Word;
  170.     UDF_EntityIdentifierFlags  : Byte;
  171.   end;
  172.    PUDF_FileIdentifierDescriptor = ^UDF_FileIdentifierDescriptor;
  173. (* Allocation Ext Descriptor (ECMA 167r3 4/14.5) *) Type      UDF_AllocExtDesc = Packed record           DescriptorTag                  : UDF_DescriptorTag;           PreviousAllocExtLocation       : Dword;           LengthOfAllocationDescriptors  : Dword;      end;       PUDF_AllocExtDesc = ^UDF_AllocExtDesc;
  174. (* ICB Tag (ECMA 167r3 4/14.6) *)   UDF_ICBTag = packed record     PriorRecordedNumberOfDirectEntries  : Dword;
  175.     StrategyType                        : Word;
  176.     StrategyParameter                   : packed array [0..1] of Byte;
  177.     MaximumNumberOfEntries              : Word;
  178.     Reserved                            : Byte;
  179.     FileType                            : Byte;
  180.     ParentICBLocation                   : UDF_RecordedAddress;
  181.     Flags                               : Word;
  182.   end;     PUDF_ICBTag = ^UDF_ICBTag;
  183. (* Indirect Entry (ECMA 167r3 4/14.7) *)   UDF_IndirectEntry = packed record     DescriptorTag         : UDF_DescriptorTag;
  184.     ICBTag                : UDF_ICBTag;
  185.     IndirectICB           : UDF_LongAllocationDescriptor;
  186.   end;    PUDF_IndirectEntry = ^UDF_IndirectEntry;
  187. (* Terminal Entry (ECMA 167r3 4/14.8) *)   UDF_TerminalEntry = packed record     DescriptorTag   : UDF_DescriptorTag;
  188.     UDF_ICBTag      : UDF_ICBTag;
  189.   end;    PUDF_TerminalEntry = ^UDF_TerminalEntry;
  190. (* File Entry (ECMA 167r3 4/14.9) *)   UDF_FileEntry = packed record     DescriptorTag                : UDF_DescriptorTag;
  191.     ICBTag                       : UDF_ICBTag;
  192.     Uid                          : DWord;
  193.     Gid                          : DWord;
  194.     Permissions                  : DWord;
  195.     FileLinkCount                : Word;
  196.     RecordFormat                 : Byte;
  197.     RecordDisplayAttributes      : Byte;
  198.     RecordLength                 : DWord;
  199.     InformationLength            : int64;
  200.     LogicalBlocksRecorded        : int64;
  201.     AccessDateAndTime            : UDF_TimeStamp;
  202.     ModificationDateAndTime      : UDF_TimeStamp;
  203.     AttributeDateAndTime         : UDF_TimeStamp;
  204.     Checkpoint                   : DWord;
  205.     ExtendedAttributeICB         : UDF_LongAllocationDescriptor;
  206.     ImplementationIdentifier     : UDF_EntityIdentifier;
  207.     UniqueID                     : int64;
  208.     LengthOfExtendedAttributes   : DWord;
  209.     LengthOfAllocationDescriptors: DWord;
  210.     AllocationDescriptors        : packed array [0..1871] of Byte;
  211.   end;    PUDF_FileEntry = ^UDF_FileEntry;
  212. Type   UDF_ExtendedAttributeHeaderDescriptor = packed record     DescriptorTag                     : UDF_DescriptorTag;
  213.     ImplementationAttributesLocation  : DWord;
  214.     ApplicationAttributesLocation     : DWord;
  215.   end;    PUDF_ExtendedAttributeHeaderDescriptor = ^UDF_ExtendedAttributeHeaderDescriptor;
  216. (* Generic Format (ECMA 167r3 4/14.10.2) *)   UDF_GenericExtendedAttribute = packed record     AttributeType             : DWord;
  217.     AttributeSubtype          : Byte;
  218.     Reserved                  : packed array [0..2] of Byte;
  219.     AttributeLength           : DWord;
  220.     AttrData1stByte           : Byte;
  221.   end;
  222.    PUDF_GenericExtendedAttribute = ^UDF_GenericExtendedAttribute;
  223.      UDF_ExtendedAttributes = packed record           Header  : UDF_ExtendedAttributeHeaderDescriptor;           Content : UDF_GenericExtendedAttribute;      end;       PUDF_ExtendedAttributes = ^UDF_ExtendedAttributes;
  224. (* Character Set Information (ECMA 167r3 4/14.10.3) *)   UDF_CharacterSetInformationExtendedAttribute = packed record     AttributeType            : DWord;
  225.     AttributeSubtype         : Byte;
  226.     Reserved                 : packed array [0..2] of Byte;
  227.     AttributeLength          : DWord;
  228.     EscapeSequencesLength    : DWord;
  229.     CharacterSetType         : Byte;
  230.     EscapeSeq1stByte         : Byte;
  231.   end;    PUDF_CharacterSetInformationExtendedAttribute = ^UDF_CharacterSetInformationExtendedAttribute;
  232. (* Alternate Permissions (ECMA 167r3 4/14.10.4) *)      UDF_AlternatePermissions = Packed record           AttributeType      : Dword;           AttributeSubtype   : Byte;           Reserved           : Packed array [0..2] of Byte;           AttributeLength    : DWord;           OwnerIdent         : Word;           GroupIdent         : Word;           Permission         : Word;      end;       PUDF_AlternatePermissions = ^UDF_AlternatePermissions;
  233. (* File Times Extended Attribute (ECMA 167r3 4/14.10.5) *)      UDF_FileTimesExtendedAttribute = Packed record           AttributeType          : DWord;           AttributeSubtype       : Byte;           Reserved               : Packed array [0..2] of Byte;           AttributeLength        : DWord;           DataLength             : DWord;           FileTimeExistence      : DWord;           FileTimes              : UDF_Timestamp;      end;        PUDF_FileTimesExtendedAttribute = ^UDF_FileTimesExtendedAttribute;
  234. (* Information Times Extended Attribute (ECMA 167r3 4/14.10.6) *)   UDF_InformationTimesExtendedAttribute = packed record     AttributeType            : DWord;
  235.     AttributeSubtype         : Byte;
  236.     Reserved                 : packed array [0..2] of Byte;
  237.     AttributeLength          : DWord;
  238.     DataLength               : DWord;
  239.     InformationTimeExistence : DWord;
  240.     InfoTimes1stByte         : Byte;
  241.   end;    PUDF_InformationTimesExtendedAttribute = ^UDF_InformationTimesExtendedAttribute;
  242. (* Device Specification (ECMA 167r3 4/14.10.7) *)   UDF_DeviceSpecificationExtendedAttribute = packed record     AttributeType                : DWord;
  243.     AttributeSubtype             : Byte;
  244.     Reserved                     : packed array [0..2] of Byte;
  245.     AttributeLength              : DWord;
  246.     ImplementationUseLength      : DWord;
  247.     MajorDeviceIdentification    : DWord;
  248.     MinorDeviceIdentification    : DWord;
  249.     ImpUse1stByte                : Byte;
  250.   end;    PUDF_DeviceSpecificationExtendedAttribute = ^UDF_DeviceSpecificationExtendedAttribute;
  251. (* Implementation Use Extended Attr (ECMA 167r3 4/14.10.8) *)   UDF_ImplementationUseExtendedAttribute = packed record     AttributeType              : DWord;
  252.     AttributeSubtype           : Byte;
  253.     Reserved                   : packed array [0..2] of Byte;
  254.     AttributeLength            : DWord;
  255.     ImplementationUseLength    : DWord;
  256.     ImplementationIdentifier   : UDF_EntityIdentifier;
  257.     ImpUse1stByte              : Byte;
  258.   end;    PUDF_ImplementationUseExtendedAttribute = ^UDF_ImplementationUseExtendedAttribute;
  259. (* Application Use Extended Attribute (ECMA 167r3 4/14.10.9) *)   UDF_ApplicationUseExtendedAttribute = packed record     AttributeType              : DWord;
  260.     AttributeSubtype           : Byte;
  261.     Reserved                   : packed array [0..2] of Byte;
  262.     AttributeLength            : DWord;
  263.     ApplicationUseLength       : DWord;
  264.     ApplicationIdentifier      : UDF_EntityIdentifier;
  265.     ApplicationUse1stByte      : Byte;
  266.   end;    PUDF_ApplicationUseExtendedAttribute = ^UDF_ApplicationUseExtendedAttribute;
  267. (* Unallocated Space Entry (ECMA 167r3 4/14.11) *) Type   UDF_UnallocatedSpaceEntry = packed record     DescriptorTag                    : UDF_DescriptorTag;
  268.     UDF_ICBTag                       : UDF_ICBTag;
  269.     LengthOfAllocationDescriptors    : DWord;
  270.     AllocDescs1stByte                : Byte;
  271.   end;    PUDF_UnallocatedSpaceEntry = ^UDF_UnallocatedSpaceEntry;
  272. (* Space Bitmap Descriptor (ECMA 167r3 4/14.12) *)   UDF_SpaceBitmapDescriptor = packed record     DescriptorTag       : UDF_DescriptorTag;
  273.     NumberOfBits        : DWord;
  274.     NumberOfBytes       : DWord;
  275.     Bitmap1stByte       : Byte;
  276.   end;    PUDF_SpaceBitmapDescriptor = ^UDF_SpaceBitmapDescriptor;
  277. (* Partition Integrity Entry (ECMA 167r3 4/14.13) *)      UDF_PartitionIntegrityEntry = packed record           DescriptorTag            : UDF_DescriptorTag;           UDF_ICBTag               : UDF_ICBTag;           RecordingDateAndTime     : UDF_Timestamp;           IntegrityType            : Byte;           reserved                 : array [0..174] of Byte;           ImplimentationIdentifier : UDF_EntityIdentifier;           ImplimentationUse        : packed array [0..255] of Byte;      end;
  278. (* Logical Volume Header Descriptor (ECMA 167r3 4/14.15) *)     UDF_LogicalVolHeaderDesc = Packed record           UniqueID : int64;           Reserved : packed array [0..23] of Byte;      end;        PUDF_LogicalVolHeaderDesc = ^UDF_LogicalVolHeaderDesc;
  279. (* Path Component (ECMA 167r3 4/14.16.1) *)      UDF_PathComponent = packed record           ComponentType              : Byte;           LengthComponentIdent       : Byte;           ComponentFileVersionNum    : Word;           ComponentIdent1stByte      : dstring;      end;       PUDF_PathComponent = ^UDF_PathComponent;
  280. (* File Entry (ECMA 167r3 4/14.17) *)   UDF_ExtendedFileEntry = packed record     DescriptorTag                  : UDF_DescriptorTag;
  281.     ICBTag                         : UDF_ICBTag;
  282.     Uid                            : DWord;
  283.     Gid                            : DWord;
  284.     Permissions                    : DWord;
  285.     FileLinkCount                  : Word;
  286.     RecordFormat                   : Byte;
  287.     RecordDisplayAttributes        : Byte;
  288.     RecordLength                   : DWord;
  289.     InformationLength              : int64;
  290.     ObjectSize                     : int64;
  291.     LogicalBlocksRecorded          : int64;
  292.     AccessDateAndTime              : UDF_TimeStamp;
  293.     ModificationDateAndTime        : UDF_TimeStamp;
  294.     CreationDateAndTime            : UDF_TimeStamp;
  295.     AttributeDateAndTime           : UDF_TimeStamp;
  296.     Checkpoint                     : DWord;
  297.     reserved                       : DWord;
  298.     ExtendedAttributeICB           : UDF_LongAllocationDescriptor;
  299.     StreamDirectoryICB             : UDF_LongAllocationDescriptor;
  300.     ImplementationIdentifier       : UDF_EntityIdentifier;
  301.     UniqueID                       : int64;
  302.     LengthOfExtendedAttributes     : DWord;
  303.     LengthOfAllocationDescriptors  : DWord;
  304.     ExtendedAttr1stByte            : Byte;
  305.   end;
  306.    PUDF_ExtendedFileEntry = ^UDF_ExtendedFileEntry;
  307. implementation
  308. end.