FAT文件系统 短文件名目录项

FAT数据区的位置

FAT数据区紧跟FAT表2之后,可以按下面的步骤计算:
1 . 从引导扇区的偏移0x0E~0x0F得到保留扇区数。
2 . 从0x10处得到FAT表的个数
3 . 从偏移0X24~0X27得到每个FAT表的大小
4 . 数据区起始扇区号 = 保留扇区数 + 每个FAT表的大小扇区数 * FAT表个数

由于0簇区和1簇区为保留,故这里得到的数据区起始扇区号也即2号簇的起始扇区号。

其它簇的的起始扇区号 = 2号簇的扇区号 + 每簇的扇区数(由引导扇区的偏移0x0D得到每簇的扇区数)* (目的簇号-2)

短文件名目录数据结构

短文件名是一个文件的文件名不起过8个字符,扩展名为3个字符。短文件名目录中存放的广播名为8.3命名方式。

字节偏移 字节数 定义
0x0-0x7 8 文件名
0x8-0xA 3 扩展名
0xB 1 字节属性(二进制)
00000000(读写)
00000001(只读)
00000010(隐藏)
00000100(系统)
00001000(卷标)
00010000(子目录)
00100000(归档)
0x0c 1 系统保留
0x0d 1 文件创建的时间-精确到十分之一秒
0xE-0xF 2 文件创建的时间
0x10-0x11 2 文件创建日期
0x12~0x13 2 最后访问日期。
0x14~0x15 2 文件起始簇号的高两个字节。
0x16~0x17 2 文件最后修改的时间。
0x18~0x19 2 文件最后被修改时的日期。
0x1A~0x1B 2 文件内容起始簇号的低两个字节
0x1C~0x1 2 文件内容大小字节数

0x0-0x7:文件名,如果该目录项正在使用中0x0位置的值为文件名或子目录名的第一个字符,如果该目录项未被使用0x0位置的值为0x00,如果该目录项曾经被使用过但是现在已经被删除则0x0位置的值为0xE5
0x8-0xA:扩展名
0xB:描述文件的属性,该字段在短文件中不可取值0x0F,如果设置为0x0F则标志是长文件
0xC:1字节,保留 (这个位默认为0,只有短文件名时才有用.当为0x00时为文件名全大写,当为0x08时为文件名全小写;0x10时扩展名全大写,0x00扩展名全小写;当为0x18时为文件名全小写,扩展名全大写)
0xD:文件创建的时间-精确到十分之一秒
0xE-0xF:文件创建的时间-时分秒,16bit 被划分为 3个部分
0~4bit 为秒,以 2秒为单位,有效值为 0~29,可以表示的时刻为 0~58
5~10bit 为分,有效值为 0~59
11~15bit 为时,有效值为 0~23
0x10-0x11:文件创建日期,16bit 也划分为三个部分
0~4bit 为日,有效值为 1~31
5~8bit 为月,有效值为 1~12
9~15bit 为年,有效值为 0~127,这是一个相对于 1980 年的年数值,也就是说该值加上 1980即为文件创建的日期值。
0x12~0x13:2 个字节,最后访问日期。
0x14~0x15:2 个字节,文件起始簇号的高两个字节。
0x16~0x17:2 个字节,文件最后修改的时间。
0x18~0x19:2 个字节,文件最后被修改时的日期。
0x1A~0x1B:文件内容起始簇号的低两个字节,与 0x14~0x15 字节处的高两个字节组成文件内容起始簇号。
0x1C~0x1F:文件内容大小字节数,只对文件有效,子目录的目录项此处全部设置为 0。

短文件名分析

我们将格式化的分区改名为FAT32TEST,
1600417438175
然后根据以上公式计算得出数据区簇2的扇区号为8192,数据内容为:
1600417445197
文件或目录名以32个字节为单位进行扩展的,即短文件名占32个字节,长文件名会占多个32字节。
使用winhex的FAT Directory Entry(Normal/short entry format)模版分析如下:
1600417452285

从外部复制一个小的文件,文件名为123.txt,如下:
1600417485660
1600417493730

文件的内容存在于3号簇的内容如下:
1600417500587

如果直接在该分区新建一下文本文件,并改名,会和实验数据不一致。这是因为在Windows中对一个文件进行重新命名时,将会为新文件名建立一个新的目录项,然后删除原文件名的目录项。

取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!