FAT16文件系统之目录项分析(四)

来源:互联网 发布:码字软件故事树 编辑:程序博客网 时间:2024/06/06 02:03

FAT16文件系统的FDT分析

1:FDT位置

FDT的含义为文件目录表,它在一个文件系统中的具体位置是紧跟在FAT2之后。

定位过程:

A:系统通过读取该分区表信息,定位到其DBR扇区

B:读取DBR的保留扇区数(OEH –0FH).

C:读取每个FAT扇区数(16H – 17H)

D:读取FAT表的个数保留扇区当数 +  FAT个数 * 每个FAT扇区数

FDT的数据内容



FAT16文件系统目录项分析

1:目录项的作用及结构特点

目录项对于FAT文件系统来讲也是很重要的一个组成部分,其主要及结构特点如下

A:分区中的每一个文件中文件夹都被分配一个大小为32字节的目录项,用心描述文件或文件夹的属性,大小,起始簇号和时间,日期等信息,那当然也有文件或文件夹的名字

B:在FAT文件系统中,目录被视为特殊类型的文件,所以每一个目录也跟文件一样有目录项。

C:在FAT16文件系统下,分区根目录下的文件及文件夹的目录项存放在FDT中,分区子目录下的文件及文件夹的目录项存放在数据区中相应的簇中。

D:根据目录项的作用及特点,可以把目录项分为四类

短文件名目录项长文件名目录项“.”目录项和“..”目录项卷标目录项

2:短文件名目录项

所谓的短文件名是指DOS和Windows 3.x时代文件名的传统格式即“8.3”格式。在这种格式的限制下,用户在给文件起名字的时候,主文件名不能超过8个字符,并且不支持中文。在这种格式下,文件目录项中只需要记录8 + 3 = 11字节就可以保存文件名了,(主文件名与扩展名之间的“.”是默认的,不有记录),这种格式的目录项就是短文件名目录项.

FAT16短文件名目录项的含义

字节偏移

字段长度

字段内容及含义

0x00

8

主文件名

0x08

3

文件的扩展名

 

 

 

0x0B

 

 

 

1

 

文件属性

00000000(读/写) 0x00

00000001(只读) 0x01

00000010(隐藏) 0x20

00000100(系统) 0x40

00001000(卷标) 0x08

00010000(子目录)0x10

00100000(存档) 0x20

0x0C

1

未用

0x0D

1

文件创建时间精确到10ms的值

0x0E

2

文件创建时间,包括时,分,秒

0x10

2

文件创建日期,包括年,月,日

0x12

2

文件最近访问日期,包括年,月,日

0x14

2

未用

0x16

2

文件修改时间,包括时,分,秒

0x18

2

文件修改日期,包括年,月,日

0x1A

2

文件的起始簇号

0x1c

4

文件大小(以字节为单位)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





参数详细分析

(1)      主文件名

文件名用不完8个字节,后面用空格(0x20)填充。

另外该位置的第一个字节也用来表示目录项的分配状态,当这个字节为 0x00时,表示该目录从未用过,当这个字节是0xE5时,表示该目录项曾经使用过,但目前已经被删除

(2)      文件扩展名

没有扩展名的用空格填充

(3)      文件属性

文件的各种属性,表示的方法是按二进制位定义,最高两位保留未用,

(4)      未用

(5)      文件创建时间精确到10ms的值

文件在创建时的时间值中精确到10ms的值用该字节表示。例如:86H,十进制为134,所以文件创建的时间为1340ms,即1.34s.

(6)      文件创建时间

A:0-4位,这5位记录秒的值,单位是2s,也就是把这四位的值乘以2,才是秒的值,其取值范围为0-29.

B:5-10位,这6位记录分的值,其取值范围为0-59.

C:11-15位,这5位记录时的值,其取值范围为0-23

计算出来的值再加上1340ms。才是文件最终的创建时间。.

(7)      文件创建日期

A:0-4位,这5位记录日的值,其取值范围为0-31

B:5-8位,这4位记录月的值,其取值范围为0-12.

C:9-15位,这7位记录年的值,其取值相对于1980年开始计数的,其值必须加上1980。

(8)      文件最近访问日期

同文件创建日期算法一样

(9)      未用

(10)  文件修改时间略

(11)  文件修改日期略

(12)  文件起始簇号

是指文件的内容所在的第一个簇号

(13)文件大小以字节大小为单位小端存储

3:长文件名目录项

         为了兼容DOS与Winddows 3.x在Winddows 95以上的系统中,超过8.3格式的文件或目录实际存储着两个名字,一个短文件名和一个长文件名。当创建一个长文件名时,其对应的短文件名的处理有以下三个原则:

A:系统取长文件名的前6个字符加上“~1”,形成短文件名,其扩展名保持不变

B:如果已经存在这个名字的文件,数字自动加1,“~2”

C:如果有DOS与Winddows 3.x的非法字符,以“­_”替代。

 

长文件名存储时,其属性值为 OFH,能够存储13个字符,如果文件名很长,一个长文件名需要多个目录项,这些目录是倒序排放在其短文件名的前面。

                                     FAT16长文件名目录项的含义

字节偏移

字段长度

字段内容及含义

0x00

1

序列号

0x01

10

文件名的第1-5个Unicode码字符

0x0B

1

属性标志 OFH固定值

0x0C

1

保留未用

0x0D

1

短文件名检验和

0x0E

12

文件名的第6-11个Unicode码字符

0x1A

2

始终为0

0x1c

2

文件名的第12-13个Unicode码字符

 

 











特殊说明

(1)      序列号

0-4位描述了长文件名目录项的顺序号

6位若为1,则表明是目录项的最后一项

如果文件被删除,该字节会改为“E5”。

(2)      文件名字符

如果文件名已经记录完,但该参数的空间中还有未用的字节,就会在文件名最后一个字符填充两个00H,随后未用的填充FFH

 

(3)      短文件名检验和

长文件名目录项通过这个检验和将其与短文件名目录项关联起来。检验和是通过短文件名计算而来的,同一长文件名的检验和必须一致。

 

         校验和的计算方法是依次将短文件名的各个字符对应的二进制相加,在每一步相加之前先将二进制的值依次向右移动一位,最右边的位循环移动到最左边,然后再加上下一个字符所对应的二进制值,直到把最后一个字符加完。

 

4:“.”目录项(当前目录)和“..”目录项(上级目录)

         在子目录所在的文件目录项区域中,总有两个特殊的目录,“.”目录项和“..”目录项可以用DOS命令的DIR查看到。

说明

A:“.”目录项所描述的起始簇号,是子目录本身所在簇号,

B:“..”目录项所描述的起始簇号,是上一级目录的起始簇号,如果上级目录为根目录,则起始簇号被设置为0.

C:这两个目录都大小被设置0,同其他的文件夹目录项一样。

系统利用“.”目录项(当前目录)和“..”目录项实现目录之间的双向联系,从而把整个文件系统联系在一起。

5:卷标目录项

         卷标可以被随时修改,存放在FDT中,

 

A:卷标属于短文件名,最大支持11个字符。

B:不记录起始簇号与大小

C:不记录创建时间和最后访问时间,只记录修改时间
原创粉丝点击