Binarny format pliku złożonego
Format binarny pliku złożonego (CFBF), zwany także plikiem złożonym , formatem dokumentu złożonego lub plikiem dokumentu złożonego V2 (CDF), to złożony format pliku dokumentu do przechowywania wielu plików i strumieni w jednym pliku na dysku. CFBF jest rozwijany przez Microsoft i jest implementacją Microsoft COM Structured Storage .
Firma Microsoft udostępniła format do użytku przez innych i jest on obecnie używany w różnych programach, od Microsoft Word i Microsoft Access po Business Objects. [ Potrzebne źródło ] Stanowi również podstawę Advanced Authoring Format .
Przegląd
Mówiąc najprościej, Compound File Binary Format to kontener z niewielkimi ograniczeniami co do tego, co można w nim przechowywać.
Struktura plików CFBF luźno przypomina system plików FAT . Plik jest podzielony na sektory , które są połączone łańcuchowo z tabelą alokacji plików (nie mylić z systemem plików o tej samej nazwie), która zawiera łańcuchy sektorów powiązanych z każdym plikiem, katalog przechowuje informacje o zawartych plikach z identyfikatorem sektora (SID) dla początkowego sektora łańcucha i tak dalej.
Struktura
Plik CFBF składa się z 512-bajtowego rekordu nagłówka, po którym następuje liczba sektorów, których rozmiar jest zdefiniowany w nagłówku. W literaturze definiuje się, że sektory mają długość 512 lub 4096 bajtów, chociaż format ten może potencjalnie obsługiwać sektory o rozmiarze od 128 bajtów wzwyż w potęgach 2 (128, 256, 512, 1024 itd.). Dolny limit wynoszący 128 to minimum wymagane do zmieszczenia pojedynczego wpisu w katalogu w sektorze katalogu. [ istotne? ]
Istnieje kilka typów sektorów, które mogą występować w CFBF:
- Sektor tabeli alokacji plików (FAT) – zawiera łańcuchy indeksów sektorów, podobnie jak FAT w systemach plików FAT/FAT32
- Sektory MiniFAT - podobne do FAT, ale przechowujące łańcuchy mini-sektorów w Mini-Stream
- Sektor Double-Indirect FAT (DIFAT) – zawiera łańcuchy indeksów sektorów FAT
- Sektor katalogu – zawiera wpisy katalogu
- Sektor strumienia – zawiera dowolne dane pliku
- Range Lock Sector – zawiera obszar blokowania zakresu bajtów dużego pliku
Poniżej podano więcej szczegółów dotyczących nagłówka i każdego typu sektora.
Format nagłówka CFBF
Nagłówek CFBF zajmuje pierwsze 512 bajtów pliku i informacje wymagane do interpretacji pozostałej części pliku. Poniższa deklaracja struktury C-Style (wyciągnięta ze specyfikacji kontenera niskiego poziomu AAFA) pokazuje elementy nagłówka CFBF i ich przeznaczenie:
typedef długi bez znaku ULONG ; // 4 bajty typedef unsigned short USHORT ; // 2 bajty typedef short OFFSET ; // 2 bajty typedef ULONG SECT ; // 4 bajty typedef ULONG FSINDEX ; // 4 bajty typedef USHORT FSOFFSET ; // 2 bajty typedef USHORT WCHAR ; // 2 bajty typedef ULONG DFSIGNATURE ; // 4 bajty typedef unsigned char BYTE ; // 1 Byte typedef unsigned short WORD ; // 2 bajty typedef unsigned long DWORD ; // 4 bajty typedef ULONG SID ; // 4 bajty typedef GUID CLSID ; // 16 bajtów struct StructuredStorageHeader { // [przesunięcie od początku (bajty), długość (bajty)] BYTE _abSig [ 8 ]; // [00H,08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, // 0x1a, 0xe1} dla bieżącej wersji CLSID _clsid ; // [08H,16] zarezerwowane musi mieć wartość zero (WriteClassStg/ // GetClassFile używa identyfikatora klasy katalogu głównego) USHORT _uMinorVersion ; // [18H,02] podrzędna wersja formatu: 33 jest // zapisywana przez implementację referencyjną USHORT _uDllVersion ; // [1AH,02] główna wersja biblioteki dll/format: 3 dla // sektorów 512-bajtowych, 4 dla sektorów 4 KB USHORT _uByteOrder ; // [1CH,02] 0xFFFE: wskazuje kolejność bajtów w Intelu USHORT _uSectorShift ; // [1EH,02] rozmiar sektorów w potędze dwójki; // zwykle 9 oznacza sektory 512-bajtowe USHORT _uMiniSectorShift ; // [20H,02] wielkość minisektorów w potędze dwójki; // zazwyczaj 6 wskazuje 64-bajtowe mini-sektory USHORT _usReserved ; // [22H,02] zarezerwowane, musi wynosić zero ULONG _ulReserved1 ; // [24H,04] zarezerwowane, musi wynosić zero FSINDEX _csectDir ; // [28H,04] musi wynosić zero dla sektorów 512-bajtowych, // liczba SECT w łańcuchu katalogów dla 4 KB // sektorów FSINDEX _csectFat ; // [2CH,04] liczba SECT w łańcuchu FAT SECT _sectDirStart ; // [30H,04] pierwszy SECT w łańcuchu katalogów DFSIGNATURE _signature ; // [34H,04] podpis używany do transakcji; musi // być zerem. Implementacja referencyjna // nie obsługuje transakcji ULONG _ulMiniSectorCutoff ; // [38H,04] maksymalny rozmiar ministrumienia; // typowo 4096 bajtów SECT _sectMiniFatStart ; // [3CH,04] pierwszy SECT w łańcuchu MiniFAT FSINDEX _csectMiniFat ; // [40H,04] liczba SECT w łańcuchu MiniFAT SECT _sectDifStart ; // [44H,04] pierwszy SECT w łańcuchu DIFAT FSINDEX _csectDif ; // [48H,04] liczba SECT w łańcuchu DIFAT SECT _sectFat [ 109 ]; // [4CH,436] sekcje SECT pierwszych 109 sektorów FAT };
Sektory tabeli alokacji plików (FAT).
Wzięty razem jako pojedynczy strumień zbiór sektorów FAT określa status i powiązania każdego sektora w pliku. Każdy wpis w FAT ma długość 4 bajtów i zawiera numer sektora następnego sektora w łańcuchu FAT lub jedną z następujących wartości specjalnych:
- FREESECT (0xFFFFFFFF) – oznacza nieużywany sektor
- ENDOFCHAIN (0xFFFFFFFE) – oznacza ostatni sektor w łańcuchu FAT
- FATSECT (0xFFFFFFFD) – oznacza sektor służący do przechowywania części FAT
- DIFSECT (0xFFFFFFFC) – oznacza sektor używany do przechowywania części DIFAT
Sektor blokady zasięgu
Sektor Range Lock musi istnieć w plikach o rozmiarze większym niż 2 GB i nie może istnieć w plikach mniejszych niż 2 GB. Sektor blokady zakresu musi zawierać w pliku zakres bajtów od 0x7FFFFF00 do 0x7FFFFFFF. Ten obszar jest zarezerwowany przez implementację COM firmy Microsoft do przechowywania informacji o blokowaniu zakresu bajtów dla równoczesnego dostępu.
Słowniczek
- FAT – File Allocation Table, znana również jako: SAT – Sector Allocation Table
- DIFAT – tablica alokacji plików podwójnie pośrednich
- Łańcuch FAT – grupa wpisów FAT, które wskazują sektory przydzielone do Strumienia w pliku
- Strumień – wirtualny plik, który zajmuje kilka sektorów w CFBF
- Sektor – jednostka alokacji w ramach CFBF, zwykle o długości 512 lub 4096 bajtów
Zobacz też
Linki zewnętrzne
- „[MS-CFB]: Binarny format pliku złożonego” . Microsoftu . Źródło 6 lipca 2019 r .
- „Microsoft Compound Document File Format” (PDF) . Opis OpenOffice.org CFBF . Źródło 22 maja 2006 .
- „Specyfikacja kontenera niskiego poziomu zaawansowanego formatu autorskiego” (PDF) . Specyfikacja Microsoft Structured Storage wersja 3 (PDF) . Zarchiwizowane od oryginału (PDF) w dniu 9 sierpnia 2011 r . Źródło 22 maja 2006 .
- „Format pliku binarnego pliku złożonego firmy Microsoft, wersja 3” . Biblioteka Kongresu, witryna internetowa Digital Formats . Źródło 6 lipca 2019 r .