I'm trying to write a USB function driver for an old USB device that is non-compliant (it's a low-speed device with a bulk endpoint) while not having control of the firmware. I've discovered that on USB 2 ports, the bus driver will successfully enumerate a PDO with the correct VID and PIDs for the device. My function driver can then read the configuration descriptor, modify it to use an interrupt endpoint instead, and select the new configuration (which works just fine). On a USB 3 port however, the bus driver seemingly attempts to parse the configuration descriptor, fails, and creates a PDO with the device ID USB\CONFIGURATION_DESCRIPTOR_VALIDATION_FAILURE. This PDO fails device descriptor request URBs and calls to WdfUsbTargetDeviceCreateWithParameters with STATUS_NO_SUCH_DEVICE, so I suspect my function driver can't convince the bus to re-select a valid configuration descriptor.
Is there any way to get the USB 3 bus driver to not read the configuration descriptors, similarly to how the USB 2 bus driver does it? Or am I going to have to write a bus filter driver to fix up the configuration descriptor requests on the fly?
It looks like you're new here. If you want to get involved, click one of these buttons!
|Upcoming OSR Seminars|
|Writing WDF Drivers||21 Oct 2019||OSR Seminar Space & ONLINE|
|Internals & Software Drivers||18 Nov 2019||Dulles, VA|
|Kernel Debugging||30 Mar 2020||OSR Seminar Space|
|Developing Minifilters||27 Apr 2020||OSR Seminar Space & ONLINE|