Condividi tramite


Uso delle routine di Power Manager per il rilevamento inattive

Il risparmio energia fornisce il supporto per il rilevamento inattiva tramite le routine PoRegisterDeviceForIdleDetection e PoSetDeviceBusy .

Per abilitare il rilevamento di inattività per il dispositivo, il proprietario di criteri di risparmio energia del dispositivo chiama PoRegisterDeviceForIdleDetection e specifica:

  • Valore di timeout di inattività da applicare quando il sistema ottimizza le prestazioni.

  • Valore di timeout di inattività da applicare quando il sistema ottimizza la conservazione.

  • Stato di alimentazione del dispositivo a cui il dispositivo deve eseguire la transizione quando è inattiva.

PoRegisterDeviceForIdleDetection restituisce un puntatore a un contatore di inattività, che il driver usa in seguito per disabilitare il rilevamento di inattività. I chiamanti di PoRegisterDeviceForIdleDetection devono essere in esecuzione in IRQL < DISPATCH_LEVEL.

Un driver può registrare il dispositivo per il rilevamento inattivi in qualsiasi momento dopo l'avvio del dispositivo ed è pronto per gestire i runtime di integrazione di alimentazione del dispositivo. Ad esempio, un driver potrebbe abilitare il rilevamento inattivo come parte della routine IoCompletion per un IRP di avvio PnP.

I valori di timeout per qualsiasi dispositivo specifico devono essere proporzionali alla latenza di accensione del dispositivo e in base al comportamento osservato del dispositivo. Per i dispositivi di determinati tipi, un driver può specificare i valori di conservazione e timeout delle prestazioni pari a -1 per usare i timeout dei criteri di alimentazione standard per la classe del dispositivo. Per informazioni dettagliate, vedere la documentazione specifica del dispositivo.

Quando il dispositivo è in uso, il driver deve chiamare PoSetDeviceBusy, passando il puntatore restituito da PoRegisterDeviceForIdleDetection. PoSetDeviceBusy reimposta il contatore inattivi, riavviando quindi il conto alla rovescia di inattività per il dispositivo. Il driver deve chiamare PoSetDeviceBusy in ogni operazione di I/O.

Per determinare se il dispositivo è inattiva, il risparmio energia confronta il valore del contatore inattiva con il valore di timeout di inattività specificato dal driver per i criteri di risparmio energia di sistema correnti (conservazione o prestazioni). Vedere la Microsoft Windows SDK per le funzioni relative ai criteri di risparmio energia del sistema.

Quando il dispositivo soddisfa il valore di timeout, il risparmio energia invia un IRP di alimentazione del dispositivo, specificando lo stato di alimentazione del dispositivo che il driver ha passato nella chiamata a PoRegisterDeviceForIdleDetection. Il risparmio energia non invia un IRP di query prima di inviare l'IRP di set-power. I driver nello stack gestiscono l'IRP di potenza impostata come gestirebbero qualsiasi altro; devono completarlo in modo tempestivo e non possono fallirlo. Vedere Gestione dei Power-Down IRP del dispositivo.

Quando il driver non richiede più il rilevamento inattivo o non è pronto per gestire i runtime di integrazione di alimentazione del dispositivo, deve chiamare di nuovo PoRegisterDeviceForIdleDetection , passando zero per entrambi i valori di timeout. L'impostazione dei timeout su zero disabilita il rilevamento di inattività per i criteri di risparmio energia (batteria) e prestazioni (AC). Il driver può riabilitare rapidamente il rilevamento di inattività; chiama semplicemente PoRegisterDeviceForIdleDetection con valori di timeout diversi da zero. Dopo aver registrato il dispositivo, il driver può abilitare e disabilitare il rilevamento inattivo modificando i valori di timeout, anche se il dispositivo è stato spento e riattivato.