Gestione di un Query-Power IRP di sistema in un filtro o in un driver di funzione
Un filtro o un driver di funzione (che non è il proprietario dei criteri di risparmio energia per un dispositivo) deve passare un IRP di query di sistema al driver inferiore successivo, nei passaggi seguenti:
Chiamare IoAcquireRemoveLock, passando l'IRP corrente, per assicurarsi che il driver non riceva una richiesta di IRP_MN_REMOVE_DEVICE PnP durante la gestione dell'IRP di alimentazione.
Se IoAcquireRemoveLock restituisce uno stato di errore, il driver non deve continuare l'elaborazione di IRP. A partire da Windows Vista, invece, il driver deve chiamare IoCompleteRequest per completare l'IRP e restituire lo stato di errore. In Windows Server 2003, Windows XP e Windows 2000, il driver deve chiamare PoStartNextPowerIrp, chiamare IoCompleteRequest per completare l'IRP e restituire lo stato di errore.
Determinare se la query deve avere esito negativo. Per linee guida, vedere Esito negativo di un sistema Query-Power IRP in un filtro o un driver di funzione e completare l'elaborazione come descritto in questa sezione.
Chiamare PoStartNextPowerIrp. (Solo Windows Server 2003, Windows XP e Windows 2000)
Impostare il percorso dello stack IRP (IoSkipCurrentIrpStackLocation o IoCopyCurrentIrpStackLocationToNext). Il driver può impostare una routine IoCompletion in IRP, ma questa operazione è raramente necessaria.
Chiama IoCallDriver (in Windows 7 e Windows Vista) o PoCallDriver (in Windows Server 2003, Windows XP e Windows 2000) per passare l'IRP al driver inferiore successivo.
Chiama IoReleaseRemoveLock. Tuttavia, se il driver imposta una routine IoCompletion per IRP, effettuare questa chiamata dalla routine IoCompletion .
Restituisce STATUS_PENDING dalla routine DispatchPower .