Share via


Gestion de l’alimentation pour les files d’attente d’E/S

Lorsque l’infrastructure reçoit une demande d’E/S dirigée vers l’un des appareils de votre pilote, l’infrastructure place la demande dans une file d’attente d’E/S. Le pilote peut obtenir des demandes d’E/S à partir de la file d’attente d’E/S en fournissant des gestionnaires de requêtes ou en interrogeant la file d’attente. Pour plus d’informations sur les files d’attente d’E/S, consultez Framework Queue Objects.

Lorsque vous concevez votre pilote, vous devez regrouper les demandes d’E/S que votre pilote recevra en deux catégories :

  1. Demandes qui nécessitent qu’un appareil soit dans son état de fonctionnement (D0), notamment :

    • Demandes de lecture ou d’écriture qui nécessitent le pilote de fonction de l’appareil pour lire les données de l’appareil ou écrire des données dans l’appareil.
    • Le contrôle d’appareil demande qu’un pilote de fonction ou de bus ne peut pas traiter sans accéder à l’appareil.
  2. Demandes qui ne nécessitent pas qu’un appareil soit dans son état de fonctionnement (D0), notamment :

    • Le contrôle d’appareil demande qu’un pilote de fonction ou de bus peut traiter sans accéder à l’appareil.
    • Peut-être toutes les requêtes qu’un pilote de filtre reçoit.
    • Toutes les demandes reçues par tous les pilotes d’une pile de pilotes, si la pile prend en charge un périphérique logiciel uniquement qui ne communique avec aucun matériel.

Sauf si vous écrivez un pilote de filtre ou un pilote pour une pile qui ne communique pas avec le matériel, il est probable que votre pilote recevra certaines demandes qui nécessitent que l’appareil soit dans son état de fonctionnement, ainsi que d’autres qui ne le font pas.

Pour prendre en charge ces deux types de demandes, l’infrastructure fournit deux types de files d’attente d’E/S : celles qui sont gérées par l’alimentation et celles qui ne le sont pas. Lorsque votre pilote crée chacune de ses files d’E/S, il définit le membre PowerManaged de la structure WDF_IO_QUEUE_CONFIG de la file d’attente sur WdfTrue ou WdfFalse pour indiquer l’un des éléments suivants :

  • Si votre pilote définit PowerManaged sur WdfTrue, la file d’attente est gérée par l’alimentation.

    Lorsque les demandes d’E/S sont disponibles dans une file d’attente gérée par l’alimentation, l’infrastructure remet les requêtes au pilote uniquement si l’appareil est dans son état de fonctionnement (D0). Par conséquent, chaque fois que votre pilote reçoit une demande d’une file d’attente gérée par l’alimentation, l’infrastructure garantit que l’appareil est disponible. Si l’appareil n’est pas dans son état de fonctionnement, l’infrastructure stocke les requêtes dans la file d’attente jusqu’à ce que l’appareil soit disponible.

    Si l’appareil est à faible consommation d’énergie parce qu’il est inactif et si l’infrastructure place une demande d’E/S dans l’une des files d’attente gérées par l’alimentation de votre pilote, l’infrastructure demande à la pile de pilotes de restaurer l’appareil à son état de fonctionnement avant de remettre la demande à votre pilote.

    Si l’appareil est à faible consommation d’énergie, car le système n’est pas dans son état de fonctionnement (S0) et si l’infrastructure place une demande d’E/S dans l’une des files d’attente gérées par l’alimentation de votre pilote, l’infrastructure attend que l’appareil revienne à son état de fonctionnement (D0), puis remet la demande à votre pilote.

    Étant donné que l’infrastructure ne transmet pas les demandes d’E/S d’une file d’attente gérée par l’alimentation au pilote si l’appareil n’est pas dans son état de fonctionnement, les pilotes situés au-dessus du propriétaire de la stratégie d’alimentationdans la pile des pilotes ne doivent pas utiliser de files d’attente d’E/S gérées par l’alimentation. Si un pilote situé au-dessus du propriétaire de la stratégie d’alimentation utilise une file d’attente gérée par l’alimentation et si l’appareil est à faible consommation d’énergie, le pilote ne reçoit pas la demande et ne peut pas la transmettre au propriétaire de la stratégie d’alimentation. Par conséquent, le propriétaire de la stratégie d’alimentation, qui contrôle l’état d’alimentation de l’appareil, ne réveille pas l’appareil.

  • Si votre pilote définit PowerManaged sur WdfFalse, la file d’attente n’est pas gérée par l’alimentation.

    Lorsque les demandes d’E/S sont disponibles dans une file d’attente qui n’est pas gérée par l’alimentation, l’infrastructure remet les requêtes au pilote, que l’appareil soit dans son état de fonctionnement (D0). Si vous avez configuré votre file d’attente pour qu’elle ne reçoive que les demandes qui ne nécessitent pas d’accéder à l’appareil, votre pilote peut traiter chaque requête, même si l’appareil n’est pas disponible.

Pour plus d’informations sur les files d’attente d’E/S gérées par l’alimentation, consultez Utilisation de Power-Managed files d’attente d’E/S.

Quelques pilotes nécessitent un contrôle direct sur Plug-and-Play (PnP) et les opérations de gestion de l’alimentation. Ces pilotes peuvent utiliser des E/S autogérées. Pour plus d’informations, consultez Utilisation Self-Managed E/S.