Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp	(revision 60497)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp	(revision 60498)
@@ -897,4 +897,9 @@
 static HANDLE vboxUsbRtGetPipeHandle(PVBOXUSBDEV_EXT pDevExt, uint32_t EndPointAddress)
 {
+    if (EndPointAddress == 0)
+    {
+        return pDevExt->Rt.hPipe0;
+    }
+
     for (ULONG i = 0; i < pDevExt->Rt.uNumInterfaces; i++)
     {
@@ -1083,4 +1088,16 @@
                  */
                 pUrbInfo->len += sizeof (pUrb->UrbControlTransfer.SetupPacket);
+
+                /* If a control URB was successfully completed on the default control
+                 * pipe, stash away the handle. When submitting the URB, we don't need 
+                 * to know (and initially don't have) the handle. If we want to abort 
+                 * the default control pipe, we *have* to have a handle. This is how we 
+                 * find out what the handle is. 
+                 */
+                if (!pUrbInfo->ep && (pDevExt->Rt.hPipe0 == NULL))
+                {
+                    pDevExt->Rt.hPipe0 = pUrb->UrbControlTransfer.PipeHandle;
+                }
+
                 break;
             case USBSUP_TRANSFER_TYPE_ISOC:
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h	(revision 60497)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h	(revision 60498)
@@ -36,4 +36,5 @@
     UNICODE_STRING                  IfName;
 
+    HANDLE                          hPipe0;
     HANDLE                          hConfiguration;
     uint32_t                        uConfigValue;
