include vmm.inc GetDeviceServiceOrdinal eax, Service mov esi, OFFSET32 HookProc ; points to the hook procedure to install VMMcall Hook_Device_Service jc not_installed ; carry flag set if error IF WIN31COMPAT mov [Real_Proc], esi ENDIF
Allows one virtual device to monitor or replace the services of another virtual device, or of the VMM itself. Uses ESI, Flags.
Service
Virtual device or VMM service to hook.
HookProc
Address of the hook procedure to install. The hook procedure is called with the same parameters as the service specified by the Service parameter.
When a dynamically-loaded VxD is unloaded, it must remove any service hook procedures it has installed by using the Unhook_Device_Service service.
Virtual devices that use this service must use extreme care to preserve the full functionality of the virtual device whose services are monitored or replaced.
More than one virtual device can hook a device service. The last hook installed is the first one called.
The hook procedure must save and restore registers that are not modified by the hooked service. Also, if flags are a passed as an entry or exit parameter, the hook procedure must also preserve the flags.
If the hooked service uses the C calling convention, the hook procedure must copy the entire parameter stack frame before attempting to call the hooked service. If the hooked service uses a register-based calling convention, the hook procedure must preserve all registers, even registers that are not currently used as input or output parameters.
The hook procedure must have been declared with the HOOK_PROC attribute to the BeginProc macro.
See also Unhook_Device_Service