Author: tfaber Date: Sun Sep 6 17:13:48 2015 New Revision: 69061
URL: http://svn.reactos.org/svn/reactos?rev=69061&view=rev Log: [NTOS:PNP] - Handle power IRPs for the PNP root device CORE-10117
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.... ============================================================================== --- trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c [iso-8859-1] Sun Sep 6 17:13:48 2015 @@ -1234,6 +1234,51 @@ return Status; }
+/* + * FUNCTION: Handle Power IRPs + * ARGUMENTS: + * DeviceObject = Pointer to PDO or FDO + * Irp = Pointer to IRP that should be handled + * RETURNS: + * Status + */ +static NTSTATUS NTAPI +PnpRootPowerControl( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + PPNPROOT_FDO_DEVICE_EXTENSION DeviceExtension; + PIO_STACK_LOCATION IrpSp; + NTSTATUS Status; + + DeviceExtension = DeviceObject->DeviceExtension; + Status = Irp->IoStatus.Status; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + if (DeviceExtension->Common.IsFDO) + { + ASSERT(!DeviceExtension->Common.IsFDO); + PoStartNextPowerIrp(Irp); + IoCopyCurrentIrpStackLocationToNext(Irp); + Status = PoCallDriver(DeviceExtension->Ldo, Irp); + } + else + { + switch (IrpSp->MinorFunction) + { + case IRP_MN_QUERY_POWER: + case IRP_MN_SET_POWER: + Status = STATUS_SUCCESS; + break; + } + Irp->IoStatus.Status = Status; + PoStartNextPowerIrp(Irp); + IoCompleteRequest(Irp, IO_NO_INCREMENT); + } + + return Status; +} + NTSTATUS NTAPI PnpRootAddDevice( @@ -1305,7 +1350,7 @@ DriverObject->DriverExtension->AddDevice = PnpRootAddDevice;
DriverObject->MajorFunction[IRP_MJ_PNP] = PnpRootPnpControl; - //DriverObject->MajorFunction[IRP_MJ_POWER] = PnpRootPowerControl; + DriverObject->MajorFunction[IRP_MJ_POWER] = PnpRootPowerControl;
return STATUS_SUCCESS; }