https://git.reactos.org/?p=reactos.git;a=commitdiff;h=cac7b003c04c1f42f4522156c2d2f77996b271c2

commit cac7b003c04c1f42f4522156c2d2f77996b271c2
Author:     Eric Kohl <[email protected]>
AuthorDate: Sun Dec 6 12:42:50 2020 +0100
Commit:     Eric Kohl <[email protected]>
CommitDate: Sun Dec 6 12:42:50 2020 +0100

    Implement IRP_MN_QUERY_DEVICE_TEXT.DeviceTextLocationInformation
---
 drivers/storage/port/scsiport/pdo.c | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/storage/port/scsiport/pdo.c 
b/drivers/storage/port/scsiport/pdo.c
index 182f2b029ec..5ddbd7e2b34 100644
--- a/drivers/storage/port/scsiport/pdo.c
+++ b/drivers/storage/port/scsiport/pdo.c
@@ -185,10 +185,12 @@ PdoHandleQueryDeviceText(
     PIO_STACK_LOCATION IoStack;
     UINT32 Offset = 0;
     PINQUIRYDATA InquiryData;
-    CHAR LocalBuffer[sizeof(InquiryData->VendorId) + 
sizeof(InquiryData->ProductId) + 2];
+    CHAR LocalBuffer[40];
     ANSI_STRING AnsiString;
     UNICODE_STRING DeviceDescription;
 
+    DPRINT("PdoHandleQueryDeviceText\n");
+
     IoStack = IoGetCurrentIrpStackLocation(Irp);
 
     InquiryData = &DeviceExtension->InquiryData;
@@ -196,9 +198,8 @@ PdoHandleQueryDeviceText(
     switch (IoStack->Parameters.QueryDeviceText.DeviceTextType)
     {
         case DeviceTextDescription:
-        case DeviceTextLocationInformation:
         {
-            DPRINT("PdoHandleQueryDeviceText\n");
+            DPRINT("DeviceTextDescription\n");
 
             Offset += CopyFieldTruncate(InquiryData->VendorId,
                                         &LocalBuffer[Offset],
@@ -227,6 +228,33 @@ PdoHandleQueryDeviceText(
             Irp->IoStatus.Information = (ULONG_PTR)DeviceDescription.Buffer;
             return STATUS_SUCCESS;
         }
+
+        case DeviceTextLocationInformation:
+        {
+            DPRINT("DeviceTextLocationInformation\n");
+
+            sprintf(LocalBuffer, "Bus Number %d, Target ID %d, LUN %d",
+                    DeviceExtension->PathId, DeviceExtension->TargetId, 
DeviceExtension->Lun);
+
+            RtlInitAnsiString(&AnsiString, (PCSZ)&LocalBuffer);
+
+            DeviceDescription.Length = 0;
+            DeviceDescription.MaximumLength = (USHORT)((strlen(LocalBuffer) + 
1) * sizeof(WCHAR));
+            DeviceDescription.Buffer = ExAllocatePoolWithTag(PagedPool,
+                                                             
DeviceDescription.MaximumLength,
+                                                             TAG_SCSIPORT);
+            if (!DeviceDescription.Buffer)
+            {
+                Irp->IoStatus.Information = 0;
+                return STATUS_INSUFFICIENT_RESOURCES;
+            }
+
+            RtlAnsiStringToUnicodeString(&DeviceDescription, &AnsiString, 
FALSE);
+
+            Irp->IoStatus.Information = (ULONG_PTR)DeviceDescription.Buffer;
+            return STATUS_SUCCESS;
+        }
+
         default:
         {
             Irp->IoStatus.Information = 0;

Reply via email to