1.一个FAT文件卷由四部分组成: 保留区(Reserved Region),FAT 区,根目录区(Root Directory Region),文件和目录数据区。FAT表中前两个簇号是不占空间的
2.分区的保留区(Reserved Region)中的第一个扇区必须是BPB(BIOS Parameter Block),此扇区有时也称作“引导扇区”、“保留扇区”或是“零扇区”。此扇区结构如下:
BS_jmpBoo 占3个字节 jmpBoot[0] = 0xEB, jmpBoot[1] = 0x??, jmpBoot[2] = 0x90和jmpBoot[0] = 0xE9, jmpBoot[1] = 0x??, jmpBoot[2] = 0x??表示此处可以为任意字节,任一种选择都可以。
BPB_BytsPerSec(11,12)表示每扇区的字节数
BPB_SecPerClus(13)表示每簇的扇区数
BPB_RsvdSecCn(14,15)保留区域的保留扇区数,FAT12/FAT16此值为1,FAT32此值为32
BPB_RootEntCnt(17,18),FAT16卷应使用512,FAT32为0
BPB_FATSz16(22,23) FAT12/FAT16 每个分区表所占的扇区数。对于FAT32,此域为0,此域可判断为FAT16或者FAT32
对于FAT32 一个FAT分区表所占的扇区数为(36,37,38,39)其中39为高位,而对于FAT16一个分区表所占的扇区数为(22,23)
目录项所占的扇区数与有多少个目录项有关,它将占用(目录项*32/512)个扇区。对于FAT16 FirstDataSector="根目录开始的扇区数"+目录项/16,对于FAT32的数据开始区=FAT开始的扇区数+2*一个分区表所占的扇区数;
对于FAT16根目录开始的扇区数为=FAT开始的扇区数+2*一个分区表所占的扇区数,对于FAT32根目录所在第一个簇的簇号为(44,45,46,47)
FAT开始的扇区数为偏移扇区数+保留区的扇区数
对于FAT32 ,FSInfoSecNum表示保留区中FAT32中FSINFO结构所占的扇区数。通常为1,读取该扇区的数据时,最新剩余的簇数量为在(488,489,490,491)。(492,493,494,495)告诉驱动程序从哪里开始寻找剩余的簇。
Fat16的组织形式 | |||||
引导扇区 | FAT1 | FAT2(重复的) | 根文件夹 | 其他文件夹及所有文件 | 剩余扇区 |
1扇区 | 实际情况取大小 | 同FAT1 | 32个扇区 | 开始簇编号(从2开始) | 不足一簇 |
FAT表实际上是一个数据表,以2个字节为单位,我们暂将这个单位称为FAT记录项,通常情况其第1、2个记录项(前4个字节)用作介质描述。从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。根据簇的表现情况FAT用相应的取值来描述,见表10
表10 FAT16记录项的取值含义(16进制) | |
FAT16记录项的取值 | 对应簇的表现情况 |
0000 | 未分配的簇 |
0002~FFEF | 已分配的簇 |
FFF0~FFF6 | 系统保留 |
FFF7 | 坏簇 |
FFF8~FFFF | 文件结束簇 |
看一幅在winhex所截FAT16的文件分配表,图10:
如图,FAT表以"F8 FF FF FF" 开头,此2字节为介质描述单元,并不参与FAT表簇链关系。小红字标出的是FAT扇区每2字节对应的簇号。
相对偏移0x4~0x5偏移为第2簇(顺序上第1簇),此处为FF,表示存储在第2簇上的文件(目录)是个小文件,只占用1个簇便结束了。
第3簇中存放的数据是0x0005,这是一个文件或文件夹的首簇。其内容为第5簇,就是说接下来的簇位于第5簇——〉 FAT表指引我们到达FAT表的第5簇指向,上面写的数据是"FF FF",意即此文件已至尾簇。
第4簇中存放的数据是0x0006,这又是一个文件或文件夹的首簇。其内容为第6簇,就是说接下来的簇位于第6簇——〉FAT表指引我们到达FAT表的第6簇指向,上面写的数据是0x0007,就是说接下来的簇位于第7簇——〉FAT表指引我们到达FAT表的第7簇指向……直到根据FAT链读取到扇区相对偏移0x1A~0x1B,也就是第13簇,上面写的数据是0x000E,也就是指向第14簇——〉14簇的内容为"FF FF",意即此文件已至尾簇。
后面的FAT表数据与上面的道理相同。不再分析。
短目录名不能出现小写字母
文章评论(0条评论)
登录后参与讨论