Fonction PoRegisterDeviceForIdleDetection (ntifs.h)

La routine PoRegisterDeviceForIdleDetection active ou annule la détection inactif et définit des valeurs de délai d’inactivité pour un appareil.

Syntaxe

PULONG PoRegisterDeviceForIdleDetection(
  [in] PDEVICE_OBJECT     DeviceObject,
  [in] ULONG              ConservationIdleTime,
  [in] ULONG              PerformanceIdleTime,
  [in] DEVICE_POWER_STATE State
);

Paramètres

[in] DeviceObject

Pointeur vers le DEVICE_OBJECT créé par le pilote pour l’appareil. Ce paramètre peut pointer vers un objet d’appareil physique (PDO) ou un objet d’appareil fonctionnel (FDO).

[in] ConservationIdleTime

Définit la valeur de délai d’attente (en secondes) à appliquer lorsque la stratégie d’alimentation du système s’optimise pour la conservation de l’énergie. Spécifiez zéro pour désactiver la détection inactif lorsque la stratégie de conservation est en vigueur.

[in] PerformanceIdleTime

Définit la valeur de délai d’attente (en secondes) à appliquer lorsque la stratégie d’alimentation du système optimise les performances. Spécifiez zéro pour désactiver la détection inactif lorsque la stratégie de performances est en vigueur.

[in] State

Spécifie l’état d’alimentation de l’appareil à demander dans une demande de IRP_MN_SET_POWER lorsque ConservationIdleTime ou PerformanceIdleTime a été atteint. Les valeurs possibles sont les valeurs DEVICE_POWER_STATE .

Valeur retournée

PoRegisterDeviceForIdleDetection retourne un pointeur vers le compteur inactif pour indiquer que la détection d’inactivité a été activée. Elle retourne null pour indiquer que la détection inactif a été désactivée, qu’un compteur inactif n’a pas pu être alloué ou qu’une ou les deux valeurs de délai d’attente n’étaient pas valides.

Remarques

PoRegisterDeviceForIdleDetection permet aux pilotes d’utiliser le mécanisme de détection d’inactivité fourni par le gestionnaire d’alimentation. Les pilotes appellent PoRegisterDeviceForIdleDetection pour l’une des raisons suivantes :

  • Pour activer la détection d’inactivité pour l’appareil et définir les valeurs initiales de délai d’inactivité.
  • Pour modifier les valeurs de délai d’inactivité d’un appareil.
  • Pour désactiver la détection inactif pour un appareil.

Après avoir activé un appareil pour la détection d’inactivité, un pilote appelle PoSetDeviceBusy chaque fois que l’appareil est utilisé, en passant le pointeur inactif non NULL retourné par PoRegisterDeviceForIdleDetection. L’appel de PoSetDeviceBusy redémarre le compte à rebours inactif. Notez qu’un pilote ne doit pas passer de pointeur NULL à PoSetDeviceBusy.

Chaque fois que l’appareil satisfait à la valeur actuelle de délai d’inactivité, le gestionnaire d’alimentation envoie une demande de IRP_MN_SET_POWER en haut de la pile de l’appareil, en spécifiant l’état d’alimentation de l’appareil. En réponse à l’IRP, chaque pilote effectue toutes les tâches spécifiques à l’appareil requises avant la transition de l’état d’alimentation, puis passe l’IRP au pilote inférieur suivant. Lorsque l’IRP atteint le pilote de bus, ce pilote place l’appareil dans l’état d’alimentation inférieur demandé et termine l’IRP.

PoRegisterDeviceForIdleDetection définit des valeurs de délai d’attente pour la conservation et les performances. La valeur ConservationIdleTime s’applique lorsque la stratégie d’alimentation du système est optimisée pour la conservation ; la valeur PerformanceIdleTime s’applique lorsque la stratégie d’alimentation système optimise les performances. En règle générale, la stratégie applicable dépend de la source d’alimentation : lors de l’exécution avec l’alimentation CA, le système optimise les performances et, lorsque vous utilisez une batterie, le système optimise pour la conservation.

Certains appareils peuvent spécifier des valeurs de délai d’expiration de -1 pour utiliser les délais d’expiration de la stratégie d’alimentation standard pour leur classe d’appareil. Les valeurs de délai d’attente standard fournissent une meilleure intégration système pour les classes d’appareils standard prises en charge. À l’heure actuelle, WDM prend en charge cette fonctionnalité pour les appareils de type FILE_DEVICE_DISK et FILE_DEVICE_MASS_STORAGE. PoRegisterDeviceForIdleDetection retourne NULL si -1 est spécifié pour un appareil d’un type non pris en charge. Pour plus d’informations sur les types d’appareils, consultez Spécification de types d’appareils.

Une seule détection d’inactivité peut être définie par appareil. Les appels suivants à PoRegisterDeviceForIdleDetection modifient les valeurs de détection inactives.

Si ConservationIdleTime et PerformanceIdleTime sont tous deux zéro, cette routine annule toutes les détections inactives pour l’appareil et retourne NULL.

PoRegisterDeviceForIdleDetection peut libérer un pilote de la nécessité d’effectuer sa propre détection d’inactivité. Toutefois, les pilotes peuvent également implémenter leur propre détection d’inactivité.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000
Plateforme cible Universal
En-tête ntifs.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy