FAT12引导扇区格式及根目录区条目格式
几乎所有的文件系统都会把磁盘划分为若干层次以方便组织和管理,这些层次包括:
①扇区(Sector):磁盘上的最小数据单元。
②簇(Cluster):一个或多个扇区。
③分区(Partition):通常指整个文件系统。
FAT12各区分布情况:
FAT12引导扇区格式(其中名称以BPB_开头的域属于BPB(BIOS ParameterBlock),以BS_开头的域不属于BPB,只是引导扇区(Boot Sector)的一部分):
名称 | 偏移 | 长度 | 内容 |
---|---|---|---|
BS_jmpBoot | 0 | 3 | 一个短跳转指令 |
BS_OEMName | 3 | 8 | 厂商名 |
BPB_BytsPerSec | 11 | 2 | 每扇区字节数 |
BPB_SecPerClus | 13 | 1 | 每簇扇区数 |
BPB_RsvdSecCnt | 14 | 2 | Boot记录占用多少扇区 |
BPB_NumFATs | 16 | 1 | 共有多少FAT表 |
BPB_RootEntCnt | 17 | 2 | 根目录文件数(条目数)最大值 |
BPB_TotSec16 | 19 | 2 | 扇区总数 |
BPB_Media | 21 | 1 | 介质描述符 |
BPB_FATSz16 | 22 | 2 | 每FAT扇区数 |
BPB_SecPerTrk | 24 | 2 | 每磁道扇区数 |
BPB_NumHeads | 26 | 2 | 磁头数(面数) |
BPB_HiddSec | 28 | 4 | 隐藏扇区数 |
BPB_TotSec32 | 32 | 4 | 如果BPB_TotSec16是0,由这个值记录扇区数 |
BS_DrvNum | 36 | 1 | 中断13的驱动器号 |
BS_Reservedl | 37 | 1 | 未使用 |
BS_BootSig | 38 | 1 | 扩展引导标记(29h) |
BS_VolID | 39 | 4 | 卷*** |
BS_VolLab | 43 | 11 | 卷标 |
BS_FileSysType | 54 | 8 | 文件系统类型 |
引导代码及其他 | 62 | 448 | 引导代码、数据及其他填充字符等 |
结束标志 | 510 | 2 | 0xAA55 |
根目录区位于第二个FAT表之后,开始的扇区号为19,它由若干个目录条目(Directory Entry)组成,条目最多有BPB_RootEntCnt个。由于根目录区的大小是依赖于BPB_RootEntCnt的,所以长度不固定,根目录区中的每一个条目占用32字节。
根目录区中的条目格式:
名称 | 偏移 | 长度 | 描述 |
---|---|---|---|
DIR_Name | 0 | 0xB | 文件名8字节,扩展名3字节 |
DIR_Attr | 0xB | 1 | 文件属性 |
保留位 | 0xC | 10 | 保留位 |
DIR_WrtTime | 0x16 | 2 | 最后一次写入时间 |
DIR_WrtDate | 0x18 | 2 | 最后一次写入日期 |
DIR_FstClus | 0x1A | 2 | 此条目对应的开始簇号 |
DIR_FileSize | 0x1C | 4 | 文件大小 |
比较重要的就是DIR_FstClus|0x1A这一项,它告诉我们文件存放在磁盘的什么位置,从而让我们可以找到它。软盘中一簇只包含一个扇区。数据区的第一个簇的簇号是2,而不是0或者1。