Author: mjmartin
Date: Thu May 12 23:31:32 2011
New Revision: 51688

URL: http://svn.reactos.org/svn/reactos?rev=51688&view=rev
Log:
[USBHUB_NEW]
- Only get the string descriptors if they are available. Fixes crash when using 
usb mouse and keyboards in windows.

Modified:
    branches/usb-bringup/drivers/usb/usbhub_new/fdo.c

Modified: branches/usb-bringup/drivers/usb/usbhub_new/fdo.c
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbhub_new/fdo.c?rev=51688&r1=51687&r2=51688&view=diff
==============================================================================
--- branches/usb-bringup/drivers/usb/usbhub_new/fdo.c [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/usb/usbhub_new/fdo.c [iso-8859-1] Thu May 12 
23:31:32 2011
@@ -914,38 +914,44 @@
     //
 
     //
-    // Get the product string
-    //
-    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);
-
-    //
-    // Get the Serial Number string
-    //
-    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);
+    // Get the product string if obe provided
+    //
+    if (UsbChildExtension->DeviceDesc.iProduct)
+    {
+        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);
+    }
+
+    //
+    // Get the Serial Number string if obe provided
+    //
+    if (UsbChildExtension->DeviceDesc.iSerialNumber)
+    {
+        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);
+    }
 
     return Status;
 


Reply via email to