Binary Format för sammansatt fil - Compound File Binary Format
Compound File Binary Format (CFBF), även kallad Compound File , Compound Document Format eller Composite Document File V2 Document (CDF), är ett sammansatt dokumentfilformat för lagring av många filer och strömmar i en enda fil på en disk. CFBF är utvecklad av Microsoft och är en implementering av Microsoft COM Structured Storage .
Microsoft har öppnat formatet för användning av andra och det används nu i en mängd olika program från Microsoft Word och Microsoft Access till Business Objects. Det utgör också grunden för Advanced Authoring Format .
Innehåll
Översikt
I det enklaste är Compound File Binary Format en behållare, med liten begränsning av vad som kan lagras i det.
En CFBF-filstruktur liknar löst ett FAT- filsystem . Filen är indelad i sektorer som är kedjade tillsammans med en filallokeringstabell (får inte misstas med filsystemet med samma namn) som innehåller kedjor av sektorer som är relaterade till varje fil, en katalog innehåller information för innehöll filer med ett sektor-ID (SID) för startkedjan i en kedja och så vidare.
Strukturera
CFBF-filen består av en 512-Byte header-post följt av ett antal sektorer vars storlek definieras i rubriken. Litteraturen definierar sektorer till att vara antingen 512 eller 4096 byte i längd, även om formatet potentiellt kan stödja sektorer som sträcker sig i storlek från 128-Bytes och uppåt med krafter på 2 (128, 256, 512, 1024, etc.). Den lägre gränsen på 128 är det minsta som krävs för att passa en enda katalogpost i en katalogsektor.
Det finns flera typer av sektorer som kan finnas i en CFBF:
- File Allocation Table (FAT) Sector - innehåller kedjor av sektorindex precis som en FAT gör i FAT / FAT32-filsystemen
- MiniFAT-sektorer - liknar FAT men lagrar kedjor av minisektorer inom Mini-Stream
- Dubbelindirekt FAT (DIFAT) sektor - innehåller kedjor av FAT-sektorindex
- Katalogsektor - innehåller katalogposter
- Stream Sector - innehåller godtyckliga fildata
- Range Lock Sector - innehåller låsområdet för byteområde för en stor fil
Mer information ges nedan för rubriken och varje sektortyp.
CFBF Header-format
CFBF Header upptar de första 512 byte av filen och information som krävs för att tolka resten av filen. C-Style-strukturdeklarationen nedan (extraherad från AAFA: s lågnivåbehållarspecifikation) visar medlemmarna i CFBF-rubriken och deras syfte:
typedef unsigned long ULONG; // 4 Bytes
typedef unsigned short USHORT; // 2 Bytes
typedef short OFFSET; // 2 Bytes
typedef ULONG SECT; // 4 Bytes
typedef ULONG FSINDEX; // 4 Bytes
typedef USHORT FSOFFSET; // 2 Bytes
typedef USHORT WCHAR; // 2 Bytes
typedef ULONG DFSIGNATURE; // 4 Bytes
typedef unsigned char BYTE; // 1 Byte
typedef unsigned short WORD; // 2 Bytes
typedef unsigned long DWORD; // 4 Bytes
typedef ULONG SID; // 4 Bytes
typedef GUID CLSID; // 16 Bytes
struct StructuredStorageHeader { // [offset from start (bytes), length (bytes)]
BYTE _abSig[8]; // [00H,08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1,
// 0x1a, 0xe1} for current version
CLSID _clsid; // [08H,16] reserved must be zero (WriteClassStg/
// GetClassFile uses root directory class id)
USHORT _uMinorVersion; // [18H,02] minor version of the format: 33 is
// written by reference implementation
USHORT _uDllVersion; // [1AH,02] major version of the dll/format: 3 for
// 512-byte sectors, 4 for 4 KB sectors
USHORT _uByteOrder; // [1CH,02] 0xFFFE: indicates Intel byte-ordering
USHORT _uSectorShift; // [1EH,02] size of sectors in power-of-two;
// typically 9 indicating 512-byte sectors
USHORT _uMiniSectorShift; // [20H,02] size of mini-sectors in power-of-two;
// typically 6 indicating 64-byte mini-sectors
USHORT _usReserved; // [22H,02] reserved, must be zero
ULONG _ulReserved1; // [24H,04] reserved, must be zero
FSINDEX _csectDir; // [28H,04] must be zero for 512-byte sectors,
// number of SECTs in directory chain for 4 KB
// sectors
FSINDEX _csectFat; // [2CH,04] number of SECTs in the FAT chain
SECT _sectDirStart; // [30H,04] first SECT in the directory chain
DFSIGNATURE _signature; // [34H,04] signature used for transactions; must
// be zero. The reference implementation
// does not support transactions
ULONG _ulMiniSectorCutoff; // [38H,04] maximum size for a mini stream;
// typically 4096 bytes
SECT _sectMiniFatStart; // [3CH,04] first SECT in the MiniFAT chain
FSINDEX _csectMiniFat; // [40H,04] number of SECTs in the MiniFAT chain
SECT _sectDifStart; // [44H,04] first SECT in the DIFAT chain
FSINDEX _csectDif; // [48H,04] number of SECTs in the DIFAT chain
SECT _sectFat[109]; // [4CH,436] the SECTs of first 109 FAT sectors
};
File Allocation Table (FAT) sektorer
När samlingen av FAT-sektorer sammanförs som en enda ström definierar status och koppling för varje sektor i filen. Varje post i FAT är 4 byte i längd och innehåller sektornumret för nästa sektor i en FAT-kedja eller ett av följande specialvärden:
- FREESECT (0xFFFFFFFF) - anger en oanvänd sektor
- ENDOFCHAIN (0xFFFFFFFE) - markerar den sista sektorn i en FAT-kedja
- FATSECT (0xFFFFFFFD) - markerar en sektor som används för att lagra en del av FAT
- DIFSECT (0xFFFFFFFC) - markerar en sektor som används för att lagra en del av DIFAT
Range Lock Sector
Den Range Lock Sector måste finnas i filer som är större än 2 GB i storlek och får inte finnas i filer som är mindre än 2 GB. Range Lock Sector måste innehålla byteområdet 0x7FFFFF00 till 0x7FFFFFFF i filen. Detta område är reserverat av Microsofts COM-implementering för lagring av låsinformation för byteområde för samtidig åtkomst.
Ordlista
- FAT - File Allocation Table, även känd som: SAT - Sector Allocation Table
- DIFAT - Dubbelindirekt filtilldelningstabell
- FAT Chain - en grupp FAT-poster som anger de sektorer som tilldelats en ström i filen
- Stream - en virtuell fil som upptar ett antal sektorer inom CFBF
- Sektor - tilldelningsenheten inom CFBF, vanligtvis 512 eller 4096 Bytes i längd
Se även
referenser
externa länkar
- "Microsoft Compound Document File Format" (PDF) . OpenOffice.org CFBF-beskrivning . Hämtad 2006-05-22 .
- "Specifikation för avancerad författarformat låg nivå behållare" (PDF) . Specifikation för Microsoft Structured Storage version 3 (PDF) . Hämtad 2006-05-22 .