[vbox-dev] Restore Notification
Ross Kinder
ross at kndr.org
Tue Mar 9 18:21:04 GMT 2010
Hello All,
I'm working on an application built on top of VirtualBox which would
like to be notified when the VM resumes from a snapshot. After a bit
of digging, I found the VMMDEV_EVENT_RESTORED event, but I'm having a
bit of trouble getting it to work with version 3.1.4 on a Windows XP
guest.
Using the VBoxTray application as a guide, I opened a handle to the
guest driver. The code executes without, but it doesn't seem to be
receive VMMDEV_EVENT_RESTORED.
#define VBOX_WITH_HGCM
#define RT_OS_WINDOWS
#define IN_RING3
#include <VBox/VBoxGuest.h>
#include <VBox/VMMDev.h>
// ...
bool RestoreWatcherThread::Main() {
while (true) {
DWORD nbytes;
VBoxGuestFilterMaskInfo mask_args;
mask_args.u32OrMask = VMMDEV_EVENT_RESTORED;
mask_args.u32NotMask = 0;
if (!DeviceIoControl(hDriver, VBOXGUEST_IOCTL_CTL_FILTER_MASK, &mask_args,
sizeof(mask_args), &mask_args, sizeof(mask_args), &nbytes, NULL)) {
return false;
}
VBoxGuestWaitEventInfo wait_args;
memset(&wait_args, 0, sizeof(wait_args));
wait_args.u32TimeoutIn = 5000;
wait_args.u32EventMaskIn = VMMDEV_EVENT_RESTORED;
if (!DeviceIoControl(hDriver, VBOXGUEST_IOCTL_WAITEVENT, &wait_args,
sizeof(wait_args), &wait_args, sizeof(wait_args), &nbytes, NULL)) {
return false;
}
if (wait_args.u32EventFlagsOut & VMMDEV_EVENT_RESTORED) {
if (!SetEvent(event_.get())) {
return false;
}
}
}
}
For testing purposes, I replaced VMMDEV_EVENT_RESTORED with 0xffffffff
and I see VMMDEV_EVENT_HGCM and VMMDEV_EVENT_MOUSE_POSITION_CHANGED
events, so I'm pretty sure my code here is working correctly. Is it
expected that I should be able to receive VMMDEV_EVENT_RESTORED?
I noticed this little tidbit in VMMDev.cpp:VMMDevNotifyGuest:
252 /*
253 * Drop notifications if the VM is not running yet/anymore.
254 */
255 VMSTATE enmVMState = PDMDevHlpVMState(pDevIns);
256 if ( enmVMState != VMSTATE_RUNNING
257 && enmVMState != VMSTATE_RUNNING_LS)
258 return;
and I wonder if this has something to do with it, but I'm not sure.
Any thoughts / guidance would be most welcome.
-Ross
More information about the vbox-dev
mailing list