Control_Dispatch

include vmm.inc

Control_Dispatch Message, Procedure
Control_Dispatch Message, Procedure, CallType, <Param1, Param2, ...>
 

Dispatches the given control message to the specified procedure.

Message
Identifies the control message. Can be one of the following values:
Value Description
Begin_PM_App A protected-mode application is starting.
Close_VM_Notify A virtual machine is closing.
Create_Thread New thread being created.
Create_VM A virtual machine is being created.
Critical_Reboot_Notify System is restarting (interrupt disabled).
Debug_Query Requests for virtual device's debugging interface.
Destroy_Thread Thread being destroyed.
Destroy_VM A virtual machine is being destroyed.
Device_Init Virtual devices initializing (interrupts enabled).
Device_Reboot_Notify System is restarting (interrupts enabled).
End_PM_App A protected-mode application is ending.
Init_Complete All virtual devices have initialized.
PNP_New_Device New devnode (directed).
Power_Event Power is being suspended or resumed.
Reboot_Processor Virtual device must restart system if it can.
Set_Device_Focus A virtual device is taking the focus.
Sys_Critical_Exit System is terminating (interrupt disabled).
Sys_Critical_Init Virtual devices initializing (interrupts disabled).
Sys_VM_Init System VM is being created.
Sys_Dynamic_Device_Exit Dynamic VxD being unloaded (directed).
Sys_Dynamic_Device_Init Dynamic VxD being loaded (directed).
Sys_VM_Terminate System VM is being destroyed.
System_Exit System is terminating (interrupts enabled).
Terminate_Thread Thread being terminated.
Thread_Init Thread being initialized.
Thread_Not_Executeable Thread has stopped executing.
VM_Critical_Init Virtual machine being created (interrupts disabled).
VM_Init Virtual machine being created (interrupts enabled).
VM_Not_Executable Virtual machine has stopped executing.
VM_Resume Virtual machine execution resumed.
VM_Suspend Virtual machine execution suspended.
VM_Terminate Virtual machine begin destroyed.
W32_DeviceIoControl Win32 DeviceIoControl entry (directed).

Another value defined in vmm.h is also acceptable.

Procedure
Name of the procedure to which to dispatch the message.
CallType
Optional parameter that describes the calling convention employed by the procedure. The default value indicates that the procedure is called directly without any special pre- or post-processing. Otherwise, the value may be cCall, pCall, or sCall, indicating that the procedure should be called with the C, Pascal, or StdCall calling convention, respectively. See below for additional remarks.
Param1, Param2, ...
Optional parameters to be passed to the procedure. Typically, registers are pushed as parameters. See below for additional remarks.

This macro is typically used in conjunction with the Begin_Control_Dispatch and End_Control_Dispatch macros to build a dispatch table. The Control_Dispatch macro can be used without the Begin_Control_Dispatch macro, but becomes the programmer's responsibility to declare a procedure in locked code (VxD_LOCKED_CODE_SEG), and clear the carry flag for any messages not processed.

If you use the CallType variant of this macro, then this macro may not be combined with the Begin_Control_Dispatch and End_Control_Dispatch macros.

See Also

Begin_Control_Dispatch, End_Control_Dispatch