Condividi tramite


Richieste IRP di attesa/riattivazione

Per inviare un IRP_MN_WAIT_WAKE, un driver chiama PoRequestPowerIrp, passando (tra gli altri parametri) un puntatore al PDO di destinazione, uno stato di alimentazione del sistema e un puntatore a una routine di callback.

Lo stato di alimentazione del sistema specifica lo stato meno alimentato da cui questo IRP può riattivare il sistema. Il valore deve essere uguale o maggiore dello stato SystemWake nella struttura DEVICE_CAPABILITIES . Ad esempio, se un driver passa PowerSystemSleeping2 in IRP, l'IRP associato potrebbe causare la riattivazione del sistema dagli stati S0, S1 e S2. In tal caso, il sistema deve supportare S0 e S2 (gli stati con tecnologia più alta e bassa nell'intervallo), ma non devono supportare S1.

Ogni driver che richiede un IRP di attesa/riattivazione deve specificare una routine di callback, che viene richiamata dopo che tutti gli altri driver hanno completato l'IRP. In questa routine, il driver può eseguire qualsiasi operazione necessaria per restituire il dispositivo allo stato di lavoro.

In risposta a PoRequestPowerIrp, il risparmio energia alloca un IRP di alimentazione con codice secondario IRP_MN_WAIT_WAKE e lo invia all'inizio dello stack di dispositivi per il PDO di destinazione. Il chiamante viene restituito un puntatore all'IRP allocato, che può essere usato in un secondo momento se deve annullare l'IRP.

Se non si verificano errori, PoRequestPowerIrp restituisce STATUS_PENDING. Questo stato indica che l'IRP è stato inviato correttamente ed è in attesa di completamento.

Un IRP di attesa/riattivazione non modifica lo stato di alimentazione del sistema o di un dispositivo. Abilita semplicemente il segnale di riattivazione di un dispositivo. L'IRP rimane in sospeso finché un segnale esterno non provoca il risveglio del sistema o del dispositivo.