From 9d7751a2f6a2cd62a96df7ffe87d3a5207823f0e Mon Sep 17 00:00:00 2001 From: Michael Martin Date: Thu, 12 May 2011 23:31:32 +0000 Subject: [PATCH] [USBHUB_NEW] - Only get the string descriptors if they are available. Fixes crash when using usb mouse and keyboards in windows. svn path=/branches/usb-bringup/; revision=51688 --- drivers/usb/usbhub_new/fdo.c | 54 ++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/drivers/usb/usbhub_new/fdo.c b/drivers/usb/usbhub_new/fdo.c index f4f9faa6eb6..1ccaa5adb7e 100644 --- a/drivers/usb/usbhub_new/fdo.c +++ b/drivers/usb/usbhub_new/fdo.c @@ -914,38 +914,44 @@ CreateDeviceIds( // // - // Get the product string + // Get the product string if obe provided // - Status = GetUsbStringDescriptor(UsbChildDeviceObject, - UsbChildExtension->DeviceDesc.iProduct, - 0, - (PVOID*)&UsbChildExtension->usTextDescription.Buffer, - &UsbChildExtension->usTextDescription.Length); - if (!NT_SUCCESS(Status)) + if (UsbChildExtension->DeviceDesc.iProduct) { - DPRINT1("USBHUB: GetUsbStringDescriptor failed with status %x\n", Status); - goto Cleanup; + Status = GetUsbStringDescriptor(UsbChildDeviceObject, + UsbChildExtension->DeviceDesc.iProduct, + 0, + (PVOID*)&UsbChildExtension->usTextDescription.Buffer, + &UsbChildExtension->usTextDescription.Length); + if (!NT_SUCCESS(Status)) + { + DPRINT1("USBHUB: GetUsbStringDescriptor failed with status %x\n", Status); + goto Cleanup; + } + + UsbChildExtension->usTextDescription.MaximumLength = UsbChildExtension->usTextDescription.Length; + DPRINT1("Usb TextDescription %wZ\n", &UsbChildExtension->usTextDescription); } - UsbChildExtension->usTextDescription.MaximumLength = UsbChildExtension->usTextDescription.Length; - DPRINT1("Usb TextDescription %wZ\n", &UsbChildExtension->usTextDescription); - // - // Get the Serial Number string + // Get the Serial Number string if obe provided // - Status = GetUsbStringDescriptor(UsbChildDeviceObject, - UsbChildExtension->DeviceDesc.iSerialNumber, - 0, - (PVOID*)&UsbChildExtension->usInstanceId.Buffer, - &UsbChildExtension->usInstanceId.Length); - if (!NT_SUCCESS(Status)) + if (UsbChildExtension->DeviceDesc.iSerialNumber) { - DPRINT1("USBHUB: GetUsbStringDescriptor failed with status %x\n", Status); - goto Cleanup; - } + Status = GetUsbStringDescriptor(UsbChildDeviceObject, + UsbChildExtension->DeviceDesc.iSerialNumber, + 0, + (PVOID*)&UsbChildExtension->usInstanceId.Buffer, + &UsbChildExtension->usInstanceId.Length); + if (!NT_SUCCESS(Status)) + { + DPRINT1("USBHUB: GetUsbStringDescriptor failed with status %x\n", Status); + goto Cleanup; + } - UsbChildExtension->usInstanceId.MaximumLength = UsbChildExtension->usInstanceId.Length; - DPRINT1("Usb InstanceId %wZ\n", &UsbChildExtension->usInstanceId); + UsbChildExtension->usInstanceId.MaximumLength = UsbChildExtension->usInstanceId.Length; + DPRINT1("Usb InstanceId %wZ\n", &UsbChildExtension->usInstanceId); + } return Status;