http://www.nondot.org/sabre/os/files/FileSystems/VFATInfo.txt
VFAT 文件系统结构详解
------------------------------------------------------------------------------------
(这篇文档是由Galen C. Hunt<gchunt@cs.rochester.edu>提供,并由Gordon Chaffee略加注释)
这篇文档提供了一个我对在Windows NT 3.5和Windows 95上使用的扩展FAT文件系统,一些粗略的、技术性的概貌上的理解。我并不保证下面的观点是正确的,虽然它显得是正确的。
扩展FAT文件系统几乎和在DOS 6.223410239847以上版本(包括6.223410239847 版)上使用的FAT文件系统完全相同,最重大的改变就是对长文件名的支持。它使名字长度上升到255个字符,包括空格和小写字母,而传统的只支持8.3名字长度。(8个字符的主文件名,3个字符的扩展文件名)
下面是对现在的Windows 95文件系统上,传统的FAT接口描述:
struct directory { // 短 8.3 命名
unsigned char name[8]; // 主文件名
unsigned char ext[3]; // 文件扩展名
unsigned char attr; // 属性字节
unsigned char lcase; // 主文件名和扩展名的大小写标志
unsigned char ctime_ms; // 创建时间(微秒)
unsigned char ctime[2]; // 创建时间
unsigned char cdate[2]; // 创建日期
unsigned char adate[2]; // 最后一次访问日期
unsigned char reserved[2]; // 保留字节 (忽略)
unsigned char time[2]; // 时间戳
unsigned char date[2]; // 日期戳
unsigned char start[2]; // 开始簇号
unsigned char size[4]; // 文件的大小
};
其中的lcase域描述主文件名和(或者)扩展文件名《基于8.3命名》是否是大写。这个域似乎没有在Windows 95上使用,但是已经在Windows NT上得到应用。名字的大小写从Windows NT 到 Windows 95并不完全兼容,反之也不完全兼容。Windows NT上使用8.3命名空间的、小写的文件名将会在Windows95上变成大写的。
注意:"start"域和"sized"域的值小端整数值。(关于大端、小端都是数据在内存中存储方式的描述)对这个结构中的域的解释都已经为大家所知晓,能在其他很多地方找到。
在扩展FAT文件系统中,Microsoft 为任何使用了扩展名字的文件,插入了一些附加目录入口。(任何符合老式的8.3编码规则的名字都不会有附加的项目) 我把这些叫做附加进入接口。基本上,一个接口就是一个特殊格式的目录进入点,这个进入点能够支持13个字符的文件扩展命名。可以把这些接口看作是额外的与文件目录进入点相对应的标签。Microsoft 倾向于把8.3命名作为文件的别名,而把扩展的文件目录进入点做为文件名。
下面是目录进入点接口的C语言结构:
struct slot { // 扩充至13个字符的长文件名
unsigned char id // 接口的序列号
unsigned char name0_4[10]; // 名字的前5个字符