Binary Format for sammensatt fil - Compound File Binary Format

Compound File Binary Format (CFBF), også kalt Compound File , Compound Document format , eller Composite Document File V2 Document (CDF), er et sammensatt dokumentfilformat for lagring av mange filer og strømmer i en enkelt fil på en disk. CFBF er utviklet av Microsoft og er en implementering av Microsoft COM Structured Storage .

Microsoft har åpnet formatet for bruk av andre, og det brukes nå i en rekke programmer fra Microsoft Word og Microsoft Access til Business Objects. Det danner også grunnlaget for Advanced Authoring Format .

Oversikt

På det enkleste er Compound File Binary Format en beholder, med liten begrensning på hva som kan lagres i det.

En CFBF-filstruktur ligner løst et FAT- filsystem . Filen er delt inn i sektorer som er lenket sammen med en filtildelingstabell (ikke å ta feil av filsystemet med samme navn) som inneholder kjeder med sektorer relatert til hver fil. En katalog inneholder informasjon om inneholdte filer med en sektor-ID (SID) for startsektoren i en kjede og så videre.

Struktur

CFBF-filen består av en 512-byte header-post fulgt av et antall sektorer hvis størrelse er definert i overskriften. Litteraturen definerer sektorer til å være enten 512 eller 4096 byte i lengde, selv om formatet potensielt er i stand til å støtte sektorer i størrelse fra 128-byte og oppover med krefter på 2 (128, 256, 512, 1024, etc.) Den nedre grensen på 128 er minimum som kreves for å passe til en enkelt katalogoppføring i en katalogsektor.

Det er flere typer sektorer som kan være til stede i en CFBF:

  • File Allocation Table (FAT) sektor - inneholder kjeder med sektorindekser omtrent som en FAT gjør i FAT / FAT32-filsystemene
  • MiniFAT-sektorer - ligner på FAT, men lagrer kjeder med minisektorer i Mini-Stream
  • Dobbel-indirekte FAT (DIFAT) sektor - inneholder kjeder med FAT-sektorindekser
  • Katalogsektor - inneholder katalogoppføringer
  • Stream Sector - inneholder vilkårlige fildata
  • Range Lock Sector - inneholder låsområdet til byteområdet i en stor fil

Mer detalj er gitt nedenfor for overskriften og hver sektortype.

CFBF Header-format

CFBF-overskriften opptar de første 512 byte av filen og informasjonen som kreves for å tolke resten av filen. C-Style-strukturdeklarasjonen nedenfor (hentet fra AAFAs Low-Level Container Specification) viser medlemmene av CFBF-overskriften og deres formål:

 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
 };

FAT-sektorer (File Allocation Table)

Når samlingen av FAT-sektorer er samlet som en enkelt strøm, definerer status og kobling for hver sektor i filen. Hver oppføring i FAT er fire byte i lengde og inneholder sektornummer for den neste sektoren i en FAT-kjede eller en av følgende spesialverdier:

  • FREESECT (0xFFFFFFFF) - angir en ubrukt sektor
  • ENDOFCHAIN ​​(0xFFFFFFFE) - markerer den siste sektoren i en FAT-kjede
  • FATSECT (0xFFFFFFFD) - markerer en sektor som brukes til å lagre deler av FAT
  • DIFSECT (0xFFFFFFFC) - markerer en sektor som brukes til å lagre deler av DIFAT

Range Lock Sector

The Range Lock Sector må eksistere i filer større enn 2 GB i størrelse, og må ikke eksisterer i filer som er mindre enn 2 GB. Range Lock Sector må inneholde byteområdet 0x7FFFFF00 til 0x7FFFFFFF i filen. Dette området er reservert av Microsofts COM-implementering for lagring av låsinformasjon om byteområde for samtidig tilgang.

Ordliste

  • FAT - File Allocation Table, også kjent som: SAT - Sector Allocation Table
  • DIFAT - Dobbelt-indirekte filtildelingstabell
  • FAT Chain - en gruppe FAT-oppføringer som indikerer sektorene som er tildelt en Stream i filen
  • Stream - en virtuell fil som okkuperer en rekke sektorer i CFBF
  • Sektor - tildelingsenheten i CFBF, vanligvis 512 eller 4096 Bytes i lengde

Se også

referanser

Eksterne linker