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,
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?