Создание VxD на Visual C++ без ассемблерных модулей - Системные средства поддержки VxD
ОГЛАВЛЕНИЕ
Системные средства поддержки VxD
Некоторые системные сообщения
DEVICE_INIT - инициализация статического драйвера
- EBX — идентификатор системной виртуальной машины.
- ESI — адрес командной строки VMM в его PSP. Первый байт строки определяет ее длину.
Сообщение посылается после загрузки статического драйвера для его инициализации.
SYS_DYNAMIC_DEVICE_INIT - инициализация динамического драйвераСообщение посылается после загрузки динамического драйвера для его инициализации.
SYS_DYNAMIC_DEVICE_EXIT - завершение динамического драйвераСообщение посылается перед выгрузкой динамического драйвера для завершения его работы.CREATE_VM - создание новой виртуальной машины
- EBX — идентификатор создаваемой виртуальной машины.
Посылается в процессе создания новой виртуальной машины (VM), но до ее фактического запуска. На этом этапе VxD может определить, сможет ли он поддерживать создаваемую виртуальную машину, и запросить необходимые для поддержки ресурсы. Возврат установленного флага CF предотвращает создание машины.
VM_INIT - инициализация новой виртуальной машины
- EBX — идентификатор виртуальной машины.
Посылается в начале работы новой виртуальной машины, при ее инициализации, в контексте этой виртуальной машины. На этом этапе VxD может инициализировать ресурсы, выделенные для поддержки новой виртуальной машины.Флаг CF всегда должен возвращаться сброшенным.
VM_TERMINATE - завершение виртуальной машины
- EBX — идентификатор завершаемой машины.
Посылается в начале процесса завершения виртуальной машины.Флаг CF всегда должен возвращаться сброшенным.
DESTROY_VM - уничтожение виртуальной машины
- EBX — идентификатор уничтожаемой машины.
Посылается в конце процесса завершения машины, перед непосредственным удалением ее из системы.Флаг CF всегда должен возвращаться сброшенным.
CREATE_THREAD - создание новой задачи
- EDI — идентификатор создаваемой задачи.
- EDI — идентификатор завершаемой задачи.
Посылается в начале процесса завершения задачи. Завершаемая задача еще какое-то время может оставаться в системе, пока не будут завершены все ждущие операции ввода/вывода.Флаг CF всегда должен возвращаться сброшенным.
DESTROY_THREAD - уничтожение задачи
- EDI — идентификатор уничтожаемой задачи.
Посылается в конце процесса завершения задачи, перед непосредственным удалением задачи из системы.Флаг CF всегда должен возвращаться сброшенным.
SYSTEM_EXIT - завершение работы системы
- EBX — идентификатор системной виртуальной машины.
Посылается в начале процесса завершения работы системы, при запросе закрытия системы (shutdown), перезагрузки (reboot) или при аварийном завершении.
W32_DEVICEIOCONTROL - запрос от приложения Win32
- EBX — идентификатор текущей виртуальной машины.
- ESI — адрес блока параметров DIOCParams.
- Сообщение всегда посылается в контексте вызвавшей задачи Win32, так что драйверу напрямую доступно адресное пространство приложения. Драйвер обрабатывает запрос, извлекая из блока параметров и исходного буфера данные запроса, и возвращает в EAX код завершения:
0 — обработка завершена успешно;-1 — начата асинхронная операция. Возвращается только в том случае, если параметру был задан ненулевой параметр lpoOverlapped.код ошибки — если операция завершена неудачно.Вместе с возвратом результата в EAX драйвер может заносить необходимую информацию в буфер результата, если он указан в блоке параметров.