Composto arquivo formato binário - Compound File Binary Format

Composto Formato de arquivo binário (CFBF), também chamado de composto de arquivo , formato de documento composto , ou Composite Document File V2 Document (CDF), é um composto formato de arquivo de documento para armazenar vários arquivos e córregos dentro de um único arquivo em um disco. CFBF é desenvolvido pela Microsoft e é uma implementação do Microsoft COM armazenamento estruturado .

Microsoft abriu o formato para uso por outras pessoas e agora é usado em uma variedade de programas de Microsoft Word e Microsoft Access para Business Objects. Também forma a base da Advanced Format Authoring .

visão global

Na sua forma mais simples, o Composto de arquivo binário Format é um recipiente, com pouca restrição sobre o que pode ser armazenado dentro dele.

A estrutura do arquivo CFBF vagamente se assemelha a um FAT sistema de arquivos . O arquivo é dividido em setores que são encadeados com um File Allocation Table (para não ser confundido com o sistema de mesmo nome do arquivo) que contém cadeias de setores relacionados com cada arquivo, um diretório contém informações para arquivos contidos com um ID Sector (SID) para o sector inicial de uma cadeia e assim por diante.

Estrutura

O arquivo CFBF consiste em um registro de cabeçalho de 512 bytes seguido por uma série de setores cujo tamanho é definido no cabeçalho. A literatura define Sectores para ser de 512 ou 4096 bytes de comprimento, embora o formato é potencialmente capaz de suportar os sectores que variam em tamanho de 128 bytes para cima em potências de 2 (128, 256, 512, 1024, etc.). O limite mínimo de 128 é o mínimo necessário para atender a uma única entrada de diretório em um setor Directory.

Existem vários tipos de setor que podem estar presentes em um CFBF:

  • File Allocation Table (FAT) Sector - contém cadeias de índices sectoriais tanto como um FAT faz nos sistemas de arquivos FAT / FAT32
  • Setores MiniFAT - semelhante ao FAT, mas armazenar cadeias de mini-setores dentro do Mini-Stream
  • FAT (DIFAT) Sector duas vezes indireta - contém cadeias de índices sectoriais FAT
  • Sector Directory - contém entradas de diretório
  • Sector Stream - contém dados arquivo arbitrário
  • Faixa Bloqueio Setor - contém a área de bloqueio do byte-range de um arquivo grande

Mais detalhes são dados a seguir para o cabeçalho e cada tipo de sector.

formato CFBF Header

O CFBF Header ocupa os primeiros 512 bytes do arquivo e informações necessárias para interpretar o resto do arquivo. A declaração de estrutura C-Estilo abaixo (extraída a partir do AAFA de baixo nivel Recipiente Especificação) mostra os membros do cabeçalho CFBF e o seu objectivo:

 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) Setores

Quando tomados em conjunto como um único fluxo a coleção de setores FAT definir o status e articulação de todos os setores no arquivo. Cada entrada na FAT tem 4 bytes de comprimento e contem o número de sector do sector seguinte numa cadeia FAT ou um dos seguintes valores especiais:

  • FREESECT (0xFFFFFFFF) - denota um setor não utilizado
  • ENDOFCHAIN ​​(0xFFFFFFFE) - marca o último setor em uma cadeia FAT
  • FATSECT (0xFFFFFFFD) - marca um setor usado para armazenar parte do FAT
  • DIFSECT (0xfffffffc) - marca um setor usado para armazenar parte do DIFAT

Sector gama de bloqueio

O bloqueio Sector Faixa deve existir em arquivos maiores que 2GB de tamanho, e não deve existir em arquivos menores que 2 GB. The Lock Sector Faixa deve conter o 0x7FFFFF00 intervalo de bytes para 0x7FFFFFFF no arquivo. Esta área é reservada pela implementação COM da Microsoft para armazenar informações para acesso simultâneo bloqueio byte-range.

Glossário

  • FAT File Allocation Table, também conhecido como -: SAT - Allocation Table Sector
  • DIFAT - Double-Indirect File Allocation Table
  • Cadeia FAT - um grupo de entradas FAT que indicam os setores atribuídos a um córrego no arquivo
  • Fluxo - um arquivo virtual, que ocupa um número de setores dentro da CFBF
  • Setor - A unidade de alocação dentro do CFBF, geralmente 512 ou 4096 bytes de comprimento

Veja também

Referências

links externos