From: Johannes Anderwald Date: Sat, 8 Dec 2012 19:52:10 +0000 (+0000) Subject: [USBCCGP] X-Git-Tag: backups/ros-csrss@60644~107^2~38 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=86da1da11d3bef51783c1993ff4c7bef350d2fa9;ds=sidebyside [USBCCGP] - Add debugging function to analyze configuration descriptor - Remove assert CORE-6574 svn path=/trunk/; revision=57826 --- diff --git a/reactos/drivers/usb/usbccgp/descriptor.c b/reactos/drivers/usb/usbccgp/descriptor.c index 5841dd31d92..d35c7ed4a6c 100644 --- a/reactos/drivers/usb/usbccgp/descriptor.c +++ b/reactos/drivers/usb/usbccgp/descriptor.c @@ -268,6 +268,41 @@ AllocateInterfaceDescriptorsArray( return STATUS_SUCCESS; } +VOID +DumpFullConfigurationDescriptor( + IN PFDO_DEVICE_EXTENSION FDODeviceExtension, + IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor) +{ + PUSB_COMMON_DESCRIPTOR Descriptor; + + Descriptor = (PUSB_COMMON_DESCRIPTOR)ConfigurationDescriptor; + + DbgPrint("Bogus ConfigurationDescriptor Found\n"); + DbgPrint("InterfaceCount %x\n", ConfigurationDescriptor->bNumInterfaces); + + do + { + if (((ULONG_PTR)Descriptor + Descriptor->bLength) <= ((ULONG_PTR)ConfigurationDescriptor + ConfigurationDescriptor->wTotalLength)) + break; + + DbgPrint("Descriptor Type %x Length %lu Offset %lu\n", Descriptor->bDescriptorType, Descriptor->bLength, ((ULONG_PTR)Descriptor - (ULONG_PTR)ConfigurationDescriptor)); + + // check for invalid descriptors + if (!Descriptor->bLength) + { + DbgPrint("Bogus Descriptor!!!\n"); + break; + } + + // advance to next descriptor + Descriptor = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)Descriptor + Descriptor->bLength); + + }while(TRUE); + + +} + + NTSTATUS NTAPI USBCCGP_ScanConfigurationDescriptor( @@ -309,7 +344,6 @@ USBCCGP_ScanConfigurationDescriptor( // parse configuration descriptor // InterfaceDescriptor = USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, ConfigurationDescriptor, InterfaceIndex, -1, -1, -1, -1); - ASSERT(InterfaceDescriptor); if (InterfaceDescriptor) { // @@ -319,6 +353,17 @@ USBCCGP_ScanConfigurationDescriptor( FDODeviceExtension->InterfaceListCount++; CurrentPosition = (PVOID)((ULONG_PTR)InterfaceDescriptor + InterfaceDescriptor->bLength); } + else + { + DumpFullConfigurationDescriptor(FDODeviceExtension, ConfigurationDescriptor); + + // + // see issue + // CORE-6574 Test 3 (USB Web Cam) + // + if (FDODeviceExtension->DeviceDescriptor && FDODeviceExtension->DeviceDescriptor->idVendor == 0x0458 && FDODeviceExtension->DeviceDescriptor->idProduct == 0x705f) + ASSERT(FALSE); + } // // move to next interface