Funzione PoRegisterDeviceForIdleDetection (ntifs.h)

La routine PoRegisterDeviceForIdleDetection abilita o annulla il rilevamento inattiva e imposta i valori di timeout inattive 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 alla DEVICE_OBJECT creata 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 effettivi.

[in] PerformanceIdleTime

Imposta il valore di timeout (in secondi) da applicare quando i criteri di alimentazione del sistema ottimizzano le prestazioni. Specificare zero per disabilitare il rilevamento inattiva quando i criteri di prestazioni sono effettivi.

[in] State

Specifica lo stato di alimentazione del dispositivo da richiedere in una richiesta di IRP_MN_SET_POWER quando è stata soddisfatta l'opzione ConservationIdleTime o PerformanceIdleTime. I valori possibili sono i valori DEVICE_POWER_STATE .

Valore restituito

PoRegisterDeviceForIdleDetection restituisce un puntatore al contatore inattiva per indicare che è stato abilitato il rilevamento inattiva. 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.

Commenti

PoRegisterDeviceForIdleDetection consente ai driver di usare il meccanismo di rilevamento inattiva fornito da Power Manager. I driver chiamano PoRegisterDeviceForIdleDetection per uno dei motivi seguenti:

  • Per abilitare il rilevamento inattiva per il dispositivo e impostare i valori di timeout di inattività iniziali.
  • Per modificare i valori di timeout inattive 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 inattiva non NULL restituito da PoRegisterDeviceForIdleDetection. La chiamata a PoSetDeviceBusy riavvia il countdown inattiva. Si noti che un driver non deve passare un puntatore NULL a PoSetDeviceBusy.

Ogni volta che il dispositivo soddisfa il valore di timeout inattiva corrente, power manager invia una richiesta di IRP_MN_SET_POWER all'inizio dello stack di dispositivi, specificando lo stato di alimentazione del dispositivo. In risposta all'IRP, ogni driver esegue 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 del bus, il 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 per la conservazione; il valore PerformanceIdleTime si applica quando i criteri di alimentazione del sistema ottimizzano per 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 la conservazione.

Alcuni dispositivi possono specificare i valori di timeout di -1 per usare i timeout di power policy standard per la classe del dispositivo. I valori di timeout standard offrono 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 viene specificato -1 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 modificano i valori di rilevamento inattive.

Se sia ConservationIdleTime che PerformanceIdleTime sono zero, questa routine annulla tutto il rilevamento inattiva per il dispositivo e restituisce NULL.

PoRegisterDeviceForIdleDetection può liberare un driver dalla necessità di eseguire il rilevamento inattiva. Tuttavia, i driver possono anche implementare il rilevamento inattiva.

Requisiti

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

Vedi anche

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy