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獲取字符串內容。

 

 

發佈了28 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章