I’m hitting an assertion failure in USBPORT, and would appreciate some info
on why.
*** Assertion failed: endpointDescriptor->bDescriptorType ==
USB_ENDPOINT_DESCRIPTOR_TYPE
*** Source File: d:\xpsprtm\drivers\wdm\usb\hcd\usbport\config.c, line
1483
ChildEBP RetAddr
f78ca30c 805285ba nt!DbgBreakPoint
f78ca5fc 805285fc nt!RtlAssert2+0x104
f78ca618 bace6d1f nt!RtlAssert+0x18
f78ca630 bacf5438 USBPORT!USBPORT_AssertFailure+0x17
f78ca654 bacf5758 USBPORT!USBPORT_InternalGetInterfaceLength+0x9c
f78ca674 baceae1d USBPORT!USBPORT_InternalParseConfigurationDescriptor+0xe8
f78ca694 bacf71eb USBPORT!USBPORT_InitializeInterfaceInformation+0x29
f78ca6d4 bacd0a41 USBPORT!USBPORT_SelectConfiguration+0x38f
f78ca708 bace218d USBPORT!USBPORT_ProcessURB+0x715
f78ca72c bac8e25f USBPORT!USBPORT_PdoInternalDeviceControlIrp+0x189
f78ca754 804eddf9 USBPORT!USBPORT_Dispatch+0x227
f78ca764 8064b5a8 nt!IopfCallDriver+0x31
f78ca788 f6f7e12e nt!IovCallDriver+0xa0
f78ca7a4 f6f7f502 usbhub!USBH_PdoUrbFilter+0x298
f78ca7c8 f6f78986 usbhub!USBH_PdoDispatch+0x2bc
f78ca7d8 804eddf9 usbhub!USBH_HubDispatch+0x48
f78ca7e8 8064b5a8 nt!IopfCallDriver+0x31
f78ca80c 80655fd6 nt!IovCallDriver+0xa0
f78ca820 804eddf9 nt!ViDriverDispatchGeneric+0x2a
f78ca830 8064b5a8 nt!IopfCallDriver+0x31
f78ca854 b822ded3 nt!IovCallDriver+0xa0
f78ca890 b822a74e XXX!UsbSubmitUrbSynchronous+0x163
f78ca90c b821f93b XXX!ReadAndSelectConfiguration+0x28e
Apparently this is happening because of the contents of the configuration
descriptor provided to the USB stack. The device has 1 configuration, which
has 2 interfaces. The second interface has 1 endpoint, but also includes
another descriptor before the endpoint descriptor.
From poking around in USBPORT_InternalGetInterfaceLength, it appears to walk
the interface descriptor chain, and gets grumpy when it finds a descriptor
whose type is not USB_DESCRIPTOR_ENDPOINT.
So, is USBPORT being too picky? Or is this other descriptor illegal, at
least at this point in the chain of descriptors?
Any help is appreciated.
– arlie