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