Chamando PoStartNextPowerIrp
A partir do Windows Vista, não é necessário chamar PoStartNextPowerIrp e uma chamada para essa rotina não executa nenhuma operação de gerenciamento de energia. No entanto, no Windows Server 2003, Windows XP e Windows 2000, depois que um driver processa um IRP de energia de consulta ou um IRP de energia definida, o driver deve chamar PoStartNextPowerIrp para notificar o power manager de que ele está pronto para receber outro IRP de energia. Os drivers devem chamar PoStartNextPowerIrp enquanto o local da pilha IRP aponta para o driver atual e antes de chamar PoCallDriver.
Um driver deve chamar essa rotina uma vez para cada IRP_MN_QUERY_POWER ou IRP_MN_SET_POWER solicitação recebida. Os drivers não precisam chamar PoStartNextPowerIrp ao lidar com solicitações de IRP_MN_WAIT_WAKE ou IRP_MN_POWER_SEQUENCE .
Quando um driver chama PoStartNextPowerIrp, o local da pilha IRP atual deve apontar para o driver atual. Como regra geral, essa chamada é melhor feita de uma rotina IoCompletion . PoStartNextPowerIrp deve ser chamado antes de IoCompleteRequest, IoSkipCurrentIrpStackLocation e PoCallDriver. Chamar as rotinas na outra ordem pode causar um deadlock do sistema.
Mesmo que um driver falhe no IRP, ele deve, no entanto, chamar PoStartNextPowerIrp para informar ao power manager que ele está pronto para lidar com outro IRP de energia.
As seções a seguir esclarecem quando cada tipo de driver deve chamar essa rotina:
Chamando PoStartNextPowerIrp de um driver de filtro
Chamando PoStartNextPowerIrp de um proprietário de política de energia do dispositivo