Двоичный формат составного файла - Compound File Binary Format
Двоичный формат составного файла (CFBF), также называемый Составной файл, Формат составного документа,[1] или же Составной файл документа, версия 2[2] (CDF), является сложный формат файла документа для хранения множества файлов и потоков в одном файле на диске. CFBF разработан Microsoft и является реализацией Microsoft Структурированное хранилище COM.[3][4][5]
Microsoft открыла формат для использования другими, и теперь он используется во множестве программ от Microsoft Word и Microsoft Access в Business Objects.[нужна цитата ] Он также составляет основу Расширенный формат авторинга.[6]
Обзор
В простейшем случае двоичный формат составного файла представляет собой контейнер с небольшими ограничениями на то, что в нем можно хранить.
Файловая структура CFBF слабо напоминает ТОЛСТЫЙ файловая система. Файл разбит на Секторов которые связаны вместе с Таблица размещения файлов (не путать с одноименной файловой системой), которая содержит цепочки секторов, связанных с каждым файлом, Каталог содержит информацию о содержащихся файлах с идентификатором сектора (SID) для начального сектора цепочки и т. д.
Структура
Файл CFBF состоит из 512-байтовой записи заголовка, за которой следует ряд секторов, размер которых определяется в заголовке. В литературе определяется, что секторы имеют длину 512 или 4096 байт, хотя формат потенциально способен поддерживать секторы размером от 128 байт и выше в степени 2 (128, 256, 512, 1024 и т. Д.). Нижний предел 128 - это минимум, необходимый для размещения одной записи каталога в Секторе Справочника.[соответствующий? ]
Есть несколько типов секторов, которые могут присутствовать в CFBF:
- Сектор таблицы размещения файлов (FAT) - содержит цепочки индексов секторов так же, как FAT в файловых системах FAT / FAT32.
- Секторы MiniFAT - похожи на FAT, но хранят цепочки мини-секторов внутри Mini-Stream
- Сектор Double-Indirect FAT (DIFAT) - содержит цепочки индексов сектора FAT
- Сектор каталога - содержит записи каталога
- Сектор потока - содержит данные произвольного файла
- Сектор блокировки диапазона - содержит область блокировки диапазона байтов большого файла
Более подробная информация о заголовке и каждом типе сектора приводится ниже.
Формат заголовка CFBF
Заголовок CFBF занимает первые 512 байтов файла и информацию, необходимую для интерпретации остальной части файла. Объявление структуры C-Style ниже (извлеченное из спецификации низкоуровневого контейнера AAFA) показывает элементы заголовка CFBF и их назначение:
typedef беззнаковый длинный ULONG; // 4 байта typedef беззнаковый короткая USHORT; // 2 байта typedef короткая КОМПЕНСИРОВАТЬ; // 2 байта typedef ULONG РАЗДЕЛ; // 4 байта typedef ULONG ФСИНДЕКС; // 4 байта typedef USHORT FSOFFSET; // 2 байта typedef USHORT WCHAR; // 2 байта typedef ULONG ПОДПИСЬ; // 4 байта typedef беззнаковый char БАЙТ; // 1 байт typedef беззнаковый короткая СЛОВО; // 2 байта typedef беззнаковый длинный DWORD; // 4 байта typedef ULONG SID; // 4 байта typedef GUID CLSID; // 16 байтов структура StructuredStorageHeader { // [смещение от начала (байты), длина (байты)] БАЙТ _abSig[8]; // [00H, 08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, // 0x1a, 0xe1} для текущей версии CLSID _clsid; // [08H, 16] зарезервировано должно быть равно нулю (WriteClassStg / // GetClassFile использует идентификатор класса корневого каталога) USHORT _uMinorVersion; // [18H, 02] второстепенная версия формата: 33 - это // написано по ссылке реализации USHORT _uDllVersion; // [1AH, 02] основная версия dll / формат: 3 для // 512-байтовые сектора, 4 для секторов по 4 КБ USHORT _uByteOrder; // [1CH, 02] 0xFFFE: указывает порядок байтов Intel USHORT _uSectorShift; // [1EH, 02] размер секторов в степени двойки; // обычно 9 обозначает 512-байтовые сектора USHORT _uMiniSectorShift; // [20H, 02] размер мини-секторов в степени двойки; // обычно 6 с указанием 64-байтовых мини-секторов USHORT _usReserved; // [22H, 02] зарезервировано, должно быть равно нулю ULONG _ulReserved1; // [24H, 04] зарезервировано, должно быть равно нулю ФСИНДЕКС _csectDir; // [28H, 04] должен быть равен нулю для 512-байтовых секторов, // количество секций в цепочке каталогов на 4 КБ // секторы ФСИНДЕКС _csectFat; // [2CH, 04] количество секций в цепочке FAT РАЗДЕЛ _sectDirStart; // [30H, 04] первый SECT в цепочке каталогов ПОДПИСЬ _подпись; // [34H, 04] подпись, используемая для транзакций; должен // быть нулевым. Эталонная реализация // не поддерживает транзакции ULONG _ulMiniSectorCutoff; // [38H, 04] максимальный размер мини-потока; // обычно 4096 байт РАЗДЕЛ _sectMiniFatStart; // [3CH, 04] первый SECT в цепочке MiniFAT ФСИНДЕКС _csectMiniFat; // [40H, 04] количество секций в цепочке MiniFAT РАЗДЕЛ _sectDifStart; // [44H, 04] первый SECT в цепочке DIFAT ФСИНДЕКС _csectDif; // [48H, 04] количество секций в цепочке DIFAT РАЗДЕЛ _sectFat[109]; // [4CH, 436] СЕКЦИИ первых 109 секторов FAT };
Секторы таблицы размещения файлов (FAT)
При объединении в единый поток совокупность секторов FAT определяет статус и связь каждого сектора в файле. Каждая запись в FAT имеет длину 4 байта и содержит номер следующего сектора в цепочке FAT или одно из следующих специальных значений:
- FREESECT (0xFFFFFFFF) - обозначает неиспользуемый сектор
- ENDOFCHAIN (0xFFFFFFFE) - отмечает последний сектор в цепочке FAT
- FATSECT (0xFFFFFFFD) - отмечает сектор, используемый для хранения части FAT
- DIFSECT (0xFFFFFFFC) - отмечает сектор, используемый для хранения части DIFAT
Сектор блокировки диапазона
Эта секция нуждается в расширении. Вы можете помочь добавляя к этому. (Ноябрь 2009 г.) |
В Сектор блокировки диапазона должны существовать в файлах размером более 2 ГБ и не должны существовать в файлах размером менее 2 ГБ. Сектор блокировки диапазона должен содержать в файле диапазон байтов от 0x7FFFFF00 до 0x7FFFFFFF. Эта область зарезервирована реализацией Microsoft COM для хранения информации о блокировке диапазона байтов для одновременного доступа.
Глоссарий
- ТОЛСТЫЙ - Таблица размещения файлов, также известная как: СИДЕЛ - Таблица распределения секторов
- DIFAT - Таблица двойного косвенного размещения файлов
- FAT Chain - группа записей 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. 25 июня 2009 г.. Получено 23 сентября 2009.
- ^ Ассоциация AMW (ранее Ассоциация AAF) В архиве 15 августа 2000 г. Wayback Machine
внешняя ссылка
- "[MS-CFB]: Формат двоичного файла составного файла". Microsoft. Получено 6 июля 2019.
- «Формат файла составного документа Microsoft» (PDF). OpenOffice.org CFBF описание. Получено 22 мая 2006.
- «Спецификация низкоуровневого контейнера расширенного формата авторинга» (PDF). Спецификация Microsoft Structured Storage версии 3 (PDF). Архивировано из оригинал (PDF) 9 августа 2011 г.. Получено 22 мая 2006.
- "Формат двоичных файлов составных файлов Microsoft, версия 3". Библиотека Конгресса, веб-сайт цифровых форматов. Получено 6 июля 2019.