[ros-diffs] [hpoussin] 17981: Fix IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs for root USB hubs.

hpoussin at svn.reactos.com hpoussin at svn.reactos.com
Thu Sep 22 13:20:55 CEST 2005


Fix IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs for root USB
hubs.
The vendor and device IDs are not filled in Cromwell code, so ask
directly the PCI device to retrieve the information
Modified: trunk/reactos/drivers/usb/miniport/common/pdo.c
  _____  

Modified: trunk/reactos/drivers/usb/miniport/common/pdo.c
--- trunk/reactos/drivers/usb/miniport/common/pdo.c	2005-09-22
09:17:17 UTC (rev 17980)
+++ trunk/reactos/drivers/usb/miniport/common/pdo.c	2005-09-22
11:20:52 UTC (rev 17981)
@@ -104,18 +104,55 @@

 		{
 			CHAR Buffer[2][40];
 			PCHAR RootHubName;
-			USHORT Vendor, Product, Revision;
+			PCI_COMMON_CONFIG PciData;
+			ULONG BusNumber, SlotNumber;
+			ULONG ret;
+			PDEVICE_OBJECT Pdo;
 
 			DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID /
BusQueryHardwareIDs\n");
 
-			Vendor = DeviceExtension->pdev->vendor;
-			Product = DeviceExtension->pdev->device;
-			Revision = 0; /* FIXME */
+			Pdo = DeviceExtension->PhysicalDeviceObject;
+			Status = IoGetDeviceProperty(
+				Pdo,
+				DevicePropertyBusNumber,
+				sizeof(ULONG),
+				&BusNumber,
+				&ret);
+			if (!NT_SUCCESS(Status))
+			{
+				DPRINT("USBMP: IoGetDeviceProperty()
failed with status 0x%08lx\n", Status);
+				break;
+			}
 
+			Status = IoGetDeviceProperty(
+				Pdo,
+				DevicePropertyAddress,
+				sizeof(ULONG),
+				&SlotNumber,
+				&ret);
+			if (!NT_SUCCESS(Status))
+			{
+				DPRINT("USBMP: IoGetDeviceProperty()
failed with status 0x%08lx\n", Status);
+				break;
+			}
+
+			ret = HalGetBusDataByOffset(PCIConfiguration,
+				BusNumber,
+				SlotNumber,
+				&PciData,
+				0,
+				PCI_COMMON_HDR_LENGTH);
+			if (ret != PCI_COMMON_HDR_LENGTH)
+			{
+				DPRINT("USBMP: HalGetBusDataByOffset()
failed (ret = %ld)\n", ret);
+				Status = STATUS_IO_DEVICE_ERROR;
+				break;
+			}
+
 			sprintf(Buffer[0],
"USB\\VID%04X&PID%04X&REV%04X",
-				Vendor, Product, Revision);
+				PciData.VendorID, PciData.DeviceID,
PciData.RevisionID);
 			sprintf(Buffer[1], "USB\\VID%04X&PID%04X",
-				Vendor, Product);
+				PciData.VendorID, PciData.DeviceID);
 			if (roothub->speed == USB_SPEED_LOW ||
roothub->speed == USB_SPEED_FULL)
 				RootHubName = "USB\\ROOT_HUB"; /* USB
1.1 */
 			else
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050922/44096cc1/attachment.html


More information about the Ros-diffs mailing list