Fonction PoRegisterDeviceForIdleDetection (wdm.h)

La routine PoRegisterDeviceForIdleDetection active ou annule la détection d’inactivité 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. Sur les systèmes Windows 2000 et versions ultérieures, ce paramètre peut pointer vers un objet d’appareil physique (PDO) ou un objet d’appareil fonctionnel (FDO). Sur Windows 98/Me, ce paramètre doit pointer vers l’AOP de l’appareil sous-jacent.

[in] ConservationIdleTime

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

[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 d’inactivité 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 d’inactivité a été désactivée, qu’un compteur inactif n’a pas pu être alloué ou que l’une des valeurs de délai d’attente ou les deux 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 de délai d’inactivité initiales
  • Pour modifier les valeurs de délai d’inactivité d’un appareil
  • Pour désactiver la détection d’inactivité pour un appareil
Après avoir activé un appareil pour la détection d’inactivité, un pilote appelle [PoSetDeviceBusy](./nf-wdm-posetdevicebusy.md) chaque fois que l’appareil est en cours d’utilisation, 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 du 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 au périphérique requises avant la transition de l’état d’alimentation, puis transmet l’IRP au pilote inférieur suivant. Lorsque l’IRP atteint le pilote de bus, ce pilote place le périphérique dans l’état d’alimentation inférieure 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 optimise 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 secteur, le système optimise les performances, et lorsque vous utilisez une batterie, le système optimise la conservation.

Certains appareils peuvent spécifier des valeurs de délai d’attente 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 du système pour les classes d’appareils standard prises en charge. Actuellement, 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 des 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 d’inactivité.

Si ConservationIdleTime et PerformanceIdleTime sont tous deux zéro, cette routine annule toutes les détections d’inactivité 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 Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy