Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp	(revision 37041)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp	(revision 37042)
@@ -668,27 +668,4 @@
                             {
                                 PDEVICE_OBJECT pDevObj = pDevRelations->Objects[k];
-                                if (!pDevObj->DriverObject
-                                        || !pDevObj->DriverObject->DriverName.Buffer
-                                        || !pDevObj->DriverObject->DriverName.Length)
-                                {
-                                    AssertFailed();
-                                    continue;
-                                }
-
-                                bool fIsHub = false;
-                                for (int z = 0; z < RT_ELEMENTS(lpszStandardControllerName); ++z)
-                                {
-                                    if (!RtlCompareUnicodeString(&szStandardControllerName[z], &pDevObj->DriverObject->DriverName, TRUE /* case insensitive */))
-                                    {
-                                        fIsHub = true;
-                                        break;
-                                    }
-                                }
-
-                                if (fIsHub)
-                                {
-                                    Log(("Found sub-hub, PDO 0x%p\n", pDevObj));
-                                    continue;
-                                }
 
                                 Log(("Found existing USB PDO 0x%p\n", pDevObj));
@@ -706,5 +683,5 @@
                                     else
                                     {
-                                        ObDereferenceObject(pDevRelations->Objects[k]);
+                                        ObDereferenceObject(pDevObj);
                                     }
 
@@ -719,5 +696,5 @@
 
                                 VBOXUSBFLT_DEVICE Device;
-                                Status = vboxUsbFltDevPopulate(&Device, pDevRelations->Objects[k] /*, FALSE /* only need filter properties */);
+                                Status = vboxUsbFltDevPopulate(&Device, pDevObj /*, FALSE /* only need filter properties */);
                                 if (NT_SUCCESS(Status))
                                 {
@@ -733,5 +710,5 @@
                                     {
                                         /* this device should not be filtered, and it's not */
-                                        ObDereferenceObject(pDevRelations->Objects[k]);
+                                        ObDereferenceObject(pDevObj);
                                         pDevRelations->Objects[k] = NULL;
                                         --cReplugPdos;
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp	(revision 37041)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp	(revision 37042)
@@ -164,2 +164,20 @@
 }
 
+#define PVBOXUSBHOOK_REQUEST_FROM_LE(_pLe) ( (PVBOXUSBHOOK_REQUEST)( ((uint8_t*)(_pLe)) - RT_OFFSETOF(VBOXUSBHOOK_REQUEST, ListEntry) ) )
+
+VOID VBoxUsbHookVerifyCompletion(PVBOXUSBHOOK_ENTRY pHook, PVBOXUSBHOOK_REQUEST pRequest, PIRP pIrp)
+{
+    KIRQL oldIrql;
+    KeAcquireSpinLock(&pHook->Lock, &oldIrql);
+    for (PLIST_ENTRY pLe = pHook->RequestList.Flink; pLe != &pHook->RequestList; pLe = pLe->Flink)
+    {
+        PVBOXUSBHOOK_REQUEST pCur = PVBOXUSBHOOK_REQUEST_FROM_LE(pLe);
+        if (pCur != pRequest)
+            continue;
+        if (pCur->pIrp != pIrp)
+            continue;
+        AssertFailed();
+    }
+    KeReleaseSpinLock(&pHook->Lock, oldIrql);
+
+}
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h	(revision 37041)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h	(revision 37042)
@@ -70,4 +70,5 @@
 NTSTATUS VBoxUsbHookRequestMoreProcessingRequired(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVBOXUSBHOOK_REQUEST pRequest);
 NTSTATUS VBoxUsbHookRequestComplete(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVBOXUSBHOOK_REQUEST pRequest);
+VOID VBoxUsbHookVerifyCompletion(PVBOXUSBHOOK_ENTRY pHook, PVBOXUSBHOOK_REQUEST pRequest, PIRP pIrp);
 
 #endif /* #ifndef ___VBoxUsbHook_h___ */
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp	(revision 37041)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp	(revision 37042)
@@ -625,5 +625,12 @@
     Log(("==>PnP: Mn(%s), PDO(0x%p), IRP(0x%p), Status(0x%x)\n", vboxUsbDbgStrPnPMn(IoGetCurrentIrpStackLocation(pIrp)->MinorFunction), pDevObj, pIrp, pIrp->IoStatus.Status));
 
-    return VBoxUsbHookRequestPassDownHookCompletion(&g_VBoxUsbMonGlobals.UsbHubPnPHook.Hook, pDevObj, pIrp, VBoxUsbPnPCompletion, &pCompletion->Rq);
+    NTSTATUS Status = VBoxUsbHookRequestPassDownHookCompletion(&g_VBoxUsbMonGlobals.UsbHubPnPHook.Hook, pDevObj, pIrp, VBoxUsbPnPCompletion, &pCompletion->Rq);
+#ifdef DEBUG
+    if (Status != STATUS_PENDING)
+    {
+        VBoxUsbHookVerifyCompletion(&g_VBoxUsbMonGlobals.UsbHubPnPHook.Hook, &pCompletion->Rq, pIrp);
+    }
+#endif
+    return Status;
 }
 
