SummaryInformation流

这篇分析SummaryInformation流,该流为可选流,保存文档的摘要信息。该流的位置同样通过目录定位,其名字为0005SummaryInformation0005为16进制数),定位方法见复合文档格式的分析(http://blog.csdn.net/shadow20080578/article/details/50245309)。

该流包含一个或多个属性组,每个属性组包含一个或多个属性。

1.开始为流的全局信息:

00H-01H为字节顺序,要求为0xFFFE

02H-03H属性集版本。

04H为一字节的操作系统主版本号。

05H为一字节的操作系统次版本号。

06H-07H为操作系统类型,固定为0x0002.

08H-17H为10字节的CLSID,未设置时为默认的全0x00

018H-01BH的4字节UInt32,是存储属性组的个数。

01CH开始的每20字节,是每个属性组的标志和偏移

前16字节为FMTID,FMTID_SummaryInformation 是0xE0 0x85 0x9F 0xF2 0xF9 0x4F 0x68 0x10 0xAB 0x91 0x08 0x00 0x2B 0x27 0xB3 0xD9

后4字节UInt32,则是该属性组相对于流起始的偏移。

2.利用偏移可以在流中定位到属性组,对于每个属性组,其结构如下:

000H-003H的4字节UInt32,是属性组大小。

004H-007H的4字节UInt32,是属性组中属性的个数。

008H开始的每8字节,是属性的信息:

对于前4字节UInt32,是属性编号,表示属性的种类。

Unknown = 0x00

CodePage = 0x01

Title = 0x02;文档标题

Subject = 0x03

Author = 0x04;文档作者

Keyword = 0x05;文档关键字

Commenct = 0x06;文档注释

Template = 0x07

LastAuthor = 0x08

Reversion = 0x09

EditTime = 0x0A

LastPrintTime = 0x0B

CreateDateTime = 0x0C

LastSaveDateTime = 0x0D

PageCount = 0x0E

WordCount = 0x0F

CharCount = 0x10

Thunbnail = 0x11

ApplicationName = 0x12

Security = 0x13

对于后4字节UInt32,是属性内容相对于属性组的偏移。

3.利用属性信息可以定位到属性组中的每个属性,对于每个属性,其结构如下:

000H-003H的4字节UInt32,是属性内容的类型:

类型为0x02时为UInt16

类型为0x03时为UInt32

类型为0x0B时为Boolean

 类型为0x1E时为String

剩余的字节为属性的内容, 除了类型是String时为不定长,其余三种均为4位字节(多余字节置0)。类型是String时前4字节是字符串的长度(包括“\0”),所以没法使用BinaryReader的ReadString读取。之后长度为字符串内容,字符串是使用单字节编码进行存储的,可以使用Encoding中的GetString获取字符串内容。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值