Соединение файла двоичный формат (CFBF), называемый также составной файл , соединение формат документа , [1] или составного документа V2 файла [2] (ВПР), представляет собой соединение , документ , формат файла для хранения многочисленных файлов и потоков в пределах одного файла на диск. CFBF разработан Microsoft и представляет собой реализацию структурированного хранилища Microsoft COM . [3] [4] [5]
Microsoft открыла этот формат для использования другими, и теперь он используется во множестве программ от Microsoft Word и Microsoft Access до Business Objects. [ необходима цитата ] Он также составляет основу расширенного формата авторинга . [6]
Обзор [ править ]
В простейшем случае двоичный формат составного файла представляет собой контейнер с небольшими ограничениями на то, что в нем можно хранить.
Файловая структура CFBF слабо напоминает файловую систему FAT . Файл разделен на секторы, которые связаны вместе с таблицей размещения файлов (не путать с файловой системой с тем же именем), которая содержит цепочки секторов, связанных с каждым файлом, каталог содержит информацию для содержащихся файлов с идентификатором сектора. (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 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 БАЙТ ; // 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-байтовых секторов, // количество СЕКЦИЙ в цепочке каталогов для секторов по 4 КБ // FSINDEX _csectFat ; // [2CH, 04] количество секций в цепочке 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] количество секций в цепочке MiniFAT SECT _sectDifStart ; // [44H, 04] первый SECT в цепочке DIFAT FSINDEX _csectDif ; // [48H, 04] количество SECT в цепочке DIFAT SECT _sectFat [ 109 ]; // [4CH, 436] СЕКЦИИ первых 109 секторов FAT };
Секторы таблицы размещения файлов (FAT) [ править ]
При объединении в единый поток совокупность секторов FAT определяет статус и связь каждого сектора в файле. Каждая запись в FAT имеет длину 4 байта и содержит номер следующего сектора в цепочке FAT или одно из следующих специальных значений:
- FREESECT (0xFFFFFFFF) - обозначает неиспользуемый сектор
- ENDOFCHAIN (0xFFFFFFFE) - отмечает последний сектор в цепочке FAT
- FATSECT (0xFFFFFFFD) - отмечает сектор, используемый для хранения части FAT
- DIFSECT (0xFFFFFFFC) - отмечает сектор, используемый для хранения части DIFAT
Сектор блокировки диапазона [ править ]
![]() | Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( Ноябрь 2009 г. ) |
Сектор Range Замок должен существовать в файлы размером более 2 Гб, и не должны существовать в файлы меньшего , чем 2 Гб. Сектор блокировки диапазона должен содержать в файле диапазон байтов от 0x7FFFFF00 до 0x7FFFFFFF. Эта область зарезервирована реализацией Microsoft COM для хранения информации о блокировке диапазона байтов для одновременного доступа.
Глоссарий [ править ]
- 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 . Корпорация Microsoft . Проверено 23 сентября 2009 года .
- ^ «Понять составные файлы» . Библиотека Microsoft Developers Network (MSDN) - ActiveDirectory Rights Management . 25 июня 2009 . Проверено 23 сентября 2009 года .
- ^ AMW ассоциация (ранее ААР Ассоциация) Архивировано 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 .