Összetett fájl bináris formátuma - Compound File Binary Format

Az Összetett fájl bináris formátuma (CFBF), más néven Összetett fájl , Összetett dokumentum formátum vagy Összetett dokumentum fájl V2 dokumentum (CDF) egy összetett dokumentum fájl formátum számos fájl és adatfolyam tárolására egyetlen fájlon belül a lemezen. A CFBF-et a Microsoft fejlesztette ki, és a Microsoft COM strukturált tárolójának megvalósítása .

A Microsoft megnyitotta a formátumot mások számára, és mostantól számos programban használják, a Microsoft Word-től és a Microsoft Access- től az üzleti objektumokig. Ez képezi az Advanced Authoring Format alapját is .

Áttekintés

A legegyszerűbb, hogy az Összetett fájl bináris formátuma egy tároló, kevés korlátozással a benne tárolható elemekre.

A CFBF fájlszerkezet lazán hasonlít a FAT fájlrendszerre . A fájlt ágazatokra osszák fel, amelyeket egy fájl-elosztási táblával (nem tévesztendő össze az azonos nevű fájlrendszerrel) együtt láncolva, amely az egyes fájlokhoz kapcsolódó szektorok láncait tartalmazza, egy könyvtár információkat tartalmaz a szektor azonosítóval rendelkező fájlokról (SID) a lánc kezdő szektorához és így tovább.

Szerkezet

A CFBF fájl egy 512 bájtos fejlécrekordból áll, amelyet számos olyan szektor követ, amelyek méretét a fejléc meghatározza. Az irodalom meghatározza, hogy az ágazatok akár 512, akár 4096 bájt hosszúak lehetnek, bár a formátum potenciálisan képes támogatni az 128 bájtot felfelé mutató ágazatokat 2-es teljesítményben (128, 256, 512, 1024 stb.). A 128 alsó határ a minimum, amely ahhoz szükséges, hogy egyetlen címjegyzékbejegyzés szerepeljen a címtárszektorban.

Többféle ágazat létezik a CFBF-ben:

  • File Allocation Table (FAT) szektor - tartalmazza az ágazati indexek láncolatait, ugyanúgy, mint a FAT a FAT / FAT32 fájlrendszerekben.
  • MiniFAT szektorok - hasonlóak a FAT-hez, de a mini-szektorok láncát tárolják a Mini-Streamben
  • Kettős-közvetett FAT (DIFAT) szektor - a FAT szektor indexek láncolatait tartalmazza
  • Directory Sector - könyvtári bejegyzéseket tartalmaz
  • Patak szektor - tetszőleges fájl adatokat tartalmaz
  • Range Lock Sector - egy nagy fájl byte-tartományú zárolási területét tartalmazza

Az alábbiakban részletezzük a fejlécet és az egyes szektor típusokat.

CFBF fejléc formátum

A CFBF fejléc elfoglalja a fájl első 512 bájtját és a fájl többi részének értelmezéséhez szükséges információkat. Az alábbi C-Style szerkezeti nyilatkozat (az AAFA alacsony szintű konténer specifikációjából származik) megmutatja a CFBF fejléc tagjait és céljaikat:

 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
 };

File Allocation Table (FAT) szektorok

Egységes adatfolyamként véve a FAT szektorok gyűjteménye meghatározza a fájlban szereplő minden szektor állapotát és kapcsolódását. A FAT minden bejegyzésének 4 bájtja van, és tartalmazza a FAT-lánc következő szektorának szektorszámát vagy a következő speciális értékek egyikét:

  • FREESECT (0xFFFFFFFF) - fel nem használt szektorot jelöl
  • ENDOFCHAIN ​​(0xFFFFFFFE) - jelzi a FAT lánc utolsó szektort
  • FATSECT (0xFFFFFFFD) - egy szektort jelöl, amelyet a FAT egy részének tárolására használnak
  • DIFSECT (0xFFFFFFFC) - egy szektort jelöl a DIFAT egy részének tárolására

Range Lock szektor

A Range Lock szektornak 2 GB-nál nagyobb fájlokban léteznie kell, és nem létezhet 2 GB-nál kisebb fájlokban. A Range Lock szektornak tartalmaznia kell a fájlban a 0x7FFFFF00 - 0x7FFFFFFF bájttartományt. Ezt a területet a Microsoft COM implementációja fenntartja bájttartományú zárolási információk egyidejű hozzáférés tárolására.

Szójegyzék

  • FAT - File Allokációs Táblázat, más néven: SAT - Szektor Allokációs Táblázat
  • DIFAT - Kettős-közvetett fájl allokációs táblázat
  • FAT lánc - FAT bejegyzések csoportja, amelyek jelzik a fájlban lévő adatfolyamhoz hozzárendelt szektorokat
  • Patak - virtuális fájl, amely számos ágazatot foglal el a CFBF-en belül
  • Szektor - az elosztási egység a CFBF-en belül, általában 512 vagy 4096 bájt hosszú

Lásd még

Irodalom

Külső linkek