Condividi tramite


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

Vedere anche

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy