Condividi tramite


Chiamare PoStartNextPowerIrp

A partire da Windows Vista, la chiamata a PoStartNextPowerIrp non è necessaria e una chiamata a questa routine non esegue alcuna operazione di risparmio energia. Tuttavia, in Windows Server 2003, Windows XP e Windows 2000, dopo che un driver elabora un IRP di richiesta di potenza o un IRP di impostazione di potenza, il driver deve chiamare PoStartNextPowerIrp per notificare al gestore dell'alimentazione che è pronto a ricevere un altro IRP di alimentazione. I driver devono chiamare PoStartNextPowerIrp mentre la posizione dello stack IRP punta al driver attuale e prima di chiamare PoCallDriver.

Un driver deve chiamare questa routine una volta per ogni IRP_MN_QUERY_POWER o IRP_MN_SET_POWER richiesta ricevuta. I driver non devono chiamare PoStartNextPowerIrp quando si gestiscono IRP_MN_WAIT_WAKE o IRP_MN_POWER_SEQUENCE richieste.

Quando un driver chiama PoStartNextPowerIrp, il percorso dello stack IRP corrente deve puntare al driver corrente. Come regola generale, questa chiamata viene eseguita in modo ottimale da una routine IoCompletion . PoStartNextPowerIrp deve essere chiamato prima di IoCompleteRequest, IoSkipCurrentIrpStackLocation e PoCallDriver. La chiamata delle routine nell'altro ordine potrebbe causare un deadlock di sistema.

Anche se un driver fallisce l'IRP, deve comunque chiamare PoStartNextPowerIrp per informare il gestore dell'energia che è pronto per gestire un altro IRP relativo all'alimentazione.

Le sezioni seguenti chiariscono quando ogni tipo di driver deve chiamare questa routine:

Chiamare PoStartNextPowerIrp da un driver di filtro

Chiamata di PoStartNextPowerIrp da un gestore della politica di alimentazione del dispositivo

Esecuzione di PoStartNextPowerIrp da parte di un driver del bus