|
下面是处理电源irp的代码节选,问题是:为什么提高电源级别时使用完成例程,而降低电源级别时直接使用PoSetPowerState( pDevObj, type, newState);?请高手赐教!
if (newState < pDevExt->currentPowerState)
{ // 请求提高功率,先告诉PDO
// 设置一个完成例程,这样以便于在低层的工作完成后收回控制
IoCopyCurrentIrpStackLocationToNext( pIrp );
IoSetCompletionRoutine( pIrp, PowerUpFinish,
NULL, TRUE, TRUE, TRUE);
PoCallDriver( pDevExt->LowerDriver, pIrp );
Return STATUS_PENDING;
} else
{ //请求减少功率,先完成它
//执行设备特定的功率增加操作,告诉电源管理器设备的电源状态已经改变
PoSetPowerState( pDevObj, type, newState);
//告诉电源管理器完成,等待发送这个另一个请求
PoStartNextPowerIrp( pIrp );
// 传送电源IRP到下一层
return PoCallDriver( pDevExt->LowerDriver, pIrp );
}
|
|