Ticket #7034 (closed defect: fixed)
Device is busy and blocked from host, even if not set up to be captured (solution included)
|Reported by:||cpg||Owned by:|
|Version:||VirtualBox 3.2.4||Keywords:||usb busy blocked|
Tested on host: Windows (XP - 7, both 32/64)
Plugging in a USB device while VB is started (not necessarily running a VM), causes the device to stall, even if VB is not set up to capture it. If the device was plugged in already, it keeps working after starting VB, but when trying to capture it, the device stalls, showing the error that the device is "busy with a previous request" and it stays in that state until VB is closed.
I have encountered this problem with multiple versions, but i finally decided to find the cause (with the latest version). In both VBoxUsbMon.sys and VBoxUsb.sys, Usb Request Blocks (URBs) are sent to get the vendor/product id and device strings while the device is initializing. However, the available languages for the strings aren't retrieved from the device first; instead language id 0 is used. Most devices seem to accept this, but my phone does not. I have verified this by overwriting the language field. The device could then be switched between my host and guest without issue. I imagine this could affect other host platforms (and USB devices) as well, but was unable to verify this.
The solution would be to first retrieve USB string index 0 to determine the available languages and set the language field to a supported value for any other indices.