Jump to content

Двоичный формат составного файла

Двоичный формат составного файла (CFBF), также называемый составным файлом , форматом составного документа , [1] или файл составного документа V2 [2] (CDF) — это составной формат файла документа для хранения множества файлов и потоков в одном файле на диске. CFBF разработан Microsoft и является реализацией структурированного хранилища Microsoft COM . [3] [4] [5] Формат файла используется для хранения объектов хранения и объектов потока в иерархической структуре в одном файле. [6]

Microsoft открыла формат для использования другими, и теперь он используется во множестве программ, от Microsoft Word и Microsoft Access до Business Objects. [ нужна ссылка ] Он также составляет основу Advanced Authoring Format . [7]

Проще говоря, двоичный формат составного файла представляет собой контейнер с небольшими ограничениями на то, что может храниться в нем.

Файловая структура CFBF во многом напоминает FAT файловую систему . Файл разделен на сектора , которые объединены в цепочку с помощью таблицы размещения файлов (не путать с одноименной файловой системой), которая содержит цепочки секторов, связанных с каждым файлом, каталог содержит информацию о содержащихся файлах с идентификатором сектора. (SID) для начального сектора цепочки и так далее.

Структура

[ редактировать ]

Файл CFBF состоит из записи заголовка размером 512 байт, за которой следует несколько секторов, размер которых определен в заголовке. В литературе определяется, что сектора имеют длину 512 или 4096 байт, хотя формат потенциально способен поддерживать секторы размером от 128 байт и выше в степени 2 (128, 256, 512, 1024 и т. д.). Нижний предел 128 — это минимум, необходимый для размещения одной записи каталога в сектор каталога. [ соответствующий? ]

В CFBF могут присутствовать несколько типов секторов:

  • Сектор таблицы размещения файлов (FAT) — содержит цепочки индексов секторов, подобно FAT в файловых системах FAT/FAT32.
  • Секторы MiniFAT - аналогичны FAT, но хранят цепочки мини-секторов в Mini-Stream.
  • Сектор двойной косвенной FAT (DIFAT) - содержит цепочки индексов сектора FAT.
  • Сектор каталога – содержит записи каталога.
  • Сектор потока – содержит произвольные данные файла.
  • Сектор блокировки диапазона — содержит область блокировки диапазона байтов большого файла.

Более подробная информация приведена ниже для заголовка и каждого типа сектора.

Формат заголовка CFBF

[ редактировать ]

Заголовок CFBF занимает первые 512 байт файла и информацию, необходимую для интерпретации остальной части файла. Приведенное ниже объявление структуры C-стиля (извлеченное из спецификации низкоуровневого контейнера AAFA) показывает элементы заголовка CFBF и их назначение:

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

Секторы таблицы размещения файлов (FAT)

[ редактировать ]

Если объединить их в один поток, совокупность секторов FAT определяет состояние и связь каждого сектора в файле. Каждая запись в FAT имеет длину 4 байта и содержит номер следующего сектора в цепочке FAT или одно из следующих специальных значений:

  • FREESECT (0xFFFFFFFF) – обозначает неиспользуемый сектор.
  • ENDOFCHAIN ​​(0xFFFFFFFE) – отмечает последний сектор в цепочке FAT.
  • FATSECT (0xFFFFFFFD) – обозначает сектор, используемый для хранения части FAT.
  • DIFSECT (0xFFFFFFFC) – обозначает сектор, используемый для хранения части DIFAT.

Сектор блокировки диапазона

[ редактировать ]

Сектор блокировки диапазона должен существовать в файлах размером более 2 ГБ и не должен существовать в файлах размером менее 2 ГБ. Сектор блокировки диапазона должен содержать диапазон байтов от 0x7FFFFF00 до 0x7FFFFFFF в файле. Эта область зарезервирована реализацией COM Microsoft для хранения информации о блокировке диапазона байтов для одновременного доступа.

Глоссарий

[ редактировать ]
  • FAT – Таблица размещения файлов, также известная как: SAT – Таблица размещения секторов.
  • DIFAT - Таблица двойного косвенного размещения файлов
  • Цепочка FAT – группа записей FAT, которые указывают сектора, выделенные для потока в файле.
  • Поток – виртуальный файл, занимающий несколько секторов в CFBF.
  • Сектор – единица распределения внутри CFBF, обычно длиной 512 или 4096 байт.

См. также

[ редактировать ]
  1. ^ «Apache POI – POIFS» . Проект POI. Архивировано из оригинала 26 апреля 2011 года . Проверено 10 мая 2011 г.
  2. ^ «Как конвертировать документы между форматами файлов LibreOffice и Microsoft Office в Linux» . Архивировано из оригинала 21 сентября 2019 года . Проверено 25 ноября 2016 г. .
  3. ^ «Составные файлы (Windows)» . Библиотека Microsoft Developers Network (MSDN) — COM SDK . Корпорация Майкрософт. 20 ноября 2008 года . Проверено 23 сентября 2009 г.
  4. ^ «Контейнеры: составные файлы» . Библиотека Microsoft Developers Network (MSDN) — документация по Visual Studio 2008 . Корпорация Майкрософт . Проверено 23 сентября 2009 г.
  5. ^ «Понимание составных файлов» . Библиотека Microsoft Developers Network (MSDN) — ActiveDirectory Rights Management . 25 июня 2009 года . Проверено 23 сентября 2009 г.
  6. ^ «Формат двоичного файла составного файла Microsoft, версия 4» . www.loc.gov . 28 января 2020 г. Проверено 13 июня 2024 г.
  7. ^ Ассоциация AMW (ранее Ассоциация AAF). Архивировано 15 августа 2000 г. в Wayback Machine.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bdd65ef194aca2376d6f6cf832eb1271__1718234460
URL1:https://arc.ask3.ru/arc/aa/bd/71/bdd65ef194aca2376d6f6cf832eb1271.html
Заголовок, (Title) документа по адресу, URL1:
Compound File Binary Format - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)