Funzione PoRegisterDeviceForIdleDetection (ntifs.h)
La routine PoRegisterDeviceForIdleDetection abilita o annulla il rilevamento inattiva e imposta i valori di timeout di inattività per un dispositivo.
Sintassi
PULONG PoRegisterDeviceForIdleDetection(
[in] PDEVICE_OBJECT DeviceObject,
[in] ULONG ConservationIdleTime,
[in] ULONG PerformanceIdleTime,
[in] DEVICE_POWER_STATE State
);
Parametri
[in] DeviceObject
Puntatore al DEVICE_OBJECT creato dal driver per il dispositivo. Questo parametro può puntare a un oggetto dispositivo fisico (PDO) o a un oggetto dispositivo funzionale (FDO).
[in] ConservationIdleTime
Imposta il valore di timeout (in secondi) da applicare quando i criteri di alimentazione del sistema ottimizzano la conservazione dell'energia. Specificare zero per disabilitare il rilevamento inattiva quando i criteri di conservazione sono attivi.
[in] PerformanceIdleTime
Imposta il valore di timeout (in secondi) da applicare quando i criteri di risparmio energia di sistema ottimizzano le prestazioni. Specificare zero per disabilitare il rilevamento inattiva quando i criteri di prestazioni sono attivi.
[in] State
Specifica il dello stato di alimentazione del dispositivo da richiedere in una richiesta di IRP_MN_SET_POWER quando è stata soddisfatta ConservationIdleTime o PerformanceIdle Time. I valori possibili sono i valori DEVICE_POWER_STATE.
Valore restituito
PoRegisterDeviceForIdleDetection restituisce un puntatore al contatore inattiva per indicare che il rilevamento inattiva è stato abilitato. Restituisce NULL per indicare che il rilevamento inattiva è stato disabilitato, che non è stato possibile allocare un contatore inattiva o che uno o entrambi i valori di timeout non sono validi.
Osservazioni
PoRegisterDeviceForIdleDetection consente ai driver di usare il meccanismo di rilevamento inattiva fornito dal risparmio energia. I driver chiamano PoRegisterDeviceForIdleDetection per uno dei motivi seguenti:
- Per abilitare il rilevamento inattiva per il dispositivo e impostare i valori iniziali di timeout di inattività.
- Per modificare i valori di timeout di inattività per un dispositivo.
- Per disabilitare il rilevamento inattiva per un dispositivo.
Dopo aver abilitato un dispositivo per il rilevamento inattiva, un driver chiama PoSetDeviceBusy ogni volta che il dispositivo è in uso, passando il puntatore non NULL inattiva restituito da PoRegisterDeviceForIdleDetection. Chiamando PoSetDeviceBusy riavvia il conto alla rovescia inattiva. Si noti che un driver non deve passare un puntatore NULL a PoSetDeviceBusy.
Ogni volta che il dispositivo soddisfa il valore di timeout di inattività corrente, il risparmio energia invia una richiesta di IRP_MN_SET_POWER all'inizio dello stack di dispositivi, specificando lo stato di alimentazione del dispositivo Stato. In risposta al IRP, ogni driver esegue tutte le attività specifiche del dispositivo necessarie prima della transizione dello stato di alimentazione, quindi passa l'IRP al driver inferiore successivo. Quando l'IRP raggiunge il driver dell'autobus, tale driver inserisce il dispositivo nello stato di alimentazione inferiore richiesto e completa l'IRP.
PoRegisterDeviceForIdleDetection imposta i valori di timeout per la conservazione e le prestazioni. Il valore ConservationIdleTime si applica quando i criteri di alimentazione del sistema ottimizzano la conservazione; il valore performanceIdleTime si applica quando i criteri di risparmio energia di sistema ottimizzano le prestazioni. In genere, il criterio applicabile dipende dalla fonte di alimentazione: quando si esegue con alimentazione AC, il sistema ottimizza le prestazioni e quando si esegue una batteria, il sistema ottimizza per la conservazione.
Alcuni dispositivi possono specificare i valori di timeout di -1 per usare i timeout dei criteri di alimentazione standard per la classe del dispositivo. I valori standard di timeout forniscono una migliore integrazione del sistema per le classi di dispositivi standard supportate. Al momento, WDM supporta questa funzionalità per i dispositivi di tipo FILE_DEVICE_DISK e FILE_DEVICE_MASS_STORAGE. PoRegisterDeviceForIdleDetection restituisce NULL se -1 viene specificato per un dispositivo di un tipo non supportato. Per informazioni sui tipi di dispositivo, vedere Specifica dei tipi di dispositivo.
È possibile impostare un solo rilevamento inattiva per dispositivo. Le chiamate successive a PoRegisterDeviceForIdleDetection modificare i valori di rilevamento inattiva.
Se sia ConservationIdleTime che PerformanceIdleTime sono zero, questa routine annulla tutto il rilevamento di inattività per il dispositivo e restituisce NULL.
PoRegisterDeviceForIdleDetection può liberare un driver dalla necessità di eseguire il proprio rilevamento inattiva. Tuttavia, i driver possono anche implementare il proprio rilevamento inattiva.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 2000 |
piattaforma di destinazione | Universale |
intestazione | ntifs.h (include Wdm.h, Ntddk.h, Ntifs.h) |
libreria | NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |