// get currrent stack location
IoStack = IoGetCurrentIrpStackLocation(Irp);
+ // get device extension
+ DeviceExtension = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
+
if (IoStack->MinorFunction != IRP_MN_SET_POWER && IoStack->MinorFunction != IRP_MN_QUERY_POWER)
{
- // just forward the request
- Status = PcForwardIrpSynchronous(DeviceObject, Irp);
-
- // start next power irp
+ // forward unknown requests down the stack and forget
PoStartNextPowerIrp(Irp);
-
- // complete request
- Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
- // done
- return Status;
+ IoSkipCurrentIrpStackLocation(Irp);
+ return PoCallDriver(DeviceExtension->PrevDeviceObject, Irp);
}
-
- // get device extension
- DeviceExtension = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
-
// get current request type
if (IoStack->Parameters.Power.Type == DevicePowerState)
{
// nothing has changed
if (IoStack->MinorFunction == IRP_MN_QUERY_POWER)
{
- // only forward query requests
- Status = PcForwardIrpSynchronous(DeviceObject, Irp);
+ // only forward query requests; we can forget about them
+ PoStartNextPowerIrp(Irp);
+ IoSkipCurrentIrpStackLocation(Irp);
+ return PoCallDriver(DeviceExtension->PrevDeviceObject, Irp);
}
// start next power irp
}
// only forward query requests
- PcForwardIrpSynchronous(DeviceObject, Irp);
-
- // start next power irp
PoStartNextPowerIrp(Irp);
-
- // complete request
- Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
- // done
- return Status;
+ IoSkipCurrentIrpStackLocation(Irp);
+ return PoCallDriver(DeviceExtension->PrevDeviceObject, Irp);
}
else
{
DeviceExtension->SystemPowerState = IoStack->Parameters.Power.State.SystemState;
// only forward query requests
- Status = PcForwardIrpSynchronous(DeviceObject, Irp);
-
- // start next power irp
PoStartNextPowerIrp(Irp);
-
- // complete request
- Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
- // done
- return Status;
+ IoSkipCurrentIrpStackLocation(Irp);
+ return PoCallDriver(DeviceExtension->PrevDeviceObject, Irp);
}
}
}