ISO9660 Structures, Records
ISO9660 records for CD and DVD and other compatible devices
Thanks to : Philip J. Erdelsky,San Diego, California USA,pje@acm.org,http://www.alumni.caltech.edu/~pje/
Thanks to : Contributers of Linux's [ISO-FS.H] file
Thanks to : opensource of XCDROM.SYS
Many others ...
ISO9660 PRIMARY VOLUME DESCRIPTOR = PVD
[BYTE]VDtype
[BYTE]VDid[5]
[BYTE]version
[BYTE]unused1
[BYTE]system_id[32]
[BYTE]volume_id[32]
[BYTE]unused2[8]
[DWORD]total_number_of_sectors[2]
[BYTE]unused3[32]
[WORD]volume_set_size[2]
[WORD]volume_sequence_number[2]
[WORD]sector_size[2]
[DWORD]path_table_size[2]
[DWORD]path_table_LE1
[DWORD]path_table_LE2
[DWORD]path_table_BE1
[DWORD]path_table_BE2
directory_recordroot_dir_rec (34bytes)
[BYTE]volume_set_id[128]
[BYTE]publisher_id[128]
[BYTE]preparer_id[128]
[BYTE]application_id[128]
[BYTE]copyright_file_id[37]
[BYTE]abstract_file_id[37]
[BYTE]bibliographic_file_id[37]
[date_iso9660]creation_date
[date_iso9660]modification_date
[date_iso9660]expiration_date
[date_iso9660]effective_date
[BYTE]file_structure_version
[BYTE]unused4
[BYTE]application_data[512]
[BYTE]unused5[653]
#Define iso_PRIMAR_VD 1
#Define iso_SUPLEM_VD 2
#Define iso_TERMIN_VD 255
#Define iso_ID_VD {67,68,48,48,49,1}
ISO9660 TERMINTOR VOLUME DESCRIPTOR =TVD
[BYTE]teminator (=255 = iso_TERMIN_VD)
[BYTE]id[6] (=iso_ID_VD)
[BYTE]unused[2041]
ISO9660 Date and Time record
[BYTE]year_[4] (ascii string)
[BYTE]month_[2] (ascii string)
[BYTE]day_[2]
[BYTE]hour_[2]
[BYTE]min_[2]
[BYTE]sec_[2]
[BYTE]houndres_[2]
[BYTE]greenwich15(*)
(*) greenwich15 -> SIGNED byte, in units of 15 minutes ! (west is negative, east is positive)
ISO9660 directory record
[BYTE]len_ (must be EVEN)
[BYTE]ext_attr_length' =0
[DWORD]first_sector[2]
[DWORD]size[2]
[BYTE]yearssince1900
[BYTE]month_
[BYTE]day_
[BYTE]hour_
[BYTE]min_
[BYTE]sec_
[BYTE]greenwich15
[BYTE]flags (*)
[BYTE]interleave_file_unit_size
[BYTE]interleave_gap
[WORD]volume_sequence_number[2]
[BYTE]name_len
[BYTE]name_[name_len]
[BYTE]padding_if_needed (**)
(*) flags (like DOS attributes but a little different) : '0:normal(0)|hidden(1) ; 1:file(0)|dir(1) ; 2:unassoc|assoc(1) ; 3:unspec|record(1) ; 4:no|permision(1) ; 5:0 ; 6:0 ; 7:no:notfinalrecord(1)
(**) padding_if_needed -> if name_len odd this exist else this field DOESN'T exists !
ISO9660 PATH TABEL for little endian and big endian
[BYTE]name_len (=1 for ROOT DIR)
[BYTE]unused1 '=0
[DWORD]firstsector
[WORD]parent (=1 for root dir)
[BYTE]name_plus_padding[name_len + (name_len and 1)]
ISO9660 supplementary volume descriptor = SVD
[BYTE]type_
[BYTE]id[5]
[BYTE]version '=1
[BYTE]flags
[BYTE]system_id[32]
[BYTE]volume_id[32]
[BYTE]unused2[8]
[DWORD]total_number_of_sectors[2]
[BYTE]escape_[120-88]
[WORD]volume_set_size[2]
[WORD]volume_sequence_number[2]
[WORD]sector_size[2]
[DWORD]path_table_size[2]
[DWORD]path_table_LE1
[DWORD]path_table_LE2
[DWORD]path_table_BE1
[DWORD]path_table_BE2
[directory_record]root_directory_record (34bytes)
[BYTE]volume_set_id[128]
[BYTE]publisher_id[128]
[BYTE]preparer_id[128]
[BYTE]application_id[128]
[BYTE]copyright_file_id[37]
[BYTE]abstract_file_id[37]
[BYTE]bibliographic_file_id[37]
[date_iso9660]creation_date
[date_iso9660]modification_date
[date_iso9660]expiration_date
[date_iso9660]effective_date
[BYTE]file_structure_version
[BYTE]unused4
[BYTE]application_data[512]
[BYTE]unused5[653]