Invalid Configuration Descriptor prevents USB device from being recognized

I have a USB device which worked perfectly under Windows 7, but is not recognized under Windows 10. Sadly, I won't get any firmware or driver update from the manufacturer, so I have to get the current version of the device and the driver working.

The device initialization fails at the point where the configuration descriptor is validated. Here is the data as sent by the device:

0x09, 0x02, 0x28, 0x00, 0x01, 0x01, 0x00, 0x60, 0x00,

0x09, 0x04, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,

0x07, 0x05, 0x82, 0x00, 0x40, 0x00, 0x00,

0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00,

0x07, 0x05, 0x88, 0x01, 0x00, 0x02, 0x01,

0x04

Analyzing this, this describes an interface with 3 endpoints (I formatted the data accordingly). The only byte I cannot make sense of is the last one (0x04). I like to know why the validation of this data fails. Is it the last byte, which results in a non-compliant length of the entire structure? I noticed that the function which is presumably responsible for validating (USBD_ValidateConfigurationDescriptor) has a parameter defining how deep the check should be. 1 is the lowest level and 3 the most stringent one. Has the level of checking changed between Windows 7 and Windows 10? If this is the case, is there maybe a registry entry, which can change the behavior of this function or disable the check for certain devices?

In summary, how do I overcome the hurdle of the configuration descriptor validation and get this device to work?

 

Question Info


Last updated July 20, 2019 Views 3,568 Applies to:

Hi,

As per the description, I understand that you are unable to use the USB device that you possess. This can arise due to several reasons, to narrow down the cause, I would like you to provide the information stated below

1. Have you tried plugging the device to different ports or another Windows 10 device?

2. What is the manufacturer of the device? Is it a USB stick or an external drive?

3. Have you check the error it displays under Device Manager?

4. Do you get any error when the device fails to launch/recognize?

For now, I suggest that you follow the methods below which will help us identify the root cause of the issue.

Method 1: Device Manager

1. Right click on the Start Menu and click on Device Manager

2. Locate your device and double click to expand the same.

3. Right click on the device, and select Properties. Under General tab check the status of the driver and report the same.

Method 2: Visit the device manufacturer website and download the latest available driver update. Once done install it in compatibility mode and check. To Learn how to install in Compatibility, refer to the article provided below

http://answers.microsoft.com/en-us/insider/wiki/insider_wintp-insider_devices/how-to-install-and-update-drivers-in-windows-10/a97bbbd1-9973-4d66-9a5b-291300006293 

Hope this helps

Did this solve your problem?

Sorry this didn't help.

Great! Thanks for marking this as the answer.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this response?

Thanks for your feedback.

Hello Vanessa,

Thanks for your reply.

However, with the troubleshooting I am already far beyond this point. As I stated in the original post, I won't get any support from the manufacturer. I am using the latest driver available.

I did diagnostics with usbtrace, and using this tool I could track down the issue to the enumeration phase of the device. As I stated before, the validation of the Configuration Descriptor fails. Windows then requests the Configuration Descriptor again, fails again, tries to enumerate again, fails again, until it stops. I am not absolutely sure how Windows enumerates the USB devices, but the error occurs before a driver is ever installed or loaded. Thus updating the driver won't do any good, since it is never loaded anyways.

All these are the reasons why I specifically asked the question how I can prevent the Configuration Descriptor validation to fail. Read my initial post, which contains the data of the Configuration Descriptor. There must be a difference between Windows 7 and Windows 10 how the validation is performed, and this is the source of the issue.

On a side note: This device also never worked with Windows 8.

Alex

Did this solve your problem?

Sorry this didn't help.

Great! Thanks for marking this as the answer.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this response?

Thanks for your feedback.

Hi,

To help you proceed further, I would require you to provide the information posted in the above post as well as the status of the issue after performing the methods outlined. This will help us determine the root cause and provide the appropriate steps to help you.

Hope this helps

Did this solve your problem?

Sorry this didn't help.

Great! Thanks for marking this as the answer.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this response?

Thanks for your feedback.

Hello,

1. Please read and understand my posts before you reply with a text block.

2. VID: 0x0547, PID: 0x1002

3. The device manager shows: Code 43, Unknown USB Device (Invalid Configuration Descriptor), The USB device returned an invalid Configuration Descriptor.

4. No driver was installed or loaded, so trying to get a new device driver is completely worthless and waste of time.

To repeat myself, I did the diagnostics already and found that the validation of the Configuration Descriptor fails when connecting this device to a Windows 10 PC. With Windows 7 it succeeds. So it is logical that there is a difference between Windows 10 and Windows 7 how the Configuration Descriptor gets validated. Once this issue is resolved I am sure that the device will be recognized and the device driver will be installed and loaded. Only the hurdle of the validation of the Configuration Descriptor has to be overcome.

Therefore I am now asking a couple of very specific questions. Please answer them. If you cannot answer them yourself, then please get the answer from someone who has more knowledge with these issues.

1. What is the difference between Windows 10 and Windows 7 when it comes to the validation of the Configuration Descriptor?

2. Is there a setting in the Registry, which affects how the Configuration Descriptor gets validated?

3. What steps can be taken, so a Configuration Descriptor, which may not be not 100% compliant, still gets validated?

4. What is not compliant in the Configuration Descriptor as sent by the device? Here is the data again:

0x09, 0x02, 0x28, 0x00, 0x01, 0x01, 0x00, 0x60, 0x00,

0x09, 0x04, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,

0x07, 0x05, 0x82, 0x00, 0x40, 0x00, 0x00,

0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00,

0x07, 0x05, 0x88, 0x01, 0x00, 0x02, 0x01,

0x04

PLEASE DO NOT REPLY WITH A TEXT BLOCK. THAT IS NEVER HELPFUL. PLEASE GET THE ANSWERS TO MY SPECIFIC QUESTIONS BEFORE YOU REPLY. THANKS!

On a side note: I tried to search the registry for an entry related to the Configuration Descriptor. However, the registry editor crashed reproducible on several Windows 10 computers when I did that (Hey Microsoft, ****???)

1 person was helped by this reply

·

Did this solve your problem?

Sorry this didn't help.

Great! Thanks for marking this as the answer.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this response?

Thanks for your feedback.

Update:

Meanwhile, I got the device working. It was indeed the Configuration Descriptor. The third byte of the data should have been 0x27 instead of 0x28, shrinking the size of the structure from 40 to 39 bytes. Evidently this was checked when the device is enumerated. Fortunately, in the device there was a USB interface chip which uses an EEPROM for storing the configuration data. I was able to read it and I found the sequence of the Device Descriptor. Now it was only a matter of changing one byte, reinstalling the EEPROM, and then the device was correctly enumerated.

I like to stress that I got lucky, and what I did is certainly beyond an average user. It would have been so much easier if there was a setting in the registry for this kind of problem. After all, before I upgraded the PC from Windows 7 to Windows 10, Microsoft claimed that everything is compatible, so they are obligated to fulfill their promises. It is truly pathetic that I did not get any useful reply from Microsoft.

13 people were helped by this reply

·

Did this solve your problem?

Sorry this didn't help.

Great! Thanks for marking this as the answer.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this response?

Thanks for your feedback.