|
昨晚写的。有些命名纯粹是YY。大家可以改成自己喜欢的。使用前把文档设成磁盘模式。
- template "Microsoft复合文档头模板"
- description "Microsoft复合文档头模板 by yaoaijia"
- applies_to disk //使用前先把文档设成磁盘
- sector-aligned
- requires 0x00 "D0 CF 11 E0 A1 B1 1A E1" //检查文档标识
- begin
- section "我们约定:逻辑扇区=文档扇区+1" //复合文档中的扇区不包括文档头(逻辑扇区0),而是从逻辑扇区1开始。
- section "@文档头参数"
- hex 8 "复合文档标识(D0CF11E0A1B11AE1)"
- hex 16 "文件唯一标识(可全0)"
- hex 2 "格式修订号(3E00)"
- hex 2 "格式版本号(0300)"
- hex 2 "字节顺序号(FEFF:高位前低位后)"
- uint16 "标准扇区字节数幂(一般为9)"
- uint16 "短流扇区字节数幂(一般为6)"
- read-only hex 10 "未使用"
- uint32 "SAT所占扇区数(=MSAT表项总数)" //MSAT中每四字节一项(文档扇区),指向某SAT扇区,
- uint32 "目录流起始文档扇区"
- read-only hex 4 "未使用"
- uint32 "标准流最小字节数(4096)"
- int32 "SSAT起始文档扇区(-2:不存在)"
- uint32 "SSAT所占扇区数"
- int32 "额外MSAT起始文档扇区(-2:不存在)" //因为文档头中内含一部分MSAT项,所以此处取名"额外",纯粹为了好记
- uint32 "额外MSAT所占扇区数"
- endsection
- section "@文档头内含MSAT表项"
- {
- int32 "SAT #~ 所在文档扇区"
- IfEqual "SAT #~ 所在文档扇区" -1
- ExitLoop
- EndIf
- IfEqual "SAT所占扇区数(=MSAT表项总数)" (~+1)
- ExitLoop
- EndIf
- }[109] //头最多含109个MSAT项
- end
复制代码 |
|