Двоичный формат составного файла
Двоичный формат составного файла (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.
Сектор блокировки диапазона
[ редактировать ]![]() | Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( ноябрь 2009 г. ) |
Сектор блокировки диапазона должен существовать в файлах размером более 2 ГБ и не должен существовать в файлах размером менее 2 ГБ. Сектор блокировки диапазона должен содержать диапазон байтов от 0x7FFFFF00 до 0x7FFFFFFF в файле. Эта область зарезервирована реализацией COM Microsoft для хранения информации о блокировке диапазона байтов для одновременного доступа.
Глоссарий
[ редактировать ]- FAT – Таблица размещения файлов, также известная как: SAT – Таблица размещения секторов.
- DIFAT - Таблица двойного косвенного размещения файлов
- Цепочка FAT – группа записей FAT, которые указывают сектора, выделенные для потока в файле.
- Поток – виртуальный файл, занимающий несколько секторов в CFBF.
- Сектор – единица распределения внутри CFBF, обычно длиной 512 или 4096 байт.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Apache POI – POIFS» . Проект POI. Архивировано из оригинала 26 апреля 2011 года . Проверено 10 мая 2011 г.
- ^ «Как конвертировать документы между форматами файлов LibreOffice и Microsoft Office в Linux» . Архивировано из оригинала 21 сентября 2019 года . Проверено 25 ноября 2016 г. .
- ^ «Составные файлы (Windows)» . Библиотека Microsoft Developers Network (MSDN) — COM SDK . Корпорация Майкрософт. 20 ноября 2008 года . Проверено 23 сентября 2009 г.
- ^ «Контейнеры: составные файлы» . Библиотека Microsoft Developers Network (MSDN) — документация по Visual Studio 2008 . Корпорация Майкрософт . Проверено 23 сентября 2009 г.
- ^ «Понимание составных файлов» . Библиотека Microsoft Developers Network (MSDN) — ActiveDirectory Rights Management . 25 июня 2009 года . Проверено 23 сентября 2009 г.
- ^ «Формат двоичного файла составного файла Microsoft, версия 4» . www.loc.gov . 28 января 2020 г. Проверено 13 июня 2024 г.
- ^ Ассоциация AMW (ранее Ассоциация AAF). Архивировано 15 августа 2000 г. в Wayback Machine.
Внешние ссылки
[ редактировать ]- «[MS-CFB]: формат двоичного файла составного файла» . Майкрософт . Проверено 6 июля 2019 г.
- «Формат файла составного документа Microsoft» (PDF) . Описание OpenOffice.org CFBF . Проверено 22 мая 2006 г.
- «Спецификация низкоуровневого контейнера расширенного авторского формата» (PDF) . Спецификация структурированного хранилища Microsoft версии 3 (PDF) . Архивировано из оригинала (PDF) 9 августа 2011 года . Проверено 22 мая 2006 г.
- «Формат двоичного файла составного файла Microsoft, версия 3» . Библиотека Конгресса, веб-сайт цифровых форматов . Проверено 6 июля 2019 г.