

				SYSTEM KOMUNIKATOW w VxD
				   Writeln by [CoxoC]

Dialog miedzy VxDkiem a systemem odbywa sie za pomoca systemu komunikatow. Kazdy VxD 
posiada procedure ktora kontroluje kominukaty wysylane przez system i wywoluje
odpowiednie czesci kodu. A oto czesc kodu :


VXD_Locked_Code_Seg	;Procedura ta musi znajdowac sie w tym segmencie !


BeginProc   PIERWSZY_Control

      Control_Dispatch SYS_DYNAMIC_DEVICE_INIT, PIERWSZY_Device_Init
      Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, PIERWSZY_Device_Exit
      Control_Dispatch W32_DEVICEIOCONTROL,     PIERWSZY_ioctl

      clc
      ret

SWAPPAGE_Control  ENDP


VXD_LOCKED_CODE_ENDS


... wiec Control_Dispatch jest to makro,ktore porownuje komunikat wyslany przez system
z komunikatem podanym jako parametr pierwszy i wrazie pozytywnego wyniku wykonuje 
CALLa do odpowiedniej procedurki podanej w parametrze drugim ... 

Z tej czesci kodu wynika ze VxD jest VxDkiem dynamicznym tzn mozna go zaladowac,w kazdym
momencie i usunac.

A jakie sa z tego korzysci ?? ogromne . System wysyla do VxDka roznorakie komunikaty.

Oto lista skopiowana z VMM.INC :

SYS_CRITICAL_INIT
DEVICE_INIT
INIT_COMPLETE
SYS_VM_INIT
SYS_VM_TERMINATE
SYSTEM_EXIT
SYS_CRITICAL_EXIT
CREATE_VM
VM_CRITICAL_INIT
VM_INIT
VM_TERMINATE
VM_NOT_EXECUTEABLE
DESTROY_VM
VM_SUSPEND
VM_RESUME
SET_DEVICE_FOCUS
BEGIN_MESSAGE_MODE
END_MESSAGE_MODE
REBOOT_PROCESSOR
QUERY_DESTROY
DEBUG_QUERY
BEGIN_PM_APP
END_PM_APP
DEVICE_REBOOT_NOTIFY
CRIT_REBOOT_NOTIFY
CLOSE_VM_NOTIFY
POWER_EVENT
SYS_DYNAMIC_DEVICE_INIT
SYS_DYNAMIC_DEVICE_EXIT
CREATE_THREAD
THREAD_INIT
TERMINATE_THREAD
THREAD_Not_Executeable
DESTROY_THREAD
PNP_NEW_DEVNODE
W32_DEVICEIOCONTROL
SYS_VM_TERMINATE2
SYSTEM_EXIT2
SYS_CRITICAL_EXIT2
VM_TERMINATE2
VM_NOT_EXECUTEABLE2
DESTROY_VM2
VM_SUSPEND2
END_MESSAGE_MODE2
END_PM_APP2
DEVICE_REBOOT_NOTIFY2
CRIT_REBOOT_NOTIFY2
CLOSE_VM_NOTIFY2
GET_CONTENTION_HANDLER
KERNEL32_INITIALIZED
KERNEL32_SHUTDOWN
CREATE_PROCESS
DESTROY_PROCESS
SYS_DYNAMIC_DEVICE_REINIT
SYS_POWER_DOWN
MAX_SYSTEM_CONTROL

Hmm wiec co nam to daje np. gdy chcemy wiedziec jakie procesy sa uruchamiane przez system
musimy przejac CREATE_PROCESS :

      Control_Dispatch CREATE_PROCESS, PIERWSZY_Create_proces

