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 |