Un dispositivo entra in uno stato di Low-Power
Un dispositivo lascia lo stato di lavoro (D0) e entra in uno stato di basso consumo se si verifica uno dei seguenti casi:
Il dispositivo è inattivo (ovvero non è in uso) ed è in grado di entrare in uno stato di inattività a basso consumo mentre il sistema rimane nello stato operativo (S0).
Lo stato di alimentazione del sistema è cambiato dallo stato di lavoro (S0) a uno stato a basso consumo. I driver possono chiamare WdfDeviceGetSystemPowerAction per determinare il motivo per cui lo stato di alimentazione di un sistema sta cambiando.
Per ogni driver di funzione e filtro che supporta il dispositivo, il framework esegue le operazioni seguenti, in sequenza, un driver alla volta, a partire dal driver più alto nello stack di driver:
Se il driver usa I/O autogestito, il framework chiama la funzione di callback del driver EvtDeviceSelfManagedIoSuspend.
Il framework arresta tutte le code di I/O gestite con gestione dell'alimentazione del driver e chiama le funzioni di callback EvtIoStop (se esistono).
Se il driver è il proprietario dei criteri di alimentazione del dispositivo, il framework chiama la funzione di callback relativa EvtDeviceArmWakeFromS0, EvtDeviceArmWakeFromSxo EvtDeviceArmWakeFromSxWithReason.
Se l'hardware e il driver supportano DMA, il framework chiama le funzioni di callback del driver EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlushe EvtDmaEnablerDisable (se esistono) per ogni canale DMA creato.
Il framework chiama la funzione di callback del driver EvtDeviceD0ExitPreInterruptsDisabled (se esistente), e quindi chiama la funzione di callback del driver EvtInterruptDisable (se esistente) per ogni interrupt, in modo che il driver possa disabilitare gli interrupt del dispositivo.
Il framework chiama la funzione di richiamo del driver EvtDeviceD0Exit (se esiste).
L'autista del bus è il conducente nella pila che viene chiamato per ultimo. Quando il framework chiama la funzione di callback del driver del bus EvtDeviceD0Exit, la funzione imposta lo stato di alimentazione del dispositivo (un dispositivo figlio del bus) su uno stato di basso consumo energetico. Il framework specifica lo stato D3 a basso consumo a meno che il proprietario dei criteri di risparmio energia non abbia specificato uno stato a basso consumo diverso.
Nota
Il metodo utilizzato dal conducente dell'autobus per impostare lo stato di alimentazione del dispositivo figlio è specifico del bus. Ad esempio, la specifica di risparmio energia del bus PCI definisce un controllo di risparmio energia a 16 bit/registro di stato (PMCSR). I due bit più bassi ("PowerState") determinano entrambi lo stato di alimentazione corrente del dispositivo e vengono usati per impostare il dispositivo in un nuovo stato di alimentazione. Quando il PDO pci.sys
riceve IRP_MN_SET_POWER/D3, legge il PMCSR, modifica i bit di PowerState in 11b (stato di alimentazione D3) e riscrive il PMCSR.