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