Index: trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp
===================================================================
--- trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp	(revision 37037)
+++ trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp	(revision 37038)
@@ -667,7 +667,32 @@
                             for (ULONG k = 0; k < pDevRelations->Count; ++k)
                             {
-                                Log(("Found existing USB PDO %p\n", pDevRelations->Objects[k]));
+                                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));
                                 VBOXUSBFLT_LOCK_ACQUIRE();
-                                PVBOXUSBFLT_DEVICE pDevice = vboxUsbFltDevGetLocked(pDevRelations->Objects[k]);
+                                PVBOXUSBFLT_DEVICE pDevice = vboxUsbFltDevGetLocked(pDevObj);
                                 if (pDevice)
                                 {
Index: trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp
===================================================================
--- trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp	(revision 37037)
+++ trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp	(revision 37038)
@@ -647,10 +647,18 @@
 static NTSTATUS vboxUsbMonHookInstall()
 {
+#ifdef VBOXUSBMON_DBG_NO_PNPHOOK
+    return STATUS_SUCCESS;
+#else
     return VBoxUsbHookInstall(&g_VBoxUsbMonGlobals.UsbHubPnPHook.Hook);
+#endif
 }
 
 static NTSTATUS vboxUsbMonHookUninstall()
 {
+#ifdef VBOXUSBMON_DBG_NO_PNPHOOK
+    return STATUS_SUCCESS;
+#else
     return VBoxUsbHookUninstall(&g_VBoxUsbMonGlobals.UsbHubPnPHook.Hook);
+#endif
 }
 
@@ -850,12 +858,23 @@
 static int VBoxUsbMonFltAdd(PVBOXUSBMONCTX pContext, PUSBFILTER pFilter, uintptr_t *pId)
 {
+#ifdef VBOXUSBMON_DBG_NO_FILTERS
+    static uintptr_t idDummy = 1;
+    *pId = idDummy;
+    ++idDummy;
+    return VINF_SUCCESS;
+#else
     int rc = VBoxUsbFltAdd(&pContext->FltCtx, pFilter, pId);
     return rc;
+#endif
 }
 
 static int VBoxUsbMonFltRemove(PVBOXUSBMONCTX pContext, uintptr_t uId)
 {
+#ifdef VBOXUSBMON_DBG_NO_FILTERS
+    return VINF_SUCCESS;
+#else
     int rc = VBoxUsbFltRemove(&pContext->FltCtx, uId);
     return rc;
+#endif
 }
 
Index: trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h
===================================================================
--- trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h	(revision 37037)
+++ trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h	(revision 37038)
@@ -23,4 +23,11 @@
 #include <iprt/asm.h>
 #include <VBox/log.h>
+
+#ifdef DEBUG
+/* disables filters */
+//#define VBOXUSBMON_DBG_NO_FILTERS
+/* disables pnp hooking */
+//#define VBOXUSBMON_DBG_NO_PNPHOOK
+#endif
 
 #include "../cmn/VBoxDrvTool.h"
