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

UptoLike

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

67
4.3. Блок дескриптора устройства DDB и
Управляющая Процедура Устройства: SKELCTRL.ASM
Короткий модуль на языке ассемблера SKELCTRL.ASM (листинг
3.2) содержит блок дескриптора устройства DDB и управляющую
процедуру устройства:
.386p
;***************************************************************************
; Включения
;***************************************************************************
include vmm.inc
include debug.inc
;==================================================
; Объявление виртуального устройства
;==================================================
DECLARE_VIRTUAL_DEVICE SKELETON, 1, 0, ControlProc,
UNDEFINED_DEVICE_ID, \
UNDEFINED_INIT_ORDER
VxD_LOCKED_CODE_SEG
;==================================================
; Процедура: ControlProc
;
; Описание:
; Управляющая процедура устройства для SKELETON VxD
; Вход:
; EAX = Идентификатор вызова управления
; Выход:
; если флаг переноса очищен
; Успешно
; иначе
; Вызов управления неудачен
; Используются:
; EAX, EBX, ECX, EDX, ESI, EDI, флаги
;==================================================
BeginProc ControlProc
Control_Dispatch SYS_VM_INIT, _OnSysVmInit, cCall, <ebx>
Control_Dispatch SYS_VM_TERMINATE, _OnSysVmTerminate, cCall, <ebx>
Control_Dispatch CREATE_VM, _OnCreateVm, cCall, <ebx>
Control_Dispatch DESTROY_VM, _OnDestroyVm, cCall, <ebx>
Control_Dispatch CREATE_THREAD, _OnCreateThread, cCall, <edi>
Control_Dispatch DESTROY_THREAD, _OnDestroyThread, cCall, <edi>
clc
ret
EndProc ControlProc
VxD_LOCKED_CODE_ENDS
END
                                       67



      4.3.   Блок дескриптора устройства DDB и
             Управляющая Процедура Устройства: SKELCTRL.ASM

      Короткий модуль на языке ассемблера SKELCTRL.ASM (листинг
3.2) содержит блок дескриптора устройства DDB и управляющую
процедуру устройства:

.386p
;***************************************************************************
;     Включения
;***************************************************************************
   include vmm.inc
   include debug.inc
;==================================================
;      Объявление виртуального устройства
;==================================================
DECLARE_VIRTUAL_DEVICE SKELETON, 1, 0, ControlProc,
UNDEFINED_DEVICE_ID, \
                  UNDEFINED_INIT_ORDER
VxD_LOCKED_CODE_SEG
;==================================================
; Процедура: ControlProc
;
; Описание:
;    Управляющая процедура устройства для SKELETON VxD
; Вход:
; EAX = Идентификатор вызова управления
; Выход:
; если флаг переноса очищен
;      Успешно
; иначе
;      Вызов управления неудачен
; Используются:
; EAX, EBX, ECX, EDX, ESI, EDI, флаги
;==================================================
BeginProc ControlProc
   Control_Dispatch SYS_VM_INIT, _OnSysVmInit, cCall, 
   Control_Dispatch SYS_VM_TERMINATE, _OnSysVmTerminate, cCall, 
   Control_Dispatch CREATE_VM, _OnCreateVm, cCall, 
   Control_Dispatch DESTROY_VM, _OnDestroyVm, cCall, 
   Control_Dispatch CREATE_THREAD, _OnCreateThread, cCall, 
   Control_Dispatch DESTROY_THREAD, _OnDestroyThread, cCall, 
   clc
   ret
EndProc ControlProc
VxD_LOCKED_CODE_ENDS
   END