Format binar cu fișier compus - Compound File Binary Format
Formatul binar de fișier compus (CFBF), numit și fișier compus , format document compus sau fișier document compus V2 Document (CDF), este un format de fișier de document compus pentru stocarea a numeroase fișiere și fluxuri într-un singur fișier pe un disc. CFBF este dezvoltat de Microsoft și reprezintă o implementare a Microsoft COM Structed Storage .
Microsoft a deschis formatul pentru a fi utilizat de alții, iar acum este folosit într-o varietate de programe de la Microsoft Word și Microsoft Access la obiecte de afaceri. De asemenea, constituie baza formatului avansat de autorizare .
cuprins
Prezentare generală
Cel mai simplu, formatul binar al fișierului compus este un container, cu restricții reduse asupra a ceea ce poate fi stocat în el.
O structură de fișiere CFBF seamănă mai degrabă cu un sistem de fișiere FAT . Fișierul este partiționat în Sectoare care sunt înlănțuite împreună cu o tabelă de alocare a fișierelor (nu trebuie confundat cu sistemul de fișiere cu același nume) care conține lanțuri de sectoare legate de fiecare fișier, un director conține informații pentru fișierele conținute cu un ID de sector (SID) pentru sectorul de pornire a unui lanț și așa mai departe.
Structura
Fișierul CFBF constă dintr-o înregistrare de antet de 512 octeți, urmată de o serie de sectoare a căror dimensiune este definită în antet. Literatura definește Sectoarele fie 512 sau 4096 octeți în lungime, deși formatul este capabil să sprijine sectoarele cu dimensiuni de la 128 de octeți în sus, cu puteri de 2 (128, 256, 512, 1024, etc.). Limita inferioară de 128 este minimul necesar pentru a se încadra într-o singură intrare de director într-un sector de director.
Există mai multe tipuri de sectoare care pot fi prezente într-o CFBF:
- Sectorul de alocare a fișierelor (FAT) - conține lanțuri de indici de sector la fel cum o face FAT în sistemele de fișiere FAT / FAT32
- Sectoare MiniFAT - asemănătoare cu FAT, dar care păstrează lanțuri de mini-sectoare în cadrul Mini-Stream
- Sectorul FAT dublu-indirect (DIFAT) - conține lanțuri de indici de sector FAT
- Sectorul directorului - conține intrări în director
- Sectorul de flux - conține date de fișier arbitrare
- Range Lock Sector - conține zona de blocare a intervalului de byte a unui fișier mare
Mai multe detalii sunt prezentate mai jos pentru antetul și fiecare tip de sector.
Formatul antetului CFBF
Antetul CFBF ocupă primii 512 octeți ai fișierului și informațiile necesare pentru interpretarea restului fișierului. Declarația de structură în stil C de mai jos (extrasă din Specificația Containerului de nivel scăzut AAFA) arată membrii antetului CFBF și scopul acestora:
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
};
Sectoare tabel alocare fișiere (FAT)
Când sunt luate împreună ca un singur flux, colecția de sectoare FAT definește starea și legătura fiecărui sector din fișier. Fiecare intrare din FAT are o lungime de 4 octeți și conține numărul sectorului următorului sector dintr-un lanț FAT sau una dintre următoarele valori speciale:
- FREESECT (0xFFFFFFFF) - denotă un sector neutilizat
- ENDOFCHAIN (0xFFFFFFFE) - marchează ultimul sector dintr-un lanț FAT
- FATSECT (0xFFFFFFFD) - marchează un sector folosit pentru stocarea unei părți din FAT
- DIFSECT (0xFFFFFFFC) - marchează un sector folosit pentru stocarea unei părți din DIFAT
Sectorul de blocare a intervalului
De blocare Sectorul Range trebuie să existe în fișiere mai mari de 2 GB în dimensiune, și nu trebuie să existe în fișiere mai mici de 2 GB. Sectorul de blocare a intervalului trebuie să conțină intervalul de octeți 0x7FFFFF00 până la 0x7FFFFFFF în fișier. Această zonă este rezervată de implementarea COM a Microsoft pentru stocarea informațiilor de blocare a octeților pentru acces simultan.
Glosar
- FAT - Tabel de alocare fișiere, cunoscut și sub numele de: SAT - Tabel de alocare sectorială
- DIFAT - Tabel de alocare fișier dublu-indirect
- Lanț FAT - un grup de intrări FAT care indică sectoarele alocate unui flux din fișier
- Stream - un fișier virtual care ocupă o serie de sectoare din CFBF
- Sector - unitatea de alocare în cadrul CFBF, de obicei 512 sau 4096 octeți lungime
Vezi si
Referințe
linkuri externe
- „Format de fișier document Microsoft Compound” (PDF) . OpenOffice.org Descrierea CFBF . Preluat 2006-05-22 .
- „Specificație avansată a containerului de format avansat” (PDF) . Specificația Microsoft Structured Storage versiunea 3 (PDF) . Preluat 2006-05-22 .