Index: /trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMF.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMF.h	(revision 38930)
+++ /trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMF.h	(revision 38931)
@@ -58,4 +58,6 @@
 
     IO_REMOVE_LOCK RemoveLock;
+    
+    DEVICE_POWER_STATE DeviceState;   /* current power state of the device */
 } VBOXMOUSE_DEVEXT, *PVBOXMOUSE_DEVEXT;
 
@@ -72,4 +74,5 @@
 NTSTATUS VBoxIrpInternalIOCTL(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 NTSTATUS VBoxIrpPnP(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
+NTSTATUS VBoxIrpPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
 /* Internal functions */
Index: /trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMFDriver.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMFDriver.cpp	(revision 38930)
+++ /trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMFDriver.cpp	(revision 38931)
@@ -50,4 +50,5 @@
     DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = VBoxIrpInternalIOCTL;
     DriverObject->MajorFunction[IRP_MJ_PNP] = VBoxIrpPnP;
+	DriverObject->MajorFunction[IRP_MJ_POWER] = VBoxIrpPower;
 
     NTSTATUS tmpStatus = VBoxNewProtInit();
@@ -121,4 +122,5 @@
     pDevExt->pdoSelf   = pDO;
     pDevExt->pdoParent = pDOParent;
+	pDevExt->DeviceState = PowerDeviceD0;
 
     VBoxDeviceAdded(pDevExt);
@@ -238,5 +240,5 @@
     }
 
-    if (!NT_SUCCESS(rc))
+    if (!NT_SUCCESS(rc) && rc != STATUS_NOT_SUPPORTED)
     {
         WARN(("rc=%#x", rc));
@@ -246,2 +248,35 @@
     return rc;
 }
+
+NTSTATUS VBoxIrpPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
+{
+    PIO_STACK_LOCATION  irpSp;    
+	PVBOXMOUSE_DEVEXT   devExt;
+    POWER_STATE         powerState;
+    POWER_STATE_TYPE    powerType;
+
+    PAGED_CODE();
+
+    devExt = (PVBOXMOUSE_DEVEXT) DeviceObject->DeviceExtension;
+    irpSp = IoGetCurrentIrpStackLocation(Irp);
+
+    powerType = irpSp->Parameters.Power.Type;
+    powerState = irpSp->Parameters.Power.State;
+
+    switch (irpSp->MinorFunction) {
+    case IRP_MN_SET_POWER:
+        if (powerType  == DevicePowerState) {
+            devExt->DeviceState = powerState.DeviceState;
+        }
+
+    case IRP_MN_QUERY_POWER:
+    case IRP_MN_WAIT_WAKE:
+    case IRP_MN_POWER_SEQUENCE:
+    default:
+        break;
+    }
+
+    PoStartNextPowerIrp(Irp);
+    IoSkipCurrentIrpStackLocation(Irp);
+    return PoCallDriver(devExt->pdoParent, Irp);
+}
