Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Соединение файла двоичный формат (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

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

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

Глоссарий [ править ]

  • 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 . Корпорация Microsoft . Проверено 23 сентября 2009 года .
  5. ^ «Понять составные файлы» . Библиотека Microsoft Developers Network (MSDN) - ActiveDirectory Rights Management . 25 июня 2009 . Проверено 23 сентября 2009 года .
  6. ^ 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 .