- Better stub IRP_MJ_POWER handlers. Failing IRP_MN_SET_POWER is illegal!
CORE-10117

svn path=/trunk/; revision=69050
This commit is contained in:
Thomas Faber 2015-09-06 08:54:20 +00:00
parent 813a68a73c
commit 254e6c2c6e
2 changed files with 22 additions and 99 deletions

View file

@ -456,33 +456,6 @@ FdoStartDevice(
}
static NTSTATUS
FdoSetPower(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
PIO_STACK_LOCATION IrpSp)
{
NTSTATUS Status;
UNREFERENCED_PARAMETER(DeviceObject);
UNREFERENCED_PARAMETER(Irp);
DPRINT("Called\n");
if (IrpSp->Parameters.Power.Type == DevicePowerState)
{
/* FIXME: Set device power state for the device */
Status = STATUS_UNSUCCESSFUL;
}
else
{
Status = STATUS_UNSUCCESSFUL;
}
return Status;
}
/*** PUBLIC ******************************************************************/
NTSTATUS
@ -616,30 +589,16 @@ FdoPowerControl(
* Status
*/
{
PIO_STACK_LOCATION IrpSp;
PFDO_DEVICE_EXTENSION DeviceExtension;
NTSTATUS Status;
DPRINT("Called\n");
IrpSp = IoGetCurrentIrpStackLocation(Irp);
DeviceExtension = DeviceObject->DeviceExtension;
switch (IrpSp->MinorFunction)
{
case IRP_MN_SET_POWER:
Status = FdoSetPower(DeviceObject, Irp, IrpSp);
break;
default:
DPRINT("Unknown IOCTL 0x%X\n", IrpSp->MinorFunction);
Status = STATUS_NOT_IMPLEMENTED;
break;
}
if (Status != STATUS_PENDING)
{
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
PoStartNextPowerIrp(Irp);
IoSkipCurrentIrpStackLocation(Irp);
Status = PoCallDriver(DeviceExtension->Ldo, Irp);
DPRINT("Leaving. Status 0x%X\n", Status);

View file

@ -1490,36 +1490,6 @@ PdoQueryDeviceRelations(
return STATUS_SUCCESS;
}
static NTSTATUS
PdoSetPower(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
PIO_STACK_LOCATION IrpSp)
{
NTSTATUS Status;
UNREFERENCED_PARAMETER(DeviceObject);
UNREFERENCED_PARAMETER(Irp);
DPRINT("Called\n");
if (IrpSp->Parameters.Power.Type == DevicePowerState)
{
Status = STATUS_SUCCESS;
switch (IrpSp->Parameters.Power.State.SystemState)
{
default:
Status = STATUS_UNSUCCESSFUL;
}
}
else
{
Status = STATUS_UNSUCCESSFUL;
}
return Status;
}
/*** PUBLIC ******************************************************************/
@ -1683,7 +1653,7 @@ PdoPowerControl(
*/
{
PIO_STACK_LOCATION IrpSp;
NTSTATUS Status;
NTSTATUS Status = Irp->IoStatus.Status;
DPRINT("Called\n");
@ -1691,21 +1661,15 @@ PdoPowerControl(
switch (IrpSp->MinorFunction)
{
case IRP_MN_QUERY_POWER:
case IRP_MN_SET_POWER:
Status = PdoSetPower(DeviceObject, Irp, IrpSp);
break;
default:
DPRINT("Unknown IOCTL 0x%X\n", IrpSp->MinorFunction);
Status = STATUS_NOT_IMPLEMENTED;
Status = STATUS_SUCCESS;
break;
}
if (Status != STATUS_PENDING)
{
PoStartNextPowerIrp(Irp);
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
DPRINT("Leaving. Status 0x%X\n", Status);