[ros-diffs] [cgutman] 55976: [USBCCGP] - Implement support for getting string descriptors (may need more work) - USB mass storage devices which are part of a composite device now initialize

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sat Mar 3 21:23:04 UTC 2012


Author: cgutman
Date: Sat Mar  3 21:23:04 2012
New Revision: 55976

URL: http://svn.reactos.org/svn/reactos?rev=55976&view=rev
Log:
[USBCCGP]
- Implement support for getting string descriptors (may need more work)
- USB mass storage devices which are part of a composite device now initialize

Modified:
    trunk/reactos/drivers/usb/usbccgp/pdo.c

Modified: trunk/reactos/drivers/usb/usbccgp/pdo.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbccgp/pdo.c?rev=55976&r1=55975&r2=55976&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbccgp/pdo.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbccgp/pdo.c [iso-8859-1] Sat Mar  3 21:23:04 2012
@@ -976,6 +976,40 @@
                 IoCompleteRequest(Irp, IO_NO_INCREMENT);
                 return Status;
             }
+            else if (Urb->UrbControlDescriptorRequest.DescriptorType == USB_STRING_DESCRIPTOR_TYPE)
+            {
+                PUSB_STRING_DESCRIPTOR StringDescriptor;
+
+                //
+                // get the requested string descriptor
+                //
+                ASSERT(Urb->UrbControlDescriptorRequest.TransferBuffer);
+                Status = USBCCGP_GetDescriptor(PDODeviceExtension->FDODeviceExtension->NextDeviceObject,
+                                               USB_STRING_DESCRIPTOR_TYPE,
+                                               Urb->UrbControlDescriptorRequest.TransferBufferLength,
+                                               Urb->UrbControlDescriptorRequest.Index,
+                                               Urb->UrbControlDescriptorRequest.LanguageId,
+                                               (PVOID*)&StringDescriptor);
+                if (NT_SUCCESS(Status))
+                {
+                    if (StringDescriptor->bLength == 2)
+                    {
+                        FreeItem(StringDescriptor);
+                        Status = STATUS_DEVICE_DATA_ERROR;
+                    }
+                    else
+                    {
+                        RtlCopyMemory(Urb->UrbControlDescriptorRequest.TransferBuffer,
+                                      StringDescriptor->bString,
+                                      StringDescriptor->bLength + sizeof(WCHAR));
+                        FreeItem(StringDescriptor);
+                        Status = STATUS_SUCCESS;
+                    }
+                }
+                Irp->IoStatus.Status = Status;
+                IoCompleteRequest(Irp, IO_NO_INCREMENT);
+                return Status;
+            }
         }
         else
         {




More information about the Ros-diffs mailing list