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

DVD

开发平台:

Delphi

  1. {-----------------------------------------------------------------------------
  2.  Unit Name: ISO9660;
  3.  Author:    Dancemammal , Daniel Mann / Thomas Koos (original class structure)
  4.  Purpose:   Unit for working with ISO Images
  5.  History:   First Code Release
  6. -----------------------------------------------------------------------------}
  7. unit ISO9660ClassTypes;
  8. interface
  9. uses windows,Classes,SysUtils,CovertFuncs;
  10.                                                          
  11. Const
  12.      ISO_VD_PRIMARY      = 1;
  13.      ISO_VD_END          = 255;
  14.      ISO_STANDARD_ID     = 'CD001';
  15.      ISO_SYSTEM_ID       = 'WIN32';
  16.      ISO_LIBRARY_ID      = 'WWW.DANCEMAMMAL.COM';
  17.      MAX_DEPTH           = 255;
  18.      DEFAULT_SECTOR_SIZE = 2048;
  19.      HEADER_START_SECTOR = 16;
  20.     VSD_STD_ID_NSR02                     = 'NSR0'; (* (3/9.1) *)
  21. (* Standard Identifier (ECMA 167r3 2/9.1.2) *)     VSD_STD_ID_BEA01                     = 'BEA01'; (* (2/9.2) *)     VSD_STD_ID_BOOT2                     = 'BOOT2'; (* (2/9.4) *)     VSD_STD_ID_CD001                     = 'CD001'; (* (ECMA-119) *)     VSD_STD_ID_CDW02                     = 'CDW02'; (* (ECMA-168) *)     VSD_STD_ID_NSR03                     = 'NSR03'; (* (3/9.1) *)     VSD_STD_ID_TEA01                     = 'TEA01'; (* (2/9.3) *)
  22.     // Volume Descriptor Types
  23.     vdtBR   = $00; // Boot Record
  24.     vdtPVD  = $01; // Primary Volume Descriptor
  25.     vdtSVD  = $02; // Supplementary Volume Descriptor
  26.     vdtVDST = $ff; // Volume Descriptor Set Terminator
  27.     FilesPerBlock = 30;
  28. type
  29.   TCharArr = array of Char;
  30. Type
  31.   PPathTableRecord = ^TPathTableRecord;
  32.   TPathTableRecord = Packed Record
  33.     LengthOfDirectoryIdentifier      : Byte;
  34.     ExtendedAttributeRecordLength    : Byte;
  35.     LocationOfExtent                 : LongWord;
  36.     ParentDirectoryNumber            : Word;
  37.     DirectoryIdentifier              : array [0..36] of Char;
  38.     LocationOfExtentM                : LongWord;
  39.     LengthOfDirectoryIdentifierM     : Byte;
  40.     DirectoryIdentifierM             : array [0..127] of Char;
  41.     JolietLocationOfExtent           : LongWord;
  42.     JolietLocationOfExtentM          : LongWord;
  43.     LengthOfPathRecord               : Byte;
  44.     LengthOfPathRecordM              : Byte;
  45.   End;
  46.   PRootDirectoryRecord = ^TRootDirectoryRecord;
  47.   TRootDirectoryRecord = Packed Record
  48.      LengthOfDirectoryRecord          : Byte;
  49.      ExtendedAttributeRecordLength    : Byte;
  50.      LocationOfExtent                 : TBothEndianDWord;
  51.      DataLength                       : TBothEndianDWord;
  52.      RecordingDateAndTime             : TDirectoryDateTime;
  53.      FileFlags                        : Byte;
  54.      FileUnitSize                     : Byte;
  55.      InterleaveGapSize                : Byte;
  56.      VolumeSequenceNumber             : TBothEndianWord;
  57.      LengthOfFileIdentifier           : Byte; // = 1
  58.      FileIdentifier                   : Byte; // = 0
  59.   End;
  60.   PDirectoryRecord = ^TDirectoryRecord;
  61.   TDirectoryRecord = Packed Record
  62.     LengthOfDirectoryRecord          : Byte;
  63.     ExtendedAttributeRecordLength    : Byte;
  64.     LocationOfExtent                 : TBothEndianDWord;
  65.     DataLength                       : TBothEndianDWord;
  66.     RecordingDateAndTime             : TDirectoryDateTime;
  67.     FileFlags                        : Byte;
  68.     FileUnitSize                     : Byte;
  69.     InterleaveGapSize                : Byte;
  70.     VolumeSequenceNumber             : TBothEndianWord;
  71.     LengthOfFileIdentifier           : Byte;
  72.     // followed by FileIdentifier and padding bytes
  73.   End;
  74.   TPrimaryVolumeDescriptor = Packed Record
  75.      StandardIdentifier               : Array [0..4] Of Char;
  76.      VolumeDescriptorVersion          : Byte;
  77.      unused                           : Byte;
  78.      SystemIdentifier                 : Array [0..31] Of Char;
  79.      VolumeIdentifier                 : Array [0..31] Of Char;
  80.      Unused2                          : Array [0..7] Of Byte;
  81.      VolumeSpaceSize                  : TBothEndianDWord;
  82.      EscapeSequences                  : Array [0..31] of Char;
  83.      VolumeSetSize                    : TBothEndianWord;
  84.      VolumeSequenceNumber             : TBothEndianWord;
  85.      LogicalBlockSize                 : TBothEndianWord;
  86.      PathTableSize                    : TBothEndianDWord;
  87.      LocationOfTypeLPathTable         : LongWord;
  88.      LocationOfOptionalTypeLPathTable : LongWord;
  89.      LocationOfTypeMPathTable         : LongWord;
  90.      LocationOfOptionalTypeMPathTable : LongWord;
  91.      RootDirectory                    : TRootDirectoryRecord;
  92.      VolumeSetIdentifier              : Array [0..127] Of Char;
  93.      PublisherIdentifier              : Array [0..127] Of Char;
  94.      DataPreparerIdentifier           : Array [0..127] Of Char;
  95.      ApplicationIdentifier            : Array [0..127] Of Char;
  96.      CopyrightFileIdentifier          : Array [0..36] Of Char;
  97.      AbstractFileIdentifier           : Array [0..36] Of Char;
  98.      BibliographicFileIdentifier      : Array [0..36] Of Char;
  99.      VolumeCreationDateAndTime        : TVolumeDateTime;
  100.      VolumeModificationDateAndTime    : TVolumeDateTime;
  101.      VolumeExpirationDateAndTime      : TVolumeDateTime;
  102.      VolumeEffectiveDateAndTime       : TVolumeDateTime;
  103.      FileStructureVersion             : Byte;
  104.      ReservedForFutureStandardization : Byte;
  105.      ApplicationUse                   : Array [0..511] Of Byte;
  106.      ReservedForFutureStandardization2: Array [0..652] Of Byte;
  107.   End;
  108.   TSupplementaryVolumeDescriptor = Packed Record
  109.      StandardIdentifier               : Array [0..4] Of Char;
  110.      VolumeDescriptorVersion          : Byte;
  111.      VolumeFlags                      : Byte;
  112.      SystemIdentifier                 : Array [0..31] Of Char;
  113.      VolumeIdentifier                 : Array [0..31] Of Char;
  114.      Unused2                          : Array [0..7] Of Byte;
  115.      VolumeSpaceSize                  : TBothEndianDWord;
  116.      EscapeSequences                  : Array [0..31] of Char;
  117.      VolumeSetSize                    : TBothEndianWord;
  118.      VolumeSequenceNumber             : TBothEndianWord;
  119.      LogicalBlockSize                 : TBothEndianWord;
  120.      PathTableSize                    : TBothEndianDWord;
  121.      LocationOfTypeLPathTable         : LongWord;
  122.      LocationOfOptionalTypeLPathTable : LongWord;
  123.      LocationOfTypeMPathTable         : LongWord;
  124.      LocationOfOptionalTypeMPathTable : LongWord;
  125.      RootDirectory                    : TRootDirectoryRecord;
  126.      VolumeSetIdentifier              : Array [0..127] Of Char;
  127.      PublisherIdentifier              : Array [0..127] Of Char;
  128.      DataPreparerIdentifier           : Array [0..127] Of Char;
  129.      ApplicationIdentifier            : Array [0..127] Of Char;
  130.      CopyrightFileIdentifier          : Array [0..36] Of Char;
  131.      AbstractFileIdentifier           : Array [0..36] Of Char;
  132.      BibliographicFileIdentifier      : Array [0..36] Of Char;
  133.      VolumeCreationDateAndTime        : TVolumeDateTime;
  134.      VolumeModificationDateAndTime    : TVolumeDateTime;
  135.      VolumeExpirationDateAndTime      : TVolumeDateTime;
  136.      VolumeEffectiveDateAndTime       : TVolumeDateTime;
  137.      FileStructureVersion             : Byte;
  138.      ReservedForFutureStandardization : Byte;
  139.      ApplicationUse                   : Array [0..511] Of Byte;
  140.      ReservedForFutureStandardization2: Array [0..652] Of Byte;
  141.   End;
  142. Type
  143.     TISOImage_Volume_Descriptors = packed Record
  144.           Image_Fileformat            : String[30];
  145.           Image_Version               : String[30];
  146.           PrimaryVolumeDescriptor     : TPrimaryVolumeDescriptor;
  147.           SecondaryVolumeDescriptor   : TSupplementaryVolumeDescriptor;
  148.           PathTable                   : array of Pointer;
  149.           PathTable_Number            : integer;
  150.           Directories                 : array of Pointer;
  151.           Directories_Number          : integer;
  152.         end;
  153. Type
  154.   TBootVolumeDescriptor = packed record
  155.     StandardIdentifier               : Array [0..4] of Char;
  156.     VersionOfDescriptor              : Byte;
  157.     BootSystemIdentifier             : Array [0..31] of Char;
  158.     BootIdentifier                   : Array [0..31] of Char;
  159.     BootCatalogPointer               : LongWord;
  160.     Unused                           : Array [0..1972] of Byte;
  161.   end;
  162.   TBootCatalog = packed record
  163.     Header: Byte;
  164.     PlatformID: Byte;
  165.     Reserved1: Word;
  166.     Developer: packed array [4..27] of Char;
  167.     Checksum: Word;
  168.     KeyByte1: Byte;
  169.     KeyByte2: Byte;
  170.     BootIndicator: Byte;
  171.     BootMediaType: Byte;
  172.     LoadSegment: Word;
  173.     SystemType: Byte;
  174.     Unused1: Byte;
  175.     SectorCount: Word;
  176.     LoadRBA: DWORD;
  177.     Unused2: packed array [12..31] of Byte;
  178.     Unused3: packed array [48..2031] of Byte;
  179.   end;
  180. Type
  181.   TISOHeader = Packed Record
  182.        Header_Space     : Array [0..32767] of Char;
  183.   end;
  184. Type
  185.   TVolumeDescriptorSetTerminator = Packed Record
  186.     VolumeDescriptorType             : Byte;
  187.     StandardIdentifier               : Array [1..5] of Char;
  188.     VolumeDescriptorVersion          : Byte; // 7 so far
  189.     Unused                           : Array [1..2041] of Byte; //pad to 2048 
  190.   End;
  191. Type
  192.   TVolumeDescriptor = Packed Record
  193.     Case DescriptorType : Byte Of
  194.       vdtBR   : (BootRecord    : TBootVolumeDescriptor);
  195.       vdtPVD  : (Primary       : TPrimaryVolumeDescriptor);
  196.       vdtSVD  : (Supplementary : TSupplementaryVolumeDescriptor);
  197.   End;
  198. implementation
  199. end.