From 25ac1c89f4ce070e041437ddbcdd18ab2ab223be Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 25 May 2025 01:02:32 +1000 Subject: [PATCH] ... --- structures/FileSystem.inc | 172 ++++++++++++++++++++++---------------- 1 file changed, 102 insertions(+), 70 deletions(-) diff --git a/structures/FileSystem.inc b/structures/FileSystem.inc index 0ea7cda..14b5ee8 100644 --- a/structures/FileSystem.inc +++ b/structures/FileSystem.inc @@ -62,114 +62,146 @@ BOOT_SECTOR EQU #00 //////////////////////////////////////////////////////////////////////////////////////////// STRUCT _sFSinfo -.LEAD_SIGNATURE DWORD #41615252 ; #52 #52 #61 #41 -.RESERVED_1 BLOCK #1E0,0 -.DATA_SIGNATURE DWORD #61417272 ; #72 #72 #41 #61 -.FREE_CLUSTERS_COUNT DWORD #FFFF'FFFF -.FIRST_FREE_CLUSTER DWORD #FFFF'FFFF -.RESERVED_2 BLOCK #0C,0 -.SECTOR_SIGNATURE DWORD #AA550000 ; #00 #00 #55 #AA +.LEAD_SIGNATURE DWORD #4161'5252 ; #00 ; #52,#52,#61,#41 +.RESERVED_1 BLOCK #1E0,0 ; #04 +.DATA_SIGNATURE DWORD #6141'7272 ; #1E4 ; #72,#72,#41,#61 +.FREE_CLUSTERS_COUNT DWORD #FFFF'FFFF ; #1E8 +.FIRST_FREE_CLUSTER DWORD #FFFF'FFFF ; #1EC +.RESERVED_2 BLOCK #0C,0 ; #1F0 +.SECTOR_SIGNATURE DWORD #AA55'0000 ; #00 #00 #55 #AA ENDS - ; //--------------------------------------------------------------------------- - STRUCT _sBOOT_SECTOR_PARAMS -.JMP: BLOCK 3,0 ; BS_jmpBoot +#00 "JMP" -.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; BS_OEMName +#03 DOS NAME - DB "DSS_1.70" + STRUCT _sBOOT_SECTOR_PARAMS ; FAT 12-16 +.JMP D24 #000000 ; BS_jmpBoot +#00 "JMP" +.ID_NAME TEXT 8,{"DSS 1.7","1"} ; BS_OEMName +#03 DOS NAME - DB "DSS_1.70" ; Block Parameters BIOS -.BytesPerSector: WORD #200 ; BPB_BytsPerSec +#0B Размер сектора в байтах -.SectorsPerCluster: BYTE 2 ; BPB_SecPerClus +#0D Размер кластера в секторах -.RESERVED_SECTORS: WORD 1 ; BPB_RsvdSecCnt +#0E Размер системной области (включая этот сектор) RESERVE SECTORS -.Number_of_FATs: BYTE 2 ; BPB_NumFATs +#10 Количество таблиц FAT -.FilesInRootDIR: WORD 112 ; BPB_RootEntCnt +#11 Число описателей файлов в корневом каталоге (в FAT32 - 0) -.SectorsPerDrive: WORD 1440 ; BPB_TotSec16 +#13 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) -.DRIVE_TYPE: BYTE #F0 ; BPB_Media +#15 Тип устройства -.SectorsPerFAT16: WORD 2 ; BPB_FATSz16 +#16 Размер одной FAT в секторах (0 в FAT32) -.SectorsPerTrack: WORD 9 ; BPB_SecPerTrk +#18 Размер дорожки в секторах -.HEADS: WORD 2 ; BPB_NumHeads +#1A количество головок -.HIDDEN: DWORD 0 ; BPB_HiddSec +#1C количество крытых секторов -.BPB_BIG_TOTAL_SECTORS_L: WORD 0 ; BPB_TotSec32 +#20 BIG TOTAL SECTOR Low word -.BPB_BIG_TOTAL_SECTORS_H: WORD 0 ; BPB_TotSec32 +#22 BIG TOTAL SECTOR High word +.BytesPerSector WORD #200 ; BPB_BytsPerSec +#0B Размер сектора в байтах +.SectorsPerCluster BYTE 2 ; BPB_SecPerClus +#0D Размер кластера в секторах +.RESERVED_SECTORS WORD 1 ; BPB_RsvdSecCnt +#0E Размер системной области (включая этот сектор) RESERVE SECTORS +.Number_of_FATs BYTE 2 ; BPB_NumFATs +#10 Количество таблиц FAT +.FilesInRootDIR WORD 112 ; BPB_RootEntCnt +#11 Число описателей файлов в корневом каталоге (в FAT32 - 0) +.SectorsPerDrive WORD 1440 ; BPB_TotSec16 +#13 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) +.DRIVE_TYPE BYTE #F0 ; BPB_Media +#15 Тип устройства +.SectorsPerFAT16 WORD 2 ; BPB_FATSz16 +#16 Размер одной FAT в секторах (0 в FAT32) +.SectorsPerTrack WORD 9 ; BPB_SecPerTrk +#18 Размер дорожки в секторах +.HEADS WORD 2 ; BPB_NumHeads +#1A количество головок +.HIDDEN DWORD 0 ; BPB_HiddSec +#1C количество крытых секторов +.BPB_BIG_TOTAL_SECTORS_L WORD 0 ; BPB_TotSec32 +#20 BIG TOTAL SECTOR Low word +.BPB_BIG_TOTAL_SECTORS_H WORD 0 ; BPB_TotSec32 +#22 BIG TOTAL SECTOR High word ; FAT 12-16 -.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; BS_DrvNum +#24 Физический номер драйва -.reserved: BYTE 0 ; BS_Reserved1 +#25 Зарезервировано -.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; BS_BootSig +#26 Сигнатура - #29 -.BPB_SERIAL_NUMBER: DWORD 0 ; BS_VolID +#27 VOLUME SERIAL NUMBER -.BPB_LABEL: TEXT 11,{"NO NAME"," "}; BS_VolLab +#2B Метка диска -.ID_FAT: TEXT 8,{"FAT16"," "} ; BS_FilSysType +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! +.BPB_PHISICAL_DRIVE_NUMBER BYTE #80 ; BS_DrvNum +#24 Физический номер драйва +.reserved BYTE 0 ; BS_Reserved1 +#25 Зарезервировано +.BPB_EXT_BOOT_RECORD_SIGNATURE BYTE #29 ; BS_BootSig +#26 Сигнатура - #29 +.BPB_SERIAL_NUMBER DWORD 0 ; BS_VolID +#27 VOLUME SERIAL NUMBER +.BPB_LABEL TEXT 11,{"NO NAME"," "}; BS_VolLab +#2B Метка диска +.ID_FAT TEXT 8,{"FAT16"," "} ; BS_FilSysType +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! ENDS ; ; ; FAT 32 STRUCT _sBOOT_SECTOR_PARAMS_FAT32 .skip BLOCK #24,0 -.SectorsPerFAT32: DWORD 4 ; +#24 Размер одной FAT в секторах +.SectorsPerFAT32 DWORD 4 ; +#24 Размер одной FAT в секторах .MainFATnumber WORD 0 ; +#28 Номер главной таблицы FAT .Version WORD 0 ; +#2A Версия FAT32 (обычно 0) -.RootDirStartCluster: DWORD 2 ; +#2C Первый кластер корневого каталога (обычно 2) +.RootDirStartCluster DWORD 2 ; +#2C Первый кластер корневого каталога (обычно 2) .FSINFO_Sector WORD 1 ; +#30 Номер сектора структуры FSINFO (обычно 1) .CopyBootSector WORD 6 ; +#32 Номер сектора - копии загрузочного (обычно 6) -.reserved_block: BLOCK 12 ; +#34 Зарезервировано +.reserved_block BLOCK 12 ; +#34 Зарезервировано .FDD_Number BYTE 0 ; +#40 Номер дисковода для функций BIOS -.reserved: BYTE 0 ; +#41 Зарезервировано -.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#42 Сигнатура - #29 -.BPB_SERIAL_NUMBER: DWORD 0 ; +#43 VOLUME SERIAL NUMBER -.BPB_LABEL: TEXT 11,{"NO NAME"," "} ; +#47 Метка диска -.ID_FAT: TEXT 8,{"FAT16"," "} ; +#52 Аббревиатура файловой системы +.reserved BYTE 0 ; +#41 Зарезервировано +.BPB_EXT_BOOT_RECORD_SIGNATURE BYTE #29 ; +#42 Сигнатура - #29 +.BPB_SERIAL_NUMBER DWORD 0 ; +#43 VOLUME SERIAL NUMBER +.BPB_LABEL TEXT 11,{"NO NAME"," "} ; +#47 Метка диска +.ID_FAT TEXT 8,{"FAT16"," "} ; +#52 Аббревиатура файловой системы ENDS ; +#5A ; ; STRUCT _sMBR_PARTITION_RECORD -.isActive: BYTE 0 ; +#00 -.Start_head: BYTE 0 ; +#01 -.Start_sector: BYTE 0 ; +#02 -.Start_cylinder: BYTE 0 ; +#03 -.FS_ID: BYTE 0 ; +#04 -.End_head: BYTE 0 ; +#05 -.End_sector: BYTE 0 ; +#06 -.End_cylinder: BYTE 0 ; +#07 -.Start_LBA: DWORD 0 ; +#08 -.Size_LBA: DWORD 0 ; +#0C +.isActive BYTE 0 ; +#00 +.Start_head BYTE 0 ; +#01 +.Start_sector BYTE 0 ; +#02 +.Start_cylinder BYTE 0 ; +#03 +.FS_ID BYTE 0 ; +#04 +.End_head BYTE 0 ; +#05 +.End_sector BYTE 0 ; +#06 +.End_cylinder BYTE 0 ; +#07 +.Start_LBA DWORD 0 ; +#08 +.Size_LBA DWORD 0 ; +#0C ENDS ; ; STRUCT _sMBR_PARTITION_TABLE ;, #01BE ; MBR: Offset of partition table in the MBR -.Record_1: _sMBR_PARTITION_RECORD ; +#1BE -.Record_2: _sMBR_PARTITION_RECORD ; +#1CE -.Record_3: _sMBR_PARTITION_RECORD ; +#1DE -.Record_4: _sMBR_PARTITION_RECORD ; +#1EE +.Record_1 _sMBR_PARTITION_RECORD ; +#1BE +.Record_2 _sMBR_PARTITION_RECORD ; +#1CE +.Record_3 _sMBR_PARTITION_RECORD ; +#1DE +.Record_4 _sMBR_PARTITION_RECORD ; +#1EE ENDS ; ; STRUCT _sBOOT_SECTOR -.PARAMS: _sBOOT_SECTOR_PARAMS_FAT32 -.BOOT_CODE: BLOCK #1BE-_sBOOT_SECTOR_PARAMS_FAT32,0 ; +#3E boot loader's code -.PARTITION_TABLE: _sMBR_PARTITION_TABLE ; +#1BE table = 4x16 bytes -.MBR_SIGNATURE: WORD #AA55 ; +#1FE Signature +.PARAMS _sBOOT_SECTOR_PARAMS_FAT32 +.BOOT_CODE BLOCK #1BE-_sBOOT_SECTOR_PARAMS_FAT32,0 ; +#3E boot loader's code +.PARTITION_TABLE _sMBR_PARTITION_TABLE ; +#1BE table = 4x16 bytes +.MBR_SIGNATURE WORD #AA55 ; +#1FE Signature ENDS ; ; STRUCT FAT_DIRECTORY_RECORD -.NAME: TEXT 8,{". "," "} ; DIR_Name #00 +00 NAME -.EXT: TEXT 3,{" "," "} ; --//--//; #08 +08 EXT -.ATTRIBUT: BYTE #10 ; DIR_Attr; #0B +11 ATTRIBUT -.RESERVED_NT: BYTE #00 ; DIR_NTRes; #0C +12 RESERVED -.RESERVED_FAT32: BYTE #00 ; DIR_CrtTimeHundth #0D +13 Десятые доли секунды создания файла (0-1.99) -.CREATE_TIME_FAT32: WORD #0000 ; DIR_CrtTime #0E +14 Время создания файла -.CREATE_DATE_FAT32: WORD #0000 ; DIR_CrtDate #10 +16 Дата создания файла -.LAST_ACCESS_DATE_FAT32: WORD #0000 ; DIR_LstAccDate #12 +18 Дата последнего доступа (r/w) -.FIRST_CLUSTER_H: WORD #0000 ; DIR_FstClusHI #14 +20 START CLUSTER high ;!TODO fat32 -.TIME: WORD #0000 ; DIR_WrtTime #16 +22 Time of last write. -.DATE: WORD #0000 ; DIR_WrtDate #18 +24 Date of last write. -.FIRST_CLUSTER_L: WORD #0000 ; DIR_FstClusLO #1A +26 START CLUSTER low -.F_SIZE: DWORD #00000000 ; DIR_FileSize #1C +28 SIZE FILE +.NAME TEXT 8,{". "," "} ; DIR_Name #00 +00 NAME +.EXT TEXT 3,{" "," "} ; --//--//; #08 +08 EXT +.ATTRIBUT BYTE #10 ; DIR_Attr; #0B +11 ATTRIBUT +.RESERVED_NT BYTE #00 ; DIR_NTRes; #0C +12 RESERVED +.RESERVED_FAT32 BYTE #00 ; DIR_CrtTimeHundth #0D +13 Десятые доли секунды создания файла (0-1.99) +.CREATE_TIME_FAT32 WORD #0000 ; DIR_CrtTime #0E +14 Время создания файла +.CREATE_DATE_FAT32 WORD #0000 ; DIR_CrtDate #10 +16 Дата создания файла +.LAST_ACCESS_DATE_FAT32 WORD #0000 ; DIR_LstAccDate #12 +18 Дата последнего доступа (r/w) +.FIRST_CLUSTER_H WORD #0000 ; DIR_FstClusHI #14 +20 START CLUSTER high ;!TODO fat32 +.TIME WORD #0000 ; DIR_WrtTime #16 +22 Time of last write. +.DATE WORD #0000 ; DIR_WrtDate #18 +24 Date of last write. +.FIRST_CLUSTER_L WORD #0000 ; DIR_FstClusLO #1A +26 START CLUSTER low +.F_SIZE DWORD #00000000 ; DIR_FileSize #1C +28 SIZE FILE ENDS ; structure size #20 +32 ;████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████; +//////////////////////////////////////////////////////////////////////////////////////////// + STRUCT BOOT_SECTOR_PARAMS_NTFS +.JMP D24 #000000 ; #00 BS_jmpBoot +.ID_NAME TEXT 8,{"NTFS"," "} ; #03 BS_OEMName +; Block Parameters BIOS +.BytesPerSector WORD #0002 ; #0B +.SectorsPerCluster BYTE #08 ; #0D +.ReservedSectors WORD #0000 ; #0E +.Always0_1 D24 #000000 ; #10 +.NotUsedByNTFS_1 WORD #0000 ; #13 +.MediaDescriptor BYTE #F8 ; #15 +.Always0_2 WORD #0000 ; #16 +.SectorsPerTrack WORD #3F00 ; #18 +.NumberOfHeads WORD #FF00 ; #1A +.HiddenSectors DWORD #3F000000 ; #1C +.NotUsedByNTFS_2 DWORD #00000000 ; #20 +.NotUsedByNTFS_3 DWORD #80008000 ; #24 +.TotalSectorsLow DWORD #00000000 ; #28 +.TotalSectorsHigh DWORD #4AF57F00 ; #2C +.LogClusterNumberLow_MFT DWORD #00000000 ; #30 +.LogClusterNumberHigh_MFT DWORD #04000000 ; #34 +.LogClusterNumberLow_MFTMirr DWORD #00000000 ; #38 +.LogClusterNumberHigh_MFTMirr DWORD #54FF0700 ; #3C +.ClustersPerFileRecordSegment DWORD #F6000000 ; #40 +.ClustersPerIndexBuffer BYTE #01 ; #44 +.NotUsedByNTFS_4 D24 #000000 ; #45 +.VolumeSerialNumberLow DWORD #C91B741C ; #48 +.VolumeSerialNumberHigh DWORD #14A51B74 ; #4C +.Checksum DWORD #00000000 ; #50 +.BootCode BLOCK 426 ; #54 +.MBR_Signature WORD #AA55 ; #1FE + ENDS +//////////////////////////////////////////////////////////////////////////////////////////// ;████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████; @@ -615,4 +647,4 @@ PartitionSysTypes: ; GPTE_FstLba 32 ; GPT PTE: First LBA (QWORD) ; GPTE_LstLba 40 ; GPT PTE: Last LBA inclusive (QWORD) ; GPTE_Flags 48 ; GPT PTE: Flags (QWORD) -; GPTE_Name 56 ; GPT PTE: Name +; GPTE_Name 56 ; GPT PTE: Name \ No newline at end of file