FAT分区数据结构DBR--->FAT区--->根目录入口点集合---->然后呢????在看ramdisk的代码,其中的fat格式化函数有点疑问,看不懂。// 用总磁盘大小除以扇区大小,得到了分区的扇区数
bootSector->bsSectors = (USHORT)(devExt->DiskRegInfo.DiskSize /
devExt->DiskGeometry.BytesPerSector);//然后用整个分区的扇区数-DBR扇区数-根目录入口点集合扇区数 / 每簇扇区数 + 2
// 2 是fat区的前两个保留项
//最后得到的是fatEntries fat项的个数????? 这个怎么计算的???数据文件的区域呢?fatEntries =
(bootSector->bsSectors - bootSector->bsResSectors -
bootSector->bsRootDirEnts / DIR_ENTRIES_PER_SECTOR) /
bootSector->bsSecPerClus + 2;
bootSector->bsSectors = (USHORT)(devExt->DiskRegInfo.DiskSize /
devExt->DiskGeometry.BytesPerSector);//然后用整个分区的扇区数-DBR扇区数-根目录入口点集合扇区数 / 每簇扇区数 + 2
// 2 是fat区的前两个保留项
//最后得到的是fatEntries fat项的个数????? 这个怎么计算的???数据文件的区域呢?fatEntries =
(bootSector->bsSectors - bootSector->bsResSectors -
bootSector->bsRootDirEnts / DIR_ENTRIES_PER_SECTOR) /
bootSector->bsSecPerClus + 2;
ssssssssssssssssssssssssssssssssssssssssssssssssss
只是对文件系统稍微有点了解
FAT16的一个表项占16位,在磁盘容量小的时候,也可能占12位。因为文件是链式存储的,而表项记录的是文件所在的簇信息,所以如果磁盘的簇数大于4096(12位,0X1000),则表项占16位,反之亦反。
链表每节点记下一个即可啊,他的位置由上一个记。
typedef struct _NODE_
{
struct _NODE_ * pNext;
...;
};
而且单向链表是有一个数据节点和一个指向节点,
双向链表是一个数据节点和两个指向节点。
16位表项结构
簇大小
http://support.microsoft.com/kb/140365