mirror of
https://github.com/reactos/reactos.git
synced 2024-07-04 11:44:33 +00:00
[PCI]
- Fix handling of IRP_MN_QUERY_DEVICE_TEXT [PNPROOT] - Fix registry query and returning of device description [ACPI] - Fix handling of IRP_MN_QUERY_DEVICE_TEXT svn path=/trunk/; revision=53349
This commit is contained in:
parent
50157cc4d2
commit
6272d3ffc8
|
@ -539,9 +539,9 @@ Bus_PDO_QueryDeviceText(
|
|||
PPDO_DEVICE_DATA DeviceData,
|
||||
PIRP Irp )
|
||||
{
|
||||
PWCHAR Buffer;
|
||||
PWCHAR Buffer, Temp;
|
||||
PIO_STACK_LOCATION stack;
|
||||
NTSTATUS status;
|
||||
NTSTATUS status = Irp->IoStatus.Status;
|
||||
PAGED_CODE ();
|
||||
|
||||
stack = IoGetCurrentIrpStackLocation (Irp);
|
||||
|
@ -552,80 +552,88 @@ Bus_PDO_QueryDeviceText(
|
|||
|
||||
if (!Irp->IoStatus.Information) {
|
||||
if (wcsstr (DeviceData->HardwareIDs, L"PNP000") != 0)
|
||||
Buffer = L"Programmable interrupt controller";
|
||||
Temp = L"Programmable interrupt controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP010") != 0)
|
||||
Buffer = L"System timer";
|
||||
Temp = L"System timer";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP020") != 0)
|
||||
Buffer = L"DMA controller";
|
||||
Temp = L"DMA controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP03") != 0)
|
||||
Buffer = L"Keyboard";
|
||||
Temp = L"Keyboard";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP040") != 0)
|
||||
Buffer = L"Parallel port";
|
||||
Temp = L"Parallel port";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP05") != 0)
|
||||
Buffer = L"Serial port";
|
||||
Temp = L"Serial port";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP06") != 0)
|
||||
Buffer = L"Disk controller";
|
||||
Temp = L"Disk controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP07") != 0)
|
||||
Buffer = L"Disk controller";
|
||||
Temp = L"Disk controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP09") != 0)
|
||||
Buffer = L"Display adapter";
|
||||
Temp = L"Display adapter";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0A0") != 0)
|
||||
Buffer = L"Bus controller";
|
||||
Temp = L"Bus controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0E0") != 0)
|
||||
Buffer = L"PCMCIA controller";
|
||||
Temp = L"PCMCIA controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0F") != 0)
|
||||
Buffer = L"Mouse device";
|
||||
Temp = L"Mouse device";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP8") != 0)
|
||||
Buffer = L"Network adapter";
|
||||
Temp = L"Network adapter";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNPA0") != 0)
|
||||
Buffer = L"SCSI controller";
|
||||
Temp = L"SCSI controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNPB0") != 0)
|
||||
Buffer = L"Multimedia device";
|
||||
Temp = L"Multimedia device";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNPC00") != 0)
|
||||
Buffer = L"Modem";
|
||||
Temp = L"Modem";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C0C") != 0)
|
||||
Buffer = L"Power Button";
|
||||
Temp = L"Power Button";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C0E") != 0)
|
||||
Buffer = L"Sleep Button";
|
||||
Temp = L"Sleep Button";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C0D") != 0)
|
||||
Buffer = L"Lid Switch";
|
||||
Temp = L"Lid Switch";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C09") != 0)
|
||||
Buffer = L"ACPI Embedded Controller";
|
||||
Temp = L"ACPI Embedded Controller";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C0B") != 0)
|
||||
Buffer = L"ACPI Fan";
|
||||
Temp = L"ACPI Fan";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0A03") != 0)
|
||||
Buffer = L"PCI Root Bridge";
|
||||
Temp = L"PCI Root Bridge";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C0A") != 0)
|
||||
Buffer = L"ACPI Battery";
|
||||
Temp = L"ACPI Battery";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"PNP0C0F") != 0)
|
||||
Buffer = L"PCI Interrupt Link";
|
||||
Temp = L"PCI Interrupt Link";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"ACPI_PWR") != 0)
|
||||
Buffer = L"ACPI Power Resource";
|
||||
Temp = L"ACPI Power Resource";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"Processor") != 0)
|
||||
Buffer = L"Processor";
|
||||
Temp = L"Processor";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"ThermalZone") != 0)
|
||||
Buffer = L"ACPI Thermal Zone";
|
||||
Temp = L"ACPI Thermal Zone";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"ACPI0002") != 0)
|
||||
Buffer = L"Smart Battery";
|
||||
Temp = L"Smart Battery";
|
||||
else if (wcsstr(DeviceData->HardwareIDs, L"ACPI0003") != 0)
|
||||
Buffer = L"AC Adapter";
|
||||
Temp = L"AC Adapter";
|
||||
/* Simply checking if AcpiHandle is NULL eliminates the need to check
|
||||
* for the 4 different names that ACPI knows the fixed feature button as internally
|
||||
*/
|
||||
else if (!DeviceData->AcpiHandle)
|
||||
Buffer = L"ACPI Fixed Feature Button";
|
||||
Temp = L"ACPI Fixed Feature Button";
|
||||
else
|
||||
Buffer = L"Other ACPI device";
|
||||
Temp = L"Other ACPI device";
|
||||
|
||||
Buffer = ExAllocatePoolWithTag (PagedPool, (wcslen(Temp) + 1) * sizeof(WCHAR), 'IPCA');
|
||||
|
||||
if (!Buffer) {
|
||||
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
break;
|
||||
}
|
||||
|
||||
RtlCopyMemory (Buffer, Temp, (wcslen(Temp) + 1) * sizeof(WCHAR));
|
||||
|
||||
DPRINT("\tDeviceTextDescription :%ws\n", Buffer);
|
||||
|
||||
Irp->IoStatus.Information = (ULONG_PTR) Buffer;
|
||||
}
|
||||
status = STATUS_SUCCESS;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
status = Irp->IoStatus.Status;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,29 +23,37 @@ PdoQueryDeviceText(
|
|||
PIO_STACK_LOCATION IrpSp)
|
||||
{
|
||||
PPDO_DEVICE_EXTENSION DeviceExtension;
|
||||
UNICODE_STRING String;
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT("Called\n");
|
||||
|
||||
DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
|
||||
Status = STATUS_SUCCESS;
|
||||
|
||||
switch (IrpSp->Parameters.QueryDeviceText.DeviceTextType)
|
||||
{
|
||||
case DeviceTextDescription:
|
||||
Status = PciDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
|
||||
&DeviceExtension->DeviceDescription,
|
||||
&String);
|
||||
|
||||
DPRINT("DeviceTextDescription\n");
|
||||
Irp->IoStatus.Information = (ULONG_PTR)DeviceExtension->DeviceDescription.Buffer;
|
||||
Irp->IoStatus.Information = (ULONG_PTR)String.Buffer;
|
||||
break;
|
||||
|
||||
case DeviceTextLocationInformation:
|
||||
Status = PciDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
|
||||
&DeviceExtension->DeviceLocation,
|
||||
&String);
|
||||
|
||||
DPRINT("DeviceTextLocationInformation\n");
|
||||
Irp->IoStatus.Information = (ULONG_PTR)DeviceExtension->DeviceLocation.Buffer;
|
||||
Irp->IoStatus.Information = (ULONG_PTR)String.Buffer;
|
||||
break;
|
||||
|
||||
default:
|
||||
Irp->IoStatus.Information = 0;
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
break;
|
||||
}
|
||||
|
||||
return Status;
|
||||
|
|
|
@ -331,12 +331,16 @@ QueryStringCallback(
|
|||
UNICODE_STRING Source;
|
||||
|
||||
if (ValueType != REG_SZ || ValueLength == 0 || ValueLength % sizeof(WCHAR) != 0)
|
||||
{
|
||||
Destination->Length = 0;
|
||||
Destination->MaximumLength = 0;
|
||||
Destination->Buffer = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
Source.MaximumLength = Source.Length = ValueLength;
|
||||
Source.Buffer = ValueData;
|
||||
if (Source.Length > 0 && Source.Buffer[Source.Length / sizeof(WCHAR) - 1] == UNICODE_NULL)
|
||||
Source.Length -= sizeof(WCHAR);
|
||||
|
||||
return RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, &Source, Destination);
|
||||
}
|
||||
|
||||
|
@ -914,18 +918,19 @@ PdoQueryDeviceText(
|
|||
UNICODE_STRING String;
|
||||
DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n");
|
||||
|
||||
Status = RtlDuplicateUnicodeString(
|
||||
RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
|
||||
&DeviceExtension->DeviceInfo->DeviceDescription,
|
||||
&String);
|
||||
Irp->IoStatus.Information = (ULONG_PTR)String.Buffer;
|
||||
if (DeviceExtension->DeviceInfo->DeviceDescription.Buffer != NULL)
|
||||
{
|
||||
Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
|
||||
&DeviceExtension->DeviceInfo->DeviceDescription,
|
||||
&String);
|
||||
Irp->IoStatus.Information = (ULONG_PTR)String.Buffer;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case DeviceTextLocationInformation:
|
||||
{
|
||||
DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextLocationInformation\n");
|
||||
Status = STATUS_NOT_SUPPORTED;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue