Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 008.doc
Скачиваний:
14
Добавлен:
07.02.2015
Размер:
47.62 Кб
Скачать

Дополнение от зимы 2004 года

После обнародования предыдущей версии этой статьи мне пришлось выслушать немало критики за ее неполноту, наличие многочисленых неточностей, и даже за то, что я дерзнул написать ее поперед тех "батьков", кто знает на эту тему гораздо больше, но шибко дорожит своей монополией на информацию. 

К счастью, большинство читателей восприняли ту статью благожелательно. А правильней всех поступил С. Новодворский, который очень удачно углубил рассмотренную тему в своей собственной статье "Доступ к MD-файлам при помощи VBA", попутно исправив самые крупные мои неточности и дописав иллюстрирующий софт. Спасибо, Сергей, и так держать!

Итак, самая крупная неточность в моей статье касалась формата заголовка структурированного хранилища. Часть полей я тогда намеренно не описал (посчитав не важными), одно поле описал ошибочно, а о назначении некоторых полей в то время лишь смутно догадывался. Теперь я имею возможность привести новый, уточненный формат заголовка структурированного хранилища:

struct DOC_FILE_HEADER

{

DWORD Сигнатура; // +00h - "магическое" число E011CFD0h

DWORD КодВерсииOLE; // +04h - "магическое" число E11AB1A2h

DWORD НеИспользуется; // +08h

WORD НеИспользуется; // +0Ch

WORD РазмерСектора; // +0Eh - Log2(512)=9 (new!)

DWORD НеИспользуется; // +10h

DWORD НеИспользуется; // +14h

WORD НомерРевизии; // +18h - ? (new!)

WORD НомерВерсии; // +1Ah - ? (new!)

DWORD НеИспользуется; // +1Ch

DWORD НеИспользуется; // +20h

DWORD НеИспользуется; // +24h

DWORD НеИспользуется; // +28h

DWORD РазмерBBD; // +2Сh - количество секторов в BBD

DWORD НачалоКаталога; // +30h - стартовый сектор каталога

DWORD НеИспользуется; // +34h

DWORD НеИспользуется; // +38h

DWORD НачалоSBD; // +3Сh - стартовый сектор SBD

DWORD ПродолжениеSBD; // +40h - ? (new!)

DWORD ОкончаниеBBD; // +44h - стартовый сектор окончания BBD (new!)

DWORD НеИспользуется; // +48h

DWORD НачалоBBD; // +4Сh - стартовый сектор BBD

DWORD ПродолжениеBBD[108]; // +50h - адреса секторов продолжения BBD (new!)

};

Комментарии.

  1. Знаком "?" помечены поля, в назначении которых я не уверен.

  2. С адреса 50h начинается массив DWORD-ов, каждый из которых непосредственно адресует очередной сектор FAT больших блоков. Поля по смещениям 40h и 50h дают возможность иметь длинные FAT.

  3. Говорят, что MS Word, начиная с версии 2000 умеет ЧИТАТЬдокументы с секторами длиной >512 (например, 4096), но все равно не умеет ихСОЗДАВАТЬ.

  4. Убедитесь, насколько все у Microsoft запущено!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]