Content deleted Content added
oops |
No edit summary |
||
(32 intermediate revisions by 24 users not shown) | |||
Line 1:
{{Short description|Compound document file format}}
'''Compound File Binary Format''' (CFBF), also called '''Compound File''', '''Compound Document format''',<ref>{{cite web|url=http://poi.apache.org/poifs/index.html|title=Apache POI – POIFS|publisher=POI Project|accessdate=10 May 2011|archive-url=https://web.archive.org/web/20110426150340/http://poi.apache.org/poifs/index.html|archive-date=26 April 2011|url-status=dead}}</ref> or '''Composite Document File V2'''<ref>{{cite web
|url=https://linuxconfig.org/how-to-convert-documents-between-libreoffice-and-microsoft-office-file-formats-on-linux
|work=|publisher=POI Project|accessdate=10 May 2011|date=}}</ref>, is a [[file format]] for storing numerous files and streams within a single file on a disk. CFBF is developed by [[Microsoft]] and is an implementation of Microsoft [[COM Structured Storage]].<ref>{{cite web▼
|title=How to convert documents between LibreOffice and Microsoft Office file formats on Linux
|accessdate=25 November 2016
|archive-url=https://web.archive.org/web/20190921163547/https://linuxconfig.org/how-to-convert-documents-between-libreoffice-and-microsoft-office-file-formats-on-linux
|archive-date=21 September 2019
|url-status=dead
▲
|url=http://msdn.microsoft.com/en-us/library/aa378938%28VS.85%29.aspx
|title=Compound Files (Windows)
|work=Microsoft Developers Network (MSDN) library – COM SDK|publisher=Microsoft Corporation|accessdate=23 September 2009|date=20 November 2008}}</ref><ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ydd3k45e.aspx|title=Containers: Compound Files|work=Microsoft Developers Network (MSDN) library – Visual Studio 2008 documentation|publisher=Microsoft Corporation|accessdate=23 September 2009}}</ref><ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/cc542545%28VS.85%29.aspx|title=Understand Compound Files|work=Microsoft Developers Network (MSDN) library – ActiveDirectory Rights Management|accessdate=23 September 2009|date=25 June 2009}}</ref> The file format is used for storing storage objects and stream objects in a hierarchical structure within a single file.<ref>{{Cite web |date=2020-01-28 |title=Microsoft Compound File Binary File Format, Version 4 |url=https://www.loc.gov/preservation/digital/formats/fdd/fdd000392.shtml |access-date=2024-06-13 |website=www.loc.gov}}</ref>
Microsoft has opened the format for use by others and it is now used in a variety of programs from [[Microsoft Word]] and [[Microsoft Access]] to Business Objects.{{Citation needed|date=November 2009}} It also forms the basis of the [[Advanced Authoring Format]].<ref>[http://www.aafassociation.org AMW Association (formerly AAF Association)] {{webarchive|url=https://web.archive.org/web/20000815063147/http://www.aafassociation.org/ |date=15 August 2000 }}</ref>
==Overview==
At its simplest, the Compound File Binary Format is a container, with little restriction on what can be stored within it.
A CFBF file structure loosely resembles a [[File Allocation Table|FAT]] [[
==Structure==
The CFBF file consists of a 512-
▲The CFBF file consists of a 512-Byte header record followed by a number of sectors whose size is defined in the header. The literature defines Sectors to be either 512 or 4096 bytes in length, although the format is potentially capable of supporting sectors ranging in size from 128-Bytes upwards in powers of 2 (128, 256, 512, 1024, etc). The lower limit of 128 is the minimum required to fit a single directory entry in
There are several types of sector that may be present in a CFBF file:
* File Allocation Table (FAT) Sector
* MiniFAT Sectors
* Double-Indirect FAT (DIFAT) Sector
* Directory Sector
* Stream Sector
* Range Lock Sector
More detail is given below for the header and each sector type.
===CFBF
The CFBF
<syntaxhighlight lang="c">
typedef USHORT WCHAR; // 2 bytes
typedef unsigned long DWORD; // 4 bytes
typedef ULONG SID; // 4 bytes
typedef GUID CLSID; // 16 bytes
▲ typedef unsigned long ULONG; // 4 Bytes
BYTE _abSig[8]; // [00H,08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1,
▲ typedef unsigned short USHORT; // 2 Bytes
▲ typedef ULONG FSINDEX; // 4 Bytes
USHORT _uMinorVersion; // [18H,02] minor version of the format: 33 is
▲ typedef USHORT FSOFFSET; // 2 Bytes
USHORT _uDllVersion; // [1AH,02] major version of the dll/format: 3 for
▲ typedef ULONG DFSIGNATURE; // 4 Bytes
▲ typedef unsigned char BYTE; // 1 Byte
USHORT _uByteOrder; // [1CH,02] 0xFFFE: indicates Intel byte-ordering
▲ typedef unsigned short WORD; // 2 Bytes
USHORT _uSectorShift; // [1EH,02] size of sectors in power-of-two;
▲ typedef unsigned long DWORD; // 4 Bytes
USHORT _uMiniSectorShift; // [20H,02] size of mini-sectors in power-of-two;
▲ typedef GUID CLSID; // 16 Bytes
USHORT _usReserved; // [22H,02] reserved, must be zero
▲ struct StructuredStorageHeader { // [offset from start (bytes), length (bytes)]
ULONG
FSINDEX
FSINDEX
DFSIGNATURE
ULONG
SECT
▲ // typically 6 indicating 64-byte mini-sectors
SECT
FSINDEX
SECT
▲ // number of SECTs in directory chain for 4 KB
▲ // sectors
▲ SECT _sectDirStart; // [30H,04] first SECT in the directory chain
▲ FSINDEX _csectMiniFat; // [40H,04] number of SECTs in the MiniFAT chain
};
</syntaxhighlight>
===File Allocation Table (FAT)
When taken together as a single stream the collection of FAT sectors define the status and linkage of every sector in the file. Each entry in the FAT is 4 bytes in length and contains the sector number of the next sector in a FAT chain or one of the following special values:
* {{Mono|FREESECT}} ({{Mono|0xFFFFFFFF}})
* {{Mono|ENDOFCHAIN}} ({{Mono|0xFFFFFFFE}})
* {{Mono|FATSECT}} ({{Mono|0xFFFFFFFD}})
* {{Mono|DIFSECT}} ({{Mono|0xFFFFFFFC}})
===Range Lock Sector===
{{Expand section|date=November 2009}}
The '''Range Lock Sector''' must exist in files greater than
===Glossary===
* ''FAT''
* ''DIFAT''
* ''FAT Chain''
* ''Stream''
* ''Sector''
==See also==
* [[COM Structured Storage]]
* [[Advanced Authoring Format
* [[Cabinet (file format)]]
==References==
{{Reflist
==External links==
* {{cite web
| accessdate =
| url = https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b
| title = [MS-CFB]: Compound File Binary File Format
| publisher = Microsoft
}}
* {{cite web
| accessdate = 22 May 2006
| url = http://sc.openoffice.org/compdocfileformat.pdf
| title = Microsoft Compound Document File Format
Line 118 ⟶ 128:
}}
* {{cite web
| accessdate =
▲ | url = http://www.aafassociation.org/downloads/specifications/aafcontainerspec-v1.0.1.pdf
| title = Advanced Authoring Format Low-Level Container Specification
| work = Microsoft Structured Storage version 3 specification (PDF)
| archive-url = https://web.archive.org/web/20110809045600/http://www.amwa.tv/downloads/specifications/aafcontainerspec-v1.0.1.pdf
| archive-date = 9 August 2011
| url-status = dead
}}
* {{cite web
| accessdate = 6 July 2019
| url = https://www.loc.gov/preservation/digital/formats/fdd/fdd000380.shtml
| title = Microsoft Compound File Binary File Format, Version 3
| publisher = Library of Congress, Digital Formats web site
}}
▲{{Use dmy dates|date=January 2011}}
[[Category:Computer file formats]]
[[Category:
|