Binární formát složeného souboru - Compound File Binary Format

Binární formát složeného souboru (CFBF), také nazývaný Složený soubor, Formát složeného dokumentu,[1] nebo Soubor složeného dokumentu V2[2] (CDF), je a sloučenina formát souboru dokumentu pro ukládání mnoha souborů a streamů do jednoho souboru na disku. CFBF je vyvíjen Microsoft a je implementací Microsoftu Strukturované úložiště COM.[3][4][5]

Microsoft otevřel formát pro použití ostatními a nyní se používá v řadě programů od Microsoft Word a Microsoft Access k obchodním objektům.[Citace je zapotřebí ] Tvoří také základ Pokročilý formát pro vytváření.[6]

Přehled

V nejjednodušším případě je binární formát složeného souboru kontejner, s malým omezením toho, co v něm lze uložit.

Struktura souboru CFBF volně připomíná a TLUSTÝ souborový systém. Soubor je rozdělen na oddíly Odvětví které jsou zřetězeny společně s Tabulka alokace souborů (nezaměňovat se souborovým systémem se stejným názvem), který obsahuje řetězce sektorů souvisejících s každým souborem, a Adresář uchovává informace o obsažených souborech s ID sektoru (SID) pro počáteční sektor řetězce atd.

Struktura

Soubor CFBF se skládá ze záznamu záhlaví 512 bajtů, za nímž následuje řada sektorů, jejichž velikost je definována v záhlaví. Literatura definuje sektory na délku buď 512 nebo 4096 bajtů, ačkoli formát je potenciálně schopen podporovat sektory o velikosti od 128 bajtů výše v mocnostech 2 (128, 256, 512, 1024 atd.). Dolní limit 128 je minimum potřebné k uložení jedné položky adresáře do adresářového sektoru.[relevantní? ]

V CFBF může být přítomno několik typů sektoru:

  • Sektor File Allocation Table (FAT) - obsahuje řetězce sektorových indexů podobně jako FAT v souborových systémech FAT / FAT32
  • MiniFAT sektory - podobné jako FAT, ale ukládající řetězce mini-sektorů v Mini-Stream
  • Sektor Double-Indirect FAT (DIFAT) - obsahuje řetězce indexů sektoru FAT
  • Sektor adresáře - obsahuje položky adresáře
  • Stream Sector - obsahuje data libovolného souboru
  • Range Lock Sector - obsahuje oblast uzamčení rozsahu bajtů velkého souboru

Další podrobnosti jsou uvedeny níže pro záhlaví a každý typ sektoru.

Formát záhlaví CFBF

Záhlaví CFBF zabírá prvních 512 bajtů souboru a informace potřebné k interpretaci zbytku souboru. Níže uvedená deklarace struktury C-Style (extrahovaná ze specifikace AAFA Low-Level Container) ukazuje členy záhlaví CFBF a jejich účel:

 typedef nepodepsaný dlouho DLOUHÉ;    // 4 byty typedef nepodepsaný krátký USHORT;  // 2 bajty typedef krátký OFFSET;           // 2 bajty typedef DLOUHÉ SEKTA;             // 4 byty typedef DLOUHÉ FSINDEX;          // 4 byty typedef USHORT FSOFFSET;        // 2 bajty typedef USHORT WCHAR;           // 2 bajty typedef DLOUHÉ DFSIGNATURA;      // 4 byty typedef nepodepsaný char BYTE;     // 1 bajt typedef nepodepsaný krátký SLOVO;    // 2 bajty typedef nepodepsaný dlouho DWORD;    // 4 byty typedef DLOUHÉ SID;              // 4 byty typedef GUID CLSID;             // 16 bajtů struktur StructuredStorageHeader { // [posun od začátku (bajty), délka (bajty)]     BYTE _abSig[8];             // [00H, 08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1,                                 // 0x1a, 0xe1} pro aktuální verzi     CLSID _clsid;               // [08H, 16] rezervováno musí být nula (WriteClassStg /                                 // GetClassFile používá ID třídy kořenového adresáře)     USHORT _uMinorVersion;      // [18H, 02] vedlejší verze formátu: 33 je                                 // napsáno referenční implementací     USHORT _uDllVersion;        // [1AH, 02] hlavní verze dll / format: 3 pro                                 // 512bajtové sektory, 4 pro 4 KB sektory     USHORT _uByteOrder;         // [1CH, 02] 0xFFFE: označuje pořadí bajtů Intel     USHORT _uSectorShift;       // [1EH, 02] velikost sektorů v mocnině dvou;                                 // obvykle 9 označující 512 bajtové sektory     USHORT _uMiniSectorShift;   // [20H, 02] velikost mini-sektorů v moci dvou;                                 // obvykle 6 označující 64bajtové mini-sektory     USHORT _usRezervováno;         // [22H, 02] rezervováno, musí být nula     DLOUHÉ _ulReserved1;         // [24H, 04] rezervováno, musí být nula     FSINDEX _csectDir;          // [28H, 04] musí být nula pro 512 bajtové sektory,                                 // počet SECT v řetězci adresářů pro 4 KB                                 // sektory     FSINDEX _csectFat;          // [2CH, 04] počet sekcí v řetězci FAT     SEKTA _sectDirStart;         // [30H, 04] první SECT v řetězci adresářů     DFSIGNATURA _podpis;     // [34H, 04] podpis použitý pro transakce; musí                                 // být nula. Referenční implementace                                 // nepodporuje transakce     DLOUHÉ _ulMiniSectorCutoff;  // [38H, 04] maximální velikost pro mini stream;                                 // obvykle 4096 bajtů     SEKTA _sectMiniFatStart;     // [3CH, 04] první SECT v řetězci MiniFAT     FSINDEX _csectMiniFat;      // [40H, 04] počet SECT v řetězci MiniFAT     SEKTA _sectDifStart;         // [44H, 04] první SECT v řetězci DIFAT     FSINDEX _csectDif;          // [48H, 04] počet SEKTŮ v řetězci DIFAT     SEKTA _sectFat[109];         // [4CH, 436] SEKTY prvních 109 sektorů FAT };

Sektory tabulky alokace souborů (FAT)

Když se to vezme dohromady jako jeden proud, kolekce sektorů FAT definuje stav a propojení každého sektoru v souboru. Každá položka v souboru FAT má délku 4 bajty a obsahuje číslo sektoru dalšího sektoru v řetězci FAT nebo jednu z následujících speciálních hodnot:

  • FREESECT (0xFFFFFFFF) - označuje nevyužitý sektor
  • ENDOFCHAIN ​​(0xFFFFFFFE) - označí poslední sektor v řetězci FAT
  • FATSECT (0xFFFFFFFD) - označí sektor používaný k uložení části FAT
  • DIFSECT (0xFFFFFFFC) - označí sektor používaný k uložení části DIFAT

Sektor zámku rozsahu

The Sektor zámku rozsahu musí existovat v souborech větších než 2 GB a nesmí existovat v souborech menších než 2 GB. Sektor zámku rozsahu musí v souboru obsahovat rozsah bajtů 0x7FFFFF00 až 0x7FFFFFFF. Tato oblast je vyhrazena implementací COM společnosti Microsoft pro ukládání informací o uzamčení rozsahu bajtů pro souběžný přístup.

Glosář

  • TLUSTÝ - Tabulka přidělení souborů, známá také jako: SAT - Sektorová alokační tabulka
  • DIFAT - Tabulka nepřímého přidělení souborů
  • Řetěz FAT - skupina FAT záznamů, které označují sektory přidělené Stream v souboru
  • Proud - virtuální soubor, který zabírá řadu sektorů v rámci CFBF
  • Sektor - jednotka alokace v rámci CFBF, obvykle 512 nebo 4096 bajtů na délku

Viz také

Reference

  1. ^ „Apache POI - POIFS“. Projekt POI. Archivovány od originál dne 26. dubna 2011. Citováno 10. května 2011.
  2. ^ „Jak převádět dokumenty mezi formáty souborů LibreOffice a Microsoft Office v systému Linux“. Archivovány od originál dne 21. září 2019. Citováno 25. listopadu 2016.
  3. ^ "Složené soubory (Windows)". Knihovna Microsoft Developers Network (MSDN) - COM SDK. Společnost Microsoft. 20. listopadu 2008. Citováno 23. září 2009.
  4. ^ „Kontejnery: složené soubory“. Knihovna Microsoft Developers Network (MSDN) - dokumentace k Visual Studio 2008. společnost Microsoft. Citováno 23. září 2009.
  5. ^ „Porozumět složeným souborům“. Knihovna Microsoft Developers Network (MSDN) - správa práv ActiveDirectory. 25. června 2009. Citováno 23. září 2009.
  6. ^ Asociace AMW (dříve AAF Association) Archivováno 15. srpna 2000 v Wayback Machine

externí odkazy