Share via


Llamar a PoStartNextPowerIrp

A partir de Windows Vista, no es necesario llamar a PoStartNextPowerIrp y una llamada a esta rutina no realiza ninguna operación de administración de energía. Sin embargo, en Windows Server 2003, Windows XP y Windows 2000, después de que un controlador procese un IRP de alimentación de consulta o un IRP de energía establecida, el controlador debe llamar a PoStartNextPowerIrp para notificar al administrador de energía que está listo para recibir otro IRP de energía. Los controladores deben llamar a PoStartNextPowerIrp mientras la ubicación de la pila IRP apunta al controlador actual y antes de llamar a PoCallDriver.

Un controlador debe llamar a esta rutina una vez para cada IRP_MN_QUERY_POWER o IRP_MN_SET_POWER solicitud que recibe. Los controladores no necesitan llamar a PoStartNextPowerIrp al controlar las solicitudes de IRP_MN_WAIT_WAKE o IRP_MN_POWER_SEQUENCE .

Cuando un controlador llama a PoStartNextPowerIrp, la ubicación actual de la pila irP debe apuntar al controlador actual. Como regla general, esta llamada se realiza mejor a partir de una rutina de IoCompletion . Se debe llamar a PoStartNextPowerIrp antes de IoCompleteRequest, IoSkipCurrentIrpStackLocation y PoCallDriver. Llamar a las rutinas en el otro orden puede provocar un interbloqueo del sistema.

Incluso si un controlador produce un error en el IRP, debe llamar a PoStartNextPowerIrp para informar al administrador de energía de que está listo para controlar otro IRP de energía.

En las secciones siguientes se aclara cuándo cada tipo de controlador debe llamar a esta rutina:

Llamar a PoStartNextPowerIrp desde un controlador de filtro

Llamar a PoStartNextPowerIrp desde un propietario de directiva de energía del dispositivo

Llamar a PoStartNextPowerIrp desde un controlador de bus