Уроки Iczelion'а



Каркас VxD - часть 2


Вы можете заметить, что имена в VxD-исходнике не зависят от регистра. Вы можете использовать символы верхнего или нижнего регистра или их комбинацию. Давайте проанализируем каждый из членов Declare_virtual_device.

  • Имя - имя VxD. Максимальная длина - 8 символов. Оно должно быть введено в верхнем регистре. Имя должно быть уникальным среди всех VxD системы. Макрос также используем имя, чтобы создать имя DDB, прибавляя '_DDB' к имени VxD. Поэтому, если вы используете 'FIRSTVXD' в качестве имени своего драйвера, макрос Declare_Virtual_Device объявит имя DDB как FIRSTVXD_DDB. Помните, что вы также должны экспортировать DDB в .DEF-файле.
  • MajorVerand, MinorVer - основная и дополнительная версии VxD.
  • CtrlProc - имя контрольной процедуры устройства вашего VxD. Контрольная процедура устройства (device control рrocedure) - это функция, которая получает и обрабатывает контрольные сообщения. Вы можете считать эту процедуру аналогом процедуры окна. Так как мы используем макрос Begin_Control_Disрatch, чтобы создать нашу контрольную процедру устройства, нам следует использовать стандартное имя вида VxDName_Control. Begin_Control_Disрatch прибавляет '_Control', к имени, которое ему передается (и мы обычно передаем ему имя VxD), поэтому нам следует указывать имя нашего VxD в параметре CtrlProc с прибавленным к нему '_Control'.
  • DeviceID - 16-битное уникальное значение VxD. ID потребуется вам только тогда, если ваш VxD должен обрабатывать одну из следующих ситуаций.

  • Ваш VxD экспортирует VxD сервисы для использования другими VxD. Так как интерфейс int20 использует device ID, чтобы обнаруживать и находить VxD, наличие уникального идентификатора является обязательным.
  • Ваш VxD оповещает о своем существовании приложения реального режима во время инициализации через int 2Fh, функция 1607h.
  • Какие-то программы реального режима (TSR) будут использовать прерывание 2Fh, функцию 1605h, чтобы загрузить ваш VxD.

  • Если VxD не нуждается в уникальном device ID, вы можете указать в этом поле UNDEFINED_DEVICE_ID. Если вам требуется уникальное ID, вам нужно попросить его у Microsoft'а.
  • InitOrderInitialization - порядок загрузки VxD. У каждого VxD есть свой загрузочный номер. Hапример:
  • VMM_INIT_ORDER EQU 000000000H DEBUG_INIT_ORDER EQU 000000000H DEBUGCMD_INIT_ORDER EQU 000000000H




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