Why does my USB device work on Windows 8.0 but fail on Windows 8.1 with code 43?

This post has been republished via RSS; it originally appeared at: Microsoft USB Blog articles.

First published on MSDN on Nov 25, 2013

Authored by Martin Borve [MSFT]


Updated 1/27/2014 by Philip Ries to show how to use Message Analyzer and its latest parsers to more easily diagnose the problem.


Updated 7/10/2014 by Vivek Gupta to include the Workaround information.


A few USB devices when connected to a port of an Enhanced Host Controller (EHCI) might not enumerate on Windows 8.1 but work on Windows 8. In Windows 8.1, the failure is reported as error code 43 in Device Manager. One of the reasons is that the device reports itself as supporting a USB version greater than 2.00, but does not provide the required BOS descriptor.


As per the official USB specification, a USB device with version greater than 2.00 must provide a BOS descriptor.


In Windows 8, the USB 2.0 driver stack does not validate that requirement. As a result, a device with version greater than 2.00 and without a BOS descriptor, enumerates successfully when connected to an EHCI controller.


In Windows 8.1, the driver stack has been updated and enumeration fails for such devices.


Note: The USB 3.0 eXtensible Host Controller (xHCI) driver in Windows 8 and 8.1 validates that requirement.


Devices where this issue is worked around by Windows Update :


2/11/2014 - KB 2917929 - Sony phones


We are investigating a possible workaround for other devices with that problem. If you see code 43 for your device, report the device in the comments section of this post. But first, verify that the problem is due to a missing BOS descriptor by capturing and analyzing a USB ETW trace. Please also share your trace file with us.


How to Verify Your Device Is Affected By This Issue


First, get ready to use Microsoft Message Analyzer with the following one-time steps:


1. Download Message Analyzer and install it.


2. After installing Message Analyzer, log out and then log back in to enable its tracing capabilities.


3. Launch Message Analyzer.


4. Select “Update items”.



5. Click Downloads in the upper right, and update your “Devices and Log File” parser to version 1.001 (or the latest).


Alternatively, click “Sync All Displayed Items” to install all the downloads in the list (that are not already installed) and automatically receive updates. Note that new items released in the future will still require manual action to sync.



6. Close Message Analyzer for the parser update to take effect.


Diagnosis steps


To diagnose the BOS descriptor issue:


1. Start Message Analyzer.


2. Go to the File -> Capture / Trace page.



3. Scroll down and select USB 2.


4. Unplug the device you are troubleshooting (if it’s plugged in).


5. Click Start.


6. Plug in the device to a USB 2 port.


7. Wait for the device to appear in Windows.


8. Click Stop.



9. Add column UsbDevice (Home -> View Options -> Column Chooser, search for “UsbDevice” and double-click it).



10. Right-click the UsbDevice column and select Group.


11. Paste in the following filter lines to the Filter location in the ribbon (still in the Home tab). Click Apply Filter.



*GetDeviceDescriptor.DeviceDescriptor.bcdUSB > 0x0200


OR


(*GetBosDescriptor && #DiagnosisTypes)



Note: #DiagnosisTypes by itself simply matches messages that contain an error of any kind.



12. Do both a “Get Full Device Descriptor” message and a “Get BOS Descriptor” message show up under the same device, as shown above?


If yes—you have successfully diagnosed that your device has a BOS descriptor issue that Windows 8.1 does not tolerate.


If no—STOP and:


- If you see “Parser Error” in the Summary column: make sure you perform all of the “parser update” steps earlier in this blog post and retry.


- Otherwise, the issue is something else.



13. If you did find both kinds of events (Device and BOS Descriptor) grouped together, we would like to know about your device. Please save the trace to SkyDrive or your service of choice, and share it with Microsoft as a link in the comments or in our contact form . If you use the contact form, be sure to mention this is a BOS descriptor issue. Also, you can use the workaround described in the next section to solve the issue. Please note that please do still send us the trace or the VID PID information of the device.


Workaround


(Note that this workaround was added in the Windows update that was released on  07/08/2014. If you are applying this update within few weeks of this date, you will need to download and manually install the update from www.microsoft.com/.../details.aspx .)


To apply the workaround for a specific device, add a REG_DWORD value named SkipBOSDescriptorQuery that has a value of 1 to the following registry subkey:


HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\usbflags\vvvvpppprrrr


(where vvvv is the device's Vendor ID, pppp is the device's Product ID, and rrrr is the device's Revision number. You can get the VID/PID/REV numbers from the device manager's details tab. This number is encoded in the HardwareIDs of the device)


1. Click Start, click Run, type regedit in the Open box, and then click OK .


2. Locate and then click the following subkey in the registry:


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags


3. On the Edit menu, point to New, and then click Key.


4.Type the name of the new key in the following form:


vvvvpppprrrr


where


vvvv is a 4-digit hexadecimal number that identifies the vendor (idDevice from the USB Deviceescriptor),


pppp is a 4-digit hexadecimal number that identifies the product (idVendor from the USB Device Descriptor)


rrrr is a 4-digit binary-coded decimal number that contains the revision number of the device


(bcdDevice from the USB Device Descriptor).


5. On the Edit menu, point to New, and then click DWORD (32-bit) Value.


6. Type SkipBOSDescriptorQuery for the name of the DWORD Value, and then press ENTER.


7. Right-click SkipBOSDescriptorQuery, and then click Modify.


8. In the Value data box, type 1 , and then click OK.


9. Exit Registry Editor.


10. Unplug and re-plug the device for the workaround to take effect.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.