include vmm.inc mov esi, OFFSET32 IdleCallback ; points to callback procedure VMMcall Call_When_Idle jc error ; carry flag set if callback not installed |
The Call_When_Idle service installs a system-idle callback procedure. The system calls this procedure whenever the Windows kernel signals that Windows is idle and all other virtual machines are also idle. Virtual devices typically use this service to perform background operations. For example, the page swap device uses this service to asynchronously write dirty pages to the backing store.
IdleCallback
Points to the callback procedure to install. For more information about the callback procedure, see the following “Comments” section.
The carry flag is clear if the callback procedure is installed. Otherwise, the carry flag is set.
Virtual devices can install any number of idle callback procedures. The system calls each one, in the order installed, until one of the procedures clears the carry flag.
The system calls each callback procedure as follows:
mov ebx, SysVM ; system VM handle
mov ebp, OFFSET32 crs ; points to a Client_Reg_Struc structure
call [IdleCallback]
jc pass_to_next ; if carry flag set, call the next idle callback
The SysVM parameter specifies a handle identifying the system virtual machine and the csr parameter points to a Client_Reg_Struc structure containing the registers of the system virtual machine.
The callback procedure can carry out any operation and can modify EAX, EBX, ECX, EDX, ESI, EDI, and Flags. If the operation takes a significant amount of time, the procedure should clear the carry flag before returning to prevent other callbacks from being called. Otherwise, the procedure should set the carry flag and return.
Flags