stringtranslate.com

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

Compound File Binary Format (CFBF), также называемый Compound File , Compound Document format , [1] или Composite Document File V2 [2] (CDF), — это формат файла составного документа для хранения множества файлов и потоков в одном файле на диске. CFBF разработан корпорацией Microsoft и является реализацией Microsoft COM Structured Storage . [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 могут присутствовать несколько типов секторов:

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

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

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

 typedef unsigned long ULONG ; // 4 байта typedef unsigned short USHORT ; // 2 байта typedef short OFFSET ; // 2 байта typedef ULONG SECT ; // 4 байта typedef ULONG FSINDEX ; // 4 байта typedef USHORT FSOFFSET ; // 2 байта typedef USHORT WCHAR ; // 2 байта typedef ULONG DFSIGNATURE ; // 4 байта typedef unsigned char BYTE ; // 1 байт typedef unsigned short WORD ; // 2 байта typedef unsigned long DWORD ; // 4 байта typedef ULONG SID ; // 4 байта typedef GUID CLSID ; // 16 байт                                                         struct StructuredStorageHeader { // [смещение от начала (байт), длина (байт)] BYTE _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] зарезервировано, должно быть равно нулю FSINDEX _csectDir ; // [28H,04] должно быть равно нулю для секторов размером 512 байт, // количество SECT в цепочке каталогов для секторов размером 4 КБ FSINDEX _csectFat ; // [2CH,04] количество SECT в цепочке FAT SECT _sectDirStart ; // [30H,04] первый SECT в цепочке каталогов DFSIGNATURE _signature ; // [34H,04] подпись, используемая для транзакций; должно // быть равно нулю. Эталонная реализация // не поддерживает транзакции ULONG _ulMiniSectorCutoff ; // [38H,04] максимальный размер для мини-потока; // обычно 4096 байт SECT _sectMiniFatStart ; // [3CH,04] первый SECT в цепочке MiniFAT FSINDEX _csectMiniFat ; // [40H,04] количество SECT в цепочке MiniFAT SECT _sectDifStart ; // [44H,04] первый SECT в цепочке DIFAT FSINDEX _csectDif ; // [48H,04] количество SECT в цепочке DIFAT SECT _sectFat [ 109 ]; // [4CH,436] SECT первых 109 секторов FAT };                                                                        

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

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

Диапазон Блокировки Сектора

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

Глоссарий

Смотрите также

Ссылки

  1. ^ "Apache POI – POIFS". Проект POI. Архивировано из оригинала 26 апреля 2011 г. Получено 10 мая 2011 г.
  2. ^ "Как конвертировать документы между форматами файлов LibreOffice и Microsoft Office на Linux". Архивировано из оригинала 21 сентября 2019 г. Получено 25 ноября 2016 г.
  3. ^ "Compound Files (Windows)". Библиотека Microsoft Developers Network (MSDN) – COM SDK . Корпорация Microsoft. 20 ноября 2008 г. Получено 23 сентября 2009 г.
  4. ^ "Контейнеры: составные файлы". Библиотека Microsoft Developers Network (MSDN) – документация Visual Studio 2008. Microsoft Corporation . Получено 23 сентября 2009 г.
  5. ^ "Understand Compound Files". Библиотека Microsoft Developers Network (MSDN) – ActiveDirectory Rights Management . 25 июня 2009 г. Получено 23 сентября 2009 г.
  6. ^ "Microsoft Compound File Binary File Format, Version 4". www.loc.gov . 28 января 2020 г. . Получено 13 июня 2024 г. .
  7. ^ Ассоциация AMW (ранее Ассоциация AAF) Архивировано 15 августа 2000 года на Wayback Machine

Внешние ссылки