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

редактировать

Двоичный формат составного файла (CFBF), также называемый Составной файл, Формат составного документа или Файл составного документа V2 (CDF) - это составной формат файла документа для хранения множества файлов и потоков в одном файле. на диске. CFBF разработан Microsoft и является реализацией Microsoft COM Structured Storage.

Microsoft открыла формат для использования другими, и теперь он используется во множестве программ от Microsoft Word и Microsoft Access для Business Objects. Он также составляет основу Advanced Authoring Format.

Содержание

  • 1 Обзор
  • 2 Структура
    • 2.1 Формат заголовка CFBF
    • 2.2 Секторы таблицы размещения файлов (FAT)
    • 2.3 Диапазон Сектор блокировки
    • 2.4 Глоссарий
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки

Обзор

В самом простом случае двоичный формат составного файла представляет собой контейнер с небольшими ограничениями о том, что в нем можно хранить.

Файловая структура CFBF примерно напоминает файловую систему FAT . Файл разделен на секторы, которые связаны вместе с таблицей размещения файлов (не путать с файловой системой с тем же именем), которая содержит цепочки секторов, связанных с каждым файлом, каталог содержит информацию для содержащихся файлов с идентификатором сектора. (SID) для начального сектора цепочки и так далее.

Структура

Файл CFBF состоит из 512-байтовой записи заголовка, за которой следует ряд секторов, размер которых определен в заголовке. В литературе определяется, что секторы имеют длину 512 или 4096 байт, хотя формат потенциально способен поддерживать секторы размером от 128 байт и выше в степени 2 (128, 256, 512, 1024 и т. Д.). Нижний предел 128 - это минимум, необходимый для размещения одной записи каталога в секторе каталога.

В CFBF могут присутствовать несколько типов секторов:

  • Сектор таблицы размещения файлов (FAT) - содержит цепочки индексов секторов так же, как FAT в файловых системах FAT / FAT32
  • MiniFAT Sectors - аналогично FAT, но хранит цепочки мини-секторов в мини-потоке
  • Double- Сектор косвенной 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 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-байтовых секторов, // количество СЕКЦИЙ в цепочке каталогов для // секторов 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] первый СЕКЦИЯ в цепочке 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 или одно из следующих специальных значений:

  • FREESECT (0xFFFFFFFF) - обозначает неиспользуемый сектор
  • ENDOFCHAIN (0xFFFFFFFE) - отмечает последний сектор в цепочке FAT
  • FATSECT (0xFFFFFFFD) - отмечает сектор, используемый для хранения части FAT
  • DIFSECT (0xFFFFFFFC) - отмечает сектор, используемый для хранения часть сектора блокировки диапазона DIFAT

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

Глоссарий

  • FAT - Таблица размещения файлов, также известная как: SAT - Таблица размещения секторов
  • DIFAT - Таблица двойного косвенного размещения файлов
  • Цепочка FAT - группа записей FAT, которые указывают сектора, выделенные потоку в файле
  • Stream - виртуальный файл, который занимает некоторое количество секторов в пределах CFBF
  • Sector - единицы распределения в CFBF, обычно длина 512 или 4096 байт

См. также

Ссылки

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

Последняя правка сделана 2021-05-15 08:21:31
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте