Макросы на языке VBAПо правилам MS Word 97, документ раскидан по ряду потоков: текст отдельно, картинки отдельно, макросы отдельно, служебная информация отдельно и т. п. Таким образом, набор и назначение потоков составного файла сильно зависят от того, имеются ли в документе картинки, интегрированы ли внутрь макросы и т. п. Вот так выглядит структура «пустого» документа Макросы в документе, созданном средствами MS Word 97, представлены в разнообразных формах и разбросаны по разным потокам. Во-первых, в документе хранятся исходные тексты макросов, для экономии места упакованные алгоритмом LZNT1 , — поэтому их внутри документа не видно «на просвет». Обычно они занимают конец некоторого потока. Если программист сохранил свои макросы в стандартном модуле «NewMacros», то исходные тексты будут расположены в потоке с этим же именем. Если пользователь создает дополнительные VBA-модули с уникальными именами, то в документе появятся соответствующие им потоки, и исходные тексты будут помещены именно в них. А если пользователь помещает свои макросы в «модули классов», то их исходные тексты окажутся в потоке с именем «ThisDocument». Отличительным признаком потоков, в которых «спрятаны» исходные тексты макросов, является четырехбайтовая сигнатура 00011601h, расположенная в самом начале потока. Во-вторых, в документе хранится «p-code» макросов. Разумеется, коды языковых конструкций VBA отличаются от кодов языка WordBasic, использованных в MS Word 6.0/7.0. Макросы, закодированные таким образом, хранятся в тех же потоках, что и исходные коды, только в другом месте — где-то ближе к началу потока.

Наконец, в документе хранится полностью откомпилированный код макросов, подготовленный для выполнения на виртуальной машине. Вообще говоря, этот исполняемый код для одного и того же исходного текста будет разным в зависимости от того, в MS Word 97 или MS Word 2000 был создан документ, — поскольку в них используются немножко различающиеся виртуальные машины. Исполняемые коды хранятся в потоках с именами вида « SRP_0», « SRP_1», распаковать блоки макросов и провести распознавание вирусов по исходному тексту

Еще интересные статьи :

Макросы на языке VBA
Макросы на языке VBA
Макросы на языке VBA
Макросы на языке VBA