Format binaire de fichier composé - Compound File Binary Format

Le format binaire de fichier composé (CFBF), également appelé fichier composé , format de document composé ou fichier de document composite V2 (CDF), est un format de fichier de document composé permettant de stocker de nombreux fichiers et flux dans un seul fichier sur un disque. CFBF est développé par Microsoft et est une implémentation de Microsoft COM Structured Storage .

Microsoft a ouvert le format pour une utilisation par d'autres et il est maintenant utilisé dans une variété de programmes de Microsoft Word et Microsoft Access à Business Objects. Il constitue également la base du format de création avancé .

Aperçu

Dans sa forme la plus simple, le format binaire de fichier composé est un conteneur, avec peu de restriction sur ce qui peut être stocké à l'intérieur.

Une structure de fichier CFBF ressemble vaguement à un système de fichiers FAT . Le fichier est partitionné en secteurs qui sont enchaînés avec une table d'allocation de fichiers (à ne pas confondre avec le système de fichiers du même nom) qui contient des chaînes de secteurs liés à chaque fichier, un répertoire contient des informations pour les fichiers contenus avec un ID de secteur (SID) pour le secteur de départ d'une chaîne et ainsi de suite.

Structure

Le fichier CFBF se compose d'un enregistrement d'en-tête de 512 octets suivi d'un certain nombre de secteurs dont la taille est définie dans l'en-tête. La littérature définit les secteurs comme ayant une longueur de 512 ou 4096 octets, bien que le format soit potentiellement capable de prendre en charge des secteurs dont la taille est de 128 octets et plus en puissances de 2 (128, 256, 512, 1024, etc.). La limite inférieure de 128 est le minimum requis pour tenir une seule entrée de répertoire dans un secteur de répertoire.

Plusieurs types de secteurs peuvent être présents dans un CFBF:

  • Secteur de la table d'allocation de fichiers (FAT) - contient des chaînes d'indices de secteur comme le fait un FAT dans les systèmes de fichiers FAT / FAT32
  • Secteurs MiniFAT - similaires au FAT mais stockant des chaînes de mini-secteurs dans le Mini-Stream
  • Secteur FAT double indirect (DIFAT) - contient des chaînes d'indices sectoriels FAT
  • Secteur du répertoire - contient les entrées du répertoire
  • Secteur de flux - contient des données de fichier arbitraires
  • Secteur de verrouillage de plage - contient la zone de verrouillage de plage d'octets d'un fichier volumineux

Plus de détails sont donnés ci-dessous pour l'en-tête et chaque type de secteur.

Format d'en-tête CFBF

L'en-tête CFBF occupe les 512 premiers octets du fichier et les informations nécessaires pour interpréter le reste du fichier. La déclaration de structure C-Style ci-dessous (extraite de la spécification de conteneur de bas niveau de l'AAFA) montre les membres de l'en-tête CFBF et leur objectif:

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

Secteurs de la table d'allocation de fichiers (FAT)

Pris ensemble comme un flux unique, l'ensemble des secteurs FAT définit le statut et le lien de chaque secteur dans le fichier. Chaque entrée dans le FAT a une longueur de 4 octets et contient le numéro de secteur du secteur suivant dans une chaîne FAT ou l'une des valeurs spéciales suivantes:

  • FREESECT (0xFFFFFFFF) - désigne un secteur inutilisé
  • ENDOFCHAIN ​​(0xFFFFFFFE) - marque le dernier secteur d'une chaîne FAT
  • FATSECT (0xFFFFFFFD) - marque un secteur utilisé pour stocker une partie du FAT
  • DIFSECT (0xFFFFFFFC) - marque un secteur utilisé pour stocker une partie du DIFAT

Secteur de verrouillage de portée

Le secteur de verrouillage de plage doit exister dans des fichiers d'une taille supérieure à 2 Go et ne doit pas exister dans des fichiers inférieurs à 2 Go. Le secteur de verrouillage de plage doit contenir la plage d'octets 0x7FFFFF00 à 0x7FFFFFFF dans le fichier. Cette zone est réservée par l'implémentation COM de Microsoft pour stocker les informations de verrouillage de plage d'octets pour l'accès simultané.

Glossaire

  • FAT - Table d'allocation de fichiers, également connue sous le nom de: SAT - Table d'allocation de secteur
  • DIFAT - Table d'allocation de fichiers double indirecte
  • Chaîne FAT - un groupe d'entrées FAT qui indiquent les secteurs alloués à un flux dans le fichier
  • Stream - un fichier virtuel qui occupe un certain nombre de secteurs au sein de la CFBF
  • Secteur - l'unité d'allocation au sein de la CFBF, généralement de 512 ou 4096 octets de longueur

Voir également

Les références

Liens externes