第三章 复合文档头
3.1 复合文档头的内容
复合文档头在文件的开始,且其大小必定为512字节。这意味着第一个Sector的开始相对文件的偏移量为512字节。
复合文档头的结构如下:
Offset Size Contents
0 8 复合文档文件标识:D0H CFH 11H E0H A1H B1H 1AH E1H
8 16 此文件的唯一标识(不重要, 可全部为0)
24 2 文件格式修订号 (一般为003EH)
26 2 文件格式版本号(一般为0003H)
28 2 字节顺序规则标识(见3.2)::FEH FFH = Little-Endian
FFH FEH = Big-Endian
30 2 复合文档中sector的大小(ssz),以2的幂形式存储, sector实际大小为s_size
= 2ssz 字节(一般为9即512字节, 最小值为7即128字节)
32 2 short-sector的大小(见5.1),以2的幂形式存储, short-sector实际大
小为s_s_size = 2sssz 字节(一般为6即64字节,最大为sector的大小)
34 10 Not used
44 4 用于存放扇区配置表(SAT)的sector总数
48 4 用于存放目录流的第一个sector的SID (见6)
52 4 Not used
56 4 标准流的最小大小(一般为4096 bytes), 小于此值的流即为短流。
60 4 用于存放短扇区配置表(SSAT)的第一个sector的SID (见5.2),
或为–2 (End Of Chain SID)如不存在。
64 4 用于存放短扇区配置表(SSAT)的sector总数
68 4 用于存放主扇区配置表(MSAT)的第一个sector的SID (见4.1),
或为–2 (End Of Chain SID) 若无附加的sectors。
72 4 用于存放主扇区配置表(MSAT)的sector总数
76 436 存放主扇区配置表(MSAT)的第一部分,包含109个SID。
3.2 字节顺序(Byte Order)
文件数据的二进制存储有两种方法Little-Endian 和 Big-Endian,但实际应用中只使用Little-Endian方法即:低位8字节存放在地址的低位,高位8字节存放在地址的高位。
例:一个32位的整数13579BDFH(转为十进制即324508639),以Little-Endian存放为DFH 9BH 57H13H,以Big-Endian 存放为 13H 57H 9BH DFH。(H下标表示十六进制)
3.3 扇区偏移量
从头中的信息可以计算出一个sector的偏移量(offset),公式为:
sec_pos(SID) = 512 + SID ∙ s_size = 512 + SID ∙ 2 ssz
例:ssz = 10 and SID = 5:
sec_pos(SID) = 512 + SID ∙ 2 ssz = 512 + 5 ∙ 210 = 512 + 5 ∙ 1024 = 5632.