Ассемблер для Windows




VxDдрайвер - часть 2


Имеется три механизма взаимодействия виртуальных драйверов друг с другом.

  1. Управляющие сообщения. Эти сообщения посылает виртуальным драйверам менеджер виртуальной машины. Драйверы также могут обмениваться информацией посредством таких сообщений. Это очень напоминает сообщения Windows и взаимодействия приложений друг с другом и операционной системой через эти сообщения.
  2. Функции обратного вызова. Виртуальный драйвер может позволить вызов функции обратного вызова другому драйверу.
  3. Виртуальные драйверы и менеджер виртуальной машины могут экспортировать определенные функции для вызова из других виртуальных драйверов. Для вызова функции необходимо знать уникальный номер виртуального драйвера, который экспортирует данную функцию и номер этой функции.
  4. Формат виртуальных драйверов называется LE-форматом, сокращенно от "linear executable". Данный формат поддерживает наличие как 16-битного, так и 32-битного кода. Это актуально для статических виртуальных драйверов, которые часть работы (инициализация) выполняют в реальном (незащищенном) режиме. В Windows NT драйверы грузятся в защищенном режиме, по этой причине данный формат в этой операционной системе не используется.

    Код и данные в файле LE-формата располагаются в сегментах. Ниже мы опишем возможные классы сегментов.

    LCODE - код или данные, заключенные в этом коде, не могут сбрасываться системой на диск (paging).

    PCODE - код может временно помещаться на диск.

    PDATE - аналогично предыдущему, но здесь хранятся данные.

    ICODE - здесь располагается код инициализации, после инициализации сегмент удаляется из памяти.

    DBOCODE - используется при запуске драйвера "под отладчиком".

    SCODE - статические код и данные. Всегда остается в памяти, даже если драйвер выгружается.

    RCODE — содержит 16-битный код для инициализации в реальном режиме.

    16ICODE - 16-битный код инициализации в защищенном режиме.

    MCODE - содержит строки сообщений.

    Перечисленные классы сегментов не задаются непосредственно в тексте программы. Сегменты и классы объявляются в DEF-файле. Файл vmm.inc содержит огромное количество макросов, и нам не избежать пользоваться ими. Это позволит материал, который я хочу изложить, вместить в одну главу.




    Содержание  Назад  Вперед