Страница 11 из 13 Системные средства поддержки 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 — идентификатор создаваемой задачи.
Посылается при создании в системе новой задачи. Создаваемая задача в этот момент еще не является текущей.Возврат установленного флага CF предотвращает создание задачи.THREAD_INIT - инициализация новой задачи EDI — идентификатор задачи.Посылается при инициализации задачи, в начале ее работы, в контексте задачи (новая задача является текущей).Флаг CF всегда должен возвращаться сброшенным.TERMINATE_THREAD - завершение задачи - EDI — идентификатор завершаемой задачи.
Посылается в начале процесса завершения задачи. Завершаемая задача еще какое-то время может оставаться в системе, пока не будут завершены все ждущие операции ввода/вывода.Флаг CF всегда должен возвращаться сброшенным. DESTROY_THREAD - уничтожение задачи - EDI — идентификатор уничтожаемой задачи.
Посылается в конце процесса завершения задачи, перед непосредственным удалением задачи из системы.Флаг CF всегда должен возвращаться сброшенным. SYSTEM_EXIT - завершение работы системы - EBX — идентификатор системной виртуальной машины.
Посылается в начале процесса завершения работы системы, при запросе закрытия системы (shutdown), перезагрузки (reboot) или при аварийном завершении. W32_DEVICEIOCONTROL - запрос от приложения Win32 - EBX — идентификатор текущей виртуальной машины.
- ESI — адрес блока параметров DIOCParams.
- Сообщение всегда посылается в контексте вызвавшей задачи Win32, так что драйверу напрямую доступно адресное пространство приложения. Драйвер обрабатывает запрос, извлекая из блока параметров и исходного буфера данные запроса, и возвращает в EAX код завершения:
0 — обработка завершена успешно;-1 — начата асинхронная операция. Возвращается только в том случае, если параметру был задан ненулевой параметр lpoOverlapped.код ошибки — если операция завершена неудачно.Вместе с возвратом результата в EAX драйвер может заносить необходимую информацию в буфер результата, если он указан в блоке параметров. |