//------------------------------------------------ //--- 010 Editor v10.0.1 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ LittleEndian(); typedef struct { byte jump[3] ; char oem_name[8]; ushort bps; byte spc; ushort rsectors; byte fats_no; ushort root_ent; ushort sectors; byte media ; ushort spfat; ushort sptrk; ushort heads; uint hsectors; uint big_sectors; byte drive_no ; byte nt_flags; byte signature ; uint serial_no ; char volume_label[11]; char fs_type[8]; byte boot_code[442] ; uint unknown; ushort unknown2; ushort signature2 ; } BiosParameterBlock ; typedef struct { char blockId[8]; char volumeLabel[32]; char comment[160]; uint serial ; DOSDATE creationDate; DOSTIME creationTime; ushort codepageType; ushort codepage; uint rps; ushort bps; ushort bpc; uint unknown2; uint sectors; uint unknown3; uint64 unknown4; ushort major; ushort minor; uint unknown5; uint unknown6; byte filler[260]; } MediaInformationBlock ; typedef struct { char blockId[8]; uint unknown; uint unknown2; uint DIR_INTENT_CNT ; uint DIR_UPDATE_CNT ; byte unknown3[22]; byte unknown4[32]; char owner[32]; byte unknown5[16]; uint unknown6; ushort percentFull; ushort unknown7; byte filler[384]; } VolumeInformationBlock ; typedef struct { ushort length; short unknown; int start; } Extent ; typedef struct { Extent extents[2]; uint unknown; uint unknown2; uint logical_size; uint unknown3; uint physical_size; uint unknown4; uint physical_size2; uint unknown5; uint unknown6; } subfile ; typedef struct { uint unknown; uint unknown2; uint unknown3; ushort : 1; ushort subfiles_no : 2; ushort : 13; ushort unknown4; uint unknown5; uint unknown6; uint unknown7; DOSDATE date1; DOSTIME time1; DOSDATE date2; DOSTIME time2; uint unknown8; uint unknown9; uint unknown10; uint unknown11; uint unknown12; uint unknown13; uint unknown14; subfile subfiles[subfiles_no]; } direct ; typedef struct { char blockId[4]; uint unknown; ushort unknown2; ushort unknown3; uint unknown4; ushort unknown5; ushort unknown6; ushort unknown7; ushort unknown8; uint unknown9; } master_record ; typedef struct { byte unknown; byte size; byte unknown2; byte unknown3; byte unknown4; byte unknown5; char name[size - 2]; } dci_key ; typedef struct { ushort key_len; ushort record_len; dci_key key; byte padding[key_len - sizeof(key)]; direct dir; // byte unknown[record_len - sizeof(direct)]; } dci_entry ; typedef struct { char blockId[4]; uint unknown; uint unknown2; uint unknown3; uint unknown4; uint unknown5; ushort unknown6; ushort unknown7; uint unknown8; uint unknown9; dci_entry entries[9]; } dci ; BiosParameterBlock BPB; Assert(BPB.fs_type == "HPOFS", "Incorrect signature"); BigEndian(); FSeek(BPB.bps * 13); MediaInformationBlock MIB; Assert(MIB.blockId == "MEDINFO ", "Incorrect media information block ID"); FSeek(BPB.bps * 14); VolumeInformationBlock VIB; Assert(VIB.blockId == "VOLINFO ", "Incorrect volume information block ID"); FSeek(BPB.bps * 5); direct bpb; FSeek(BPB.bps * 6); direct directory; FSeek(BPB.bps * 7); direct freefile; FSeek(BPB.bps * 8); direct unknown4; FSeek(BPB.bps * 9); direct unknown5; FSeek(BPB.bps * 10); direct unknown6; FSeek(BPB.bps * directory.subfiles[0].extents[0].start); master_record directory_master; FSeek(BPB.bps * freefile.subfiles[0].extents[0].start); master_record freefile_master; FSeek(BPB.bps * (directory.subfiles[0].extents[0].start+8)); dci directory_dci;