(转)DocFile 研究小记

from:http://hi.baidu.com/umu618/blog/item/91b4a27723d7b818b151b966.html

  “微软复合文档二进制结构(Compound File Binary Format)”是一种结构化的存储格式,它在一个文件里模拟磁盘存储格式,使得文件内部变得像一个磁盘,用来存放结构化信息。微软没有公开具体格式,却 大量地使用,最常见的是 Offfice 的文件格式。符合微软复合文档二进制结构规范的对象叫 Storage 对象,Compound File 是一种 Storage 对象,DocFile 是一种 Compound File。虽然没公开具体规范,但幸好微软提供了访问这种格式的 API 和工具 DocFile Viewer,API 例如:

StgIsStorageFile - 判断一个文件是不是 Storage 对象。

StgOpenStorageEx - 打开 Storage 对象

IStorage::EnumSTATSTG
IStorage::OpenStorage
IStorage::OpenStream
IStorage::EnumElements

IStream::Stat
IStream::Seek
IStream::Read

  更多具体编程信息请见《Structured Storage - The DocFile》、《Office 2007 .bin file format》。

  QQ 的消息保存在 MsgEx.db,其格式正是 DocFile,还有 XP 系统的图片缩略图缓存文件 Thumbs.db 也是 DocFile 格式。如下图:

  由于 MS Office 格式的流行,其他系统如 Linux 之类,想开发出可以访问 MS Office 文件的软件,对 DocFile 格式做了很多研究,由于研究出来的不是微软官方文档,所以取名“劳拉(LAOLA)格式”。具体请看《"劳拉"-神秘的微软办公软件文件格式》(URL 已经失效,请搜索一下这个标题吧)。

  DocFile 的文件头很有意思,十六进制是 D0 CF 11 E0 A1 B1 1A E1,注意看开头的“D0 CF 11 E0”,是不是和“DocFile”很像?

  DocFile Viewer 3.5 下载:http://umu.ys168.com/,Tools - VS - DFVIEW.7z (8KB)


posted @ 2011-03-17 14:14  MayFirst  阅读(1270)  评论(0编辑  收藏  举报