https://git.reactos.org/?p=reactos.git;a=commitdiff;h=cac7b003c04c1f42f4522…
commit cac7b003c04c1f42f4522156c2d2f77996b271c2
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sun Dec 6 12:42:50 2020 +0100
Commit: Eric Kohl <eric.kohl(a)reactos.org>
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;