Организация ввода-вывода. Часть 1. Виртуальные драйверы и виртуальное окружение WINDOWS. Рощин А.В. - 68 стр.

UptoLike

Составители: 

68
В самом начале файла макроопределением
DECLARE_VIRTUAL_DEVICEDDB объявлен блок дескриптора
устройства DDB. Параметры этого макроопределения один к одному
соответствуют полям блока дескриптора устройства DDB, описанного в
секции "Блок Дескриптора Устройства" главы 3. SKELCTRL.ASM
использует только первые шесть макропараметров, потому что VxD не
экспортирует API ни V86, ни защищенного режима. Поскольку
SKELETON не экспортирует API или другие сервисные функции, не
требуется
VxD ID, так что SKELCTRL.ASM использует
UNDEFINED_DEVICE_ID для макропараметра Device_Num (Device_Num
то же, что Device ID). SKELETON не требует специального порядка
инициализации, так что для макропараметра Init_Order используется
значение UNDEFINED_INIT_ORDER.
Вторая половина SKELCTRL.ASM определяет управляющую
процедуру устройства VxD (Control Proc). Управляющая процедура
устройства VxD должна размещаться в заблокированном сегменте, для
этого Control Proc окружен макрокопределениями
VXD_LOCKED_CODE_SEG и VXD_LOCKED_CODE_ENDS. Control
Proc использует
последовательность макроопределений Control_Dispatch
генерации кода основного оператора переключения. Например, строка
Contro1_Dispatch SYS_VM_INIT, _OnSysVmInit, cCall. <ebx>
транслируется в код, который сравнивает код сообщения в EAX с
SYS_VM_INIT, и, если они совпадают, вызывает функцию OnSysVMInit в
модуле Си, принимая обработчик VM в EBX как параметр.
Этой информации о SKELCTRL.ASM достаточно чтобы
модифицировать VxD для обработки других сообщения в имеющемся
драйвере.
                                            68




        В        самом          начале            файла       макроопределением
DECLARE_VIRTUAL_DEVICEDDB                        объявлен    блок    дескриптора
устройства DDB. Параметры этого макроопределения один к одному
соответствуют полям блока дескриптора устройства DDB, описанного в
секции "Блок Дескриптора Устройства" главы 3. SKELCTRL.ASM
использует только первые шесть макропараметров, потому что VxD не
экспортирует      API    ни    V86,    ни    защищенного     режима. Поскольку
SKELETON не экспортирует API или другие сервисные функции, не
требуется        VxD     ID,     так     что      SKELCTRL.ASM        использует
UNDEFINED_DEVICE_ID для макропараметра Device_Num (Device_Num
– то же, что Device ID). SKELETON не требует специального порядка
инициализации, так что для макропараметра Init_Order используется
значение UNDEFINED_INIT_ORDER.
        Вторая    половина     SKELCTRL.ASM            определяет   управляющую
процедуру устройства VxD (Control Proc). Управляющая процедура
устройства VxD должна размещаться в заблокированном сегменте, для
этого          Control         Proc          окружен        макрокопределениями
VXD_LOCKED_CODE_SEG и VXD_LOCKED_CODE_ENDS. Control
Proc использует последовательность макроопределений Control_Dispatch
генерации кода основного оператора переключения. Например, строка

        Contro1_Dispatch SYS_VM_INIT, _OnSysVmInit, cCall. 
транслируется в код, который сравнивает код сообщения в EAX с
SYS_VM_INIT, и, если они совпадают, вызывает функцию OnSysVMInit в
модуле Си, принимая обработчик VM в EBX как параметр.
        Этой     информации       о    SKELCTRL.ASM          достаточно   чтобы
модифицировать VxD для обработки других сообщения в имеющемся
драйвере.