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
![]() | Tato sekce potřebuje expanzi. Můžete pomoci přidávat k tomu. (Listopad 2009) |
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
- ^ „Apache POI - POIFS“. Projekt POI. Archivovány od originál dne 26. dubna 2011. Citováno 10. května 2011.
- ^ „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.
- ^ "Složené soubory (Windows)". Knihovna Microsoft Developers Network (MSDN) - COM SDK. Společnost Microsoft. 20. listopadu 2008. Citováno 23. září 2009.
- ^ „Kontejnery: složené soubory“. Knihovna Microsoft Developers Network (MSDN) - dokumentace k Visual Studio 2008. společnost Microsoft. Citováno 23. září 2009.
- ^ „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.
- ^ Asociace AMW (dříve AAF Association) Archivováno 15. srpna 2000 v Wayback Machine
externí odkazy
- "[MS-CFB]: Formát binárního souboru složeného souboru". Microsoft. Citováno 6. července 2019.
- „Formát složeného dokumentu Microsoftu“ (PDF). Popis CFBF OpenOffice.org. Citováno 22. května 2006.
- „Advanced Authoring Format Low-Level Container Specification“ (PDF). Specifikace Microsoft Structured Storage verze 3 (PDF). Archivovány od originál (PDF) dne 9. srpna 2011. Citováno 22. května 2006.
- „Microsoft Compound File Binary File Format, verze 3“. Library of Congress, Digital Formats web site. Citováno 6. července 2019.