Author: cgutman Date: Sun Apr 4 02:00:21 2010 New Revision: 46706
URL: http://svn.reactos.org/svn/reactos?rev=46706&view=rev Log: [PCI] - Handle IRP_MN_QUERY_DEVICE_RELATIONS for TargetDeviceRelation for PCI's child PDOs
Modified: trunk/reactos/drivers/bus/pci/pdo.c
Modified: trunk/reactos/drivers/bus/pci/pdo.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/pci/pdo.c?rev=4... ============================================================================== --- trunk/reactos/drivers/bus/pci/pdo.c [iso-8859-1] (original) +++ trunk/reactos/drivers/bus/pci/pdo.c [iso-8859-1] Sun Apr 4 02:00:21 2010 @@ -1290,6 +1290,33 @@ return STATUS_SUCCESS; }
+static NTSTATUS +PdoQueryDeviceRelations( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + PIO_STACK_LOCATION IrpSp) +{ + PDEVICE_RELATIONS DeviceRelations; + + /* We only support TargetDeviceRelation for child PDOs */ + if (IrpSp->Parameters.QueryDeviceRelations.Type != TargetDeviceRelation) + return Irp->IoStatus.Status; + + /* We can do this because we only return 1 PDO for TargetDeviceRelation */ + DeviceRelations = ExAllocatePool(PagedPool, sizeof(*DeviceRelations)); + if (!DeviceRelations) + return STATUS_INSUFFICIENT_RESOURCES; + + DeviceRelations->Count = 1; + DeviceRelations->Objects[0] = DeviceObject; + + /* The PnP manager will remove this when it is done with the PDO */ + ObReferenceObject(DeviceObject); + + Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations; + + return STATUS_SUCCESS; +}
static NTSTATUS PdoSetPower( @@ -1362,8 +1389,7 @@ break;
case IRP_MN_QUERY_DEVICE_RELATIONS: - /* FIXME: Possibly handle for RemovalRelations */ - DPRINT("Unimplemented IRP_MN_QUERY_DEVICE_RELATIONS received\n"); + Status = PdoQueryDeviceRelations(DeviceObject, Irp, IrpSp); break;
case IRP_MN_QUERY_DEVICE_TEXT: