Prise en charge des Power-Down inactifs dans les pilotes UMDF
Avertissement
UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2.
Les exemples UMDF 1 archivés sont disponibles dans la mise à jour des exemples de pilotes Windows 11, version 22H2 - Mai 2022.
Pour plus d’informations, consultez Prise en main avec UMDF.
Certains appareils peuvent entrer en état de veille pendant que le système reste dans son état de fonctionnement. Pour ces appareils, l’infrastructure lance la baisse de l’alimentation de l’appareil une fois que l’appareil a été inactif (non utilisé) pendant une durée prédéterminée (et paramétrable).
Certains de ces appareils peuvent également déclencher un signal de mise en éveil sur le bus lorsqu’ils détectent un événement externe. Le pilote de bus répond à ce signal, et la pile de pilotes restaure le périphérique à son état de fonctionnement. (Les appareils qui ne détectent pas les événements externes restent dans un état de faible consommation d’énergie jusqu’à ce que le framework demande au pilote de bus de lancer la restauration de l’appareil à son état opérationnel.)
Si votre appareil peut être mis hors tension lorsqu’il est inactif, le propriétaire de la stratégie d’alimentation doit effectuer les deux étapes suivantes :
Appelez IWDFDevice2::AssignS0IdleSettings ou IWDFDevice3::AssignS0IdleSettingsEx pour spécifier :
- État de faible consommation que l’appareil entrera
- Durée pendant laquelle l’appareil doit rester inactif avant que son état d’alimentation soit réduit
- Si l’appareil peut détecter un événement externe et déclencher un signal de mise en éveil sur le bus
- Si les utilisateurs peuvent contrôler les paramètres d’inactivité de l’appareil
- Si l’infrastructure peut placer l’appareil dans l’état d’alimentation D3cold lorsque le délai d’inactivité expire
Si votre pilote a été créé avec la version 1.11 ou ultérieure de l’infrastructure, vous pouvez appeler IWDFDevice3::AssignS0IdleSettingsEx au lieu de IWDFDevice2::AssignS0IdleSettings. En plus des fonctionnalités ci-dessus, IWDFDevice3::AssignS0IdleSettingsEx permet au pilote de spécifier :
- Indique si la fonctionnalité d’arrêt inactif de l’appareil est activée ou désactivée
- Si l’appareil reviendra à son état de fonctionnement (D0) lorsque le système revient à son état de fonctionnement (S0)
Implémentez l’interface IPowerPolicyCallbackWakeFromS0 et les fonctions de rappel d’événement suivantes, si vous en avez besoin pour votre appareil :
- IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0, qui permet au matériel de l’appareil (et non au bus) de répondre à un événement de mise en éveil externe.
- IPowerPolicyCallbackWakeFromS0::OnDisarmWakeFromS0, qui désactive la capacité de l’appareil (et non la capacité du bus) à répondre à un événement de mise en éveil externe.
- IPowerPolicyCallbackWakeFromS0::OnWakeFromS0Triggered, qui informe le pilote que le bus a détecté un signal de sortie de veille.
L’infrastructure considère que l’appareil est inactif et commence à compter le temps d’inactivité, lorsque toutes les conditions suivantes sont remplies :
- Aucune des files d’attente gérées par l’alimentation créées pour cet appareil n’instance avoir de demandes en attente dans la file d’attente ou envoyées au pilote. Si une requête a été envoyée au pilote et que le pilote l’a envoyée à une cible d’E/S, la demande est toujours liée à la file d’attente et l’appareil n’est pas considéré comme inactif. Les demandes dans les files d’attente non gérées par l’alimentation ne sont pas comptabilisées dans les appareils inactifs.
- Si le pilote a précédemment appelé IWDFDevice2::StopIdle, il a ensuite appelé IWDFDevice2::ResumeIdle.
- Si le propriétaire de la stratégie d’alimentation est un pilote de bus, aucun des périphériques enfants du pilote de bus n’est en D0.
Si votre pilote (ou un utilisateur) active l’arrêt inactif de votre appareil, vous devrez peut-être utiliser la méthode IWDFDevice2::StopIdle . Si l’appareil est dans son état opérationnel (D0), cette méthode empêche l’appareil de fonctionner jusqu’à ce que le pilote appelle IWDFDevice2::ResumeIdle. Si l’appareil est dans un état de faible consommation lorsque le pilote appelle IWDFDevice2::StopIdle, et si le système est dans son état de fonctionnement (S0), le framework demande au pilote de bus de restaurer l’appareil à son état opérationnel (D0). Pour plus d’informations sur le moment où votre pilote peut être amené à appeler IWDFDevice2::StopIdle, consultez la page de référence de la méthode.
Si l’appareil peut sortir d’un état de faible consommation, le pilote du bus de l’appareil participe au réveil de l’appareil. Le pilote de bus en mode noyau fait tout ce qui est nécessaire sur l’adaptateur de bus pour activer et désactiver la capacité d’un appareil à sortir d’un état de faible consommation.
Pour plus d’informations sur les entrées de Registre qui contrôlent les fonctionnalités inactives d’un appareil, consultez Contrôle utilisateur du comportement d’inactivité et de veille de l’appareil dans UMDF.