FAT32分析二

  继续接上文的FDT分析

     FAT表项由FAT1和FAT2组成。

FAT1表位置的定位:

     在我们前面介绍分区引导记录的时候提到,在偏移0EH处存储了保留扇区的个数,这个保留扇区数指的就是当前分区内DBR到FAT表之间的所有扇区的个数(包括DBR但不包括FAT表)。

FAT2表位置的定位:

     在我们前面介绍分区引导记录的时候提到,在偏移24H处存储了FAT表所占用的扇区个数,我们又知道FAT2是紧邻FAT1的,所以可以很容易得到FAT2的存储位置的偏移地址。

FAT表的特性:

     FAT表由一系列大小相等的FAT表项组成,它有如下特性:

     FAT表项由0和1号簇组成,FAT表项的成员都是以4字节为对齐单位,其中FAT表项中0和1号地址被系统保留以存储特殊标记内容,从2号开始(对应数据区的簇号)存储数据区每簇的信息,这些信息分为四个
     1,、如果某个簇未被分配使用,它所对应的FAT表项内的FAT表项值即用0进行填充,表示该FAT表项所对应的簇未分配使用。
     2、当某个簇已被分配使用时,则它对应的FAT表项值也就是该文件的下一个存储位置的簇号。

     3、如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记EOF,对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF。
     4、如果某个簇存在坏扇区,则整个簇会用FAT表项值0x0FFFFFF7标记为坏簇,不再使用,这个坏簇标记就记录在它所对应的FAT表项中。

三、数据区

      这里我把根目录区也放在这里了。

     当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,所以2号簇所对应的2号FAT表项也会被写入一个结束标记。

    每个目录对应一个簇号,每个簇里存储的可以是文件目录,也可以是目录目录。

目录目录里的簇地址就是目录地址,或者文件地址,有点绕吧,呵呵,

   其实数据区真没什么好说的,到此为止差不多了,接下来就是分析FAT32源码了,其实难也不难,关键在于恒心,将到此大概知道我意思了吧,源码还是自己去分析,呵呵!不多说了,看源码去了!

   再补充一点关于文件和目录的存储

struct direntry
{
 UINT8 deName[8];       // 文件名,不足部分以空格补充
 UINT8 deExtension[3];     // 扩展名,不足部分以空格补充
 UINT8 deAttributes;       // 文件属性
 UINT8 deLowerCase;        // 0
 UINT8 deCHundredth;       // 世纪
 UINT8 deCTime[2];         // 创建时间
 UINT8 deCDate[2];         // 创建日期
 UINT8 deADate[2];         // 访问日期
 UINT8 deHighClust[2];  // 开始簇的高字
 UINT8 deMTime[2];         // 最近的修改时间
 UINT8 deMDate[2];         // 最近的修改日期
 UINT8 deLowCluster[2];     // 开始簇的低字
 UINT8 deFileSize[4];      // 文件大小
};

    簇里存放文件的数据或者文件,或者目录。OK

四、源码分析完毕,不要小看源码少,还是有点小难度的!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值