unsigned char BPB_TotSec16[2]; //FAT32 为 0 offset:19
unsigned char BPB_Media[1]; //存储介质 offset:21
unsigned char BPB_FATSz16[2]; //FAT32 为 0 offset:22
unsigned char BPB_SecPerTrk[2]; //磁道扇区数 offset:24
unsigned char BPB_NumHeads[2]; //磁头数 offset:26
unsigned char BPB_HiddSec[4]; //FAT 区前隐扇区数 offset:28
unsigned char BPB_TotSec32[4]; //该卷总扇区数 offset:32
unsigned char BPB_FATSz32[4]; //一个 FAT 表扇区数 offset:36
unsigned char BPB_ExtFlags[2]; //FAT32 特有 offset:40
unsigned char BPB_FSVer[2]; //FAT32 特有 offset:42
unsigned char BPB_RootClus[4]; //根目录簇号 offset:44
unsigned char FSInfo[2]; //保留扇区 FSINFO 扇区数 offset:48
unsigned char BPB_BkBootSec[2]; //通常为 6 offset:50
unsigned char BPB_Reserved[12]; //扩展用 offset:52
unsigned char BS_DrvNum[1]; // offset:64
unsigned char BS_Reserved1[1]; // offset:65
unsigned char BS_BootSig[1]; // offset:66
unsigned char BS_VolID[4]; // offset:67
unsigned char BS_FilSysType[11]; // offset:71
unsigned char BS_FilSysType1[8]; //"FAT32 " offset:82
};
在程序中我们采用以上的结构体指针对扇区数据指针进行转化,就可以直接读取数据中的某一字段,如要读取
BPB_BytesPerSec,可以这样来作:
((struct FAT32_DBR *)pSector)-> BPB_BytesPerSec
FAT32 中字节的排布是采用小端模式的。在我们程序中需要将它转为大端模式的表达方式。
这样就可以从 BPB 中读出关于磁盘的各种参数信息,为我们后面的工作作准备。而这个从 BPB 中读取参数装入到参数
表中以备后用的过程就是 FAT32 的初始化了。具体的实现如下:
FAT(文件分配表)
FAT 表是 FAT32 文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。可以说 FAT 表是 FAT32 文件系统
最有特色的一部分,它的链式存储机制也是 FAT32 的精华所在,也正因为有了它才使得数据的存储可以不连续,使磁盘的
功能发挥得更为出色。
FAT 表到底在什么地方?它到底是什么样子的呢?
一个扇区 512B,一个簇等于一个扇区也是 512B,也为 0.5KB
逻辑扇区号(也是簇号)为 0-59724
总容量为:59725*0.5/1024=29.16M 59725*512=30579200B
引导扇区开始簇为 0,即 512*0-512*1-1
保留簇为 8 个即引导扇区占用簇 0-7 那么第 9 个(簇号 8)为 FAT1 表开始 512*8=4096(1000);
评论19
最新资源