Share via


Routine di attesa/riattivazione

Quando un driver richiede un'IRP di attesa/riattivazione, deve specificare una routine di callback in modo che possa restituire il dispositivo allo stato di lavoro (D0) quando si verifica l'evento di riattivazione. Dopo aver completato l'evento di riattivazione e tutti i driver hanno completato l'IRP, il sistema chiama la routine di callback passata a PoRequestPowerIrp.

Poiché questa routine di callback è impostata per conto del driver che ha generato l'IRP, e non per un driver che gestisce l'IRP, non deve chiamare PoStartNextPowerIrp; solo le routine IoCompletion impostate come driver passano l'IRP verso il basso lo stack dovrebbe avviare l'IRP di alimentazione successiva. Tenere presente che il proprietario dei criteri non solo invia l'IRP ma lo gestisce e quindi potrebbe impostare una routine IoCompletion mentre passa l'IRP verso il basso dello stack oltre a impostare una routine di callback quando richiede l'IRP di attesa/riattivazione.

La routine di callback ha le responsabilità seguenti:

  1. Se il driver controlla più di un dispositivo, determinare quale dei dispositivi ha segnalato la riattivazione.

  2. Servizio dell'evento che ha causato il segnale di riattivazione.

  3. Impostare il dispositivo che segnalava la riattivazione nello stato D0 chiamando PoRequestPowerIrp per inviare una richiesta PowerDeviceD0 . Il driver deve anche chiamare PoSetPowerState per informare il risparmio energia del nuovo dispositivo. Per altre informazioni, vedere Invio di IRP_MN_QUERY_POWER o IRP_MN_SET_POWER per Gli stati di alimentazione del dispositivo.

  4. Se il driver imposta una routine Cancel per l'IRP, chiamare IoSetCancelRoutine per reimpostare la routine Cancel su NULL.

  5. Se il driver possiede i criteri di alimentazione per più di un dispositivo, decrere il numero di riferimenti di attesa/riattivazione. Se il conteggio è diverso da zero, indicante che in precedenza un altro dispositivo aveva inviato un'IRP di attesa/riattivazione, richiedere un'altra IRP di attesa/riattivazione (PoRequestPowerIrp) per il relativo PDO.

    Ad esempio, un dispositivo PCI potrebbe avere attesa/riattivazione abilitato sia per un modem che per una scheda di interfaccia di rete. Se la scheda di interfaccia di rete riattiva il sistema (quindi completando l'IRP), il FDO PCI deve inviare un'altra IRP di attesa/riattivazione a se stessa in modo che il modem possa comunque riattivarsi.

Poiché il driver che ha richiesto il criterio di alimentazione IRP di attesa/riattivazione per lo stack di dispositivi, è responsabile della restituzione del dispositivo allo stato di funzionamento al termine dell'IRP. Anche se i driver inferiori potrebbero avere già applicato energia fisicamente al dispositivo, il proprietario del criterio deve chiamare PoRequestPowerIrp per inviare una richiesta di IRP_MN_SET_POWER per lo stato di alimentazione del dispositivo D0. Solo dopo che tutti i driver nello stack di dispositivi hanno gestito questo IRP di alimentazione, il dispositivo verrà restituito allo stato di lavoro.