|
楼主 |
发表于 2011-2-21 12:08:30
|
显示全部楼层
8.7.3 大写转换表目录项
大写转换表目录项的类型值为0x82。
在ExFAT中,文件属性目录项中记录文件名时会产生一个文件名校验,文件名参加校验时需要先将文件名进行大写转换后再进行计算。为此,ExFAT用一个表存储大写转换信息,并在根目录下建立一个类型值为0x82的大写转换表目录项,描述它的起始位置及大小,这个目录项位于根目录下的第3个目录项位置。
大写转换表目录项的结构见表8.7。
表8.7 大小写转换表目录项结构
字节偏移
(十六进制) 字 节 数 含 义
00~00 1 目录项类型值0x82
01~03 3 保留
04~07 4 表校验
08~13 12 保留
14~17 4 起始簇号
18~1F 8 文件大小字节数
(1) 0x00~0x00:1个字节,目录项类型值,大写转换表目录项的类型值为0x82。
(2) 0x01~0x03:3个字节,保留,设置为0。
(3) 0x04~0x07:4个字节,表校验,资料《Reverse Engineering the Microsoft exFAT File System》中给出的校验值计算函数如下:
UINT32 UPCaseChecksum(const unsigned char octets[], long NumberOfBytes)
{
UINT32 Checksum = 0;
long Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Checksum = ((Checksum <<31) | (Checksum>> 1)) + (UINT32) octets[Index];
}
return Checksum;
}
(4) 0x08~0x13:12个字节,保留。
(5) 0x14~0x17:4个字节,大写转换表的起始簇号,通常为3号簇。
(6) 0x18~0x1F:8个字节,大写转换表的大小字节数,固定为5836个字节。
下面实际分析一个大写转换表目录项,如图8.11所示。
图8.11
(1) 0x00~0x00:1个字节,“82”,说明这是一个类型值为0x82的簇位图目录项。
(2) 0x04~0x07:4个字节,“0DD319E6”,大写转换表的校验值。
(3) 0x14~0x17:4个字节,“03000000”,表示大写转换表起始簇为3号簇。
(4) 0x18~0x1F:8个字节,“CC16000000000000”,表示大写转换表的大小为5836个字节。 |
|