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 requête 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 demandes 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 nécessitant qu’un appareil soit dans son état de travail (D0), notamment :

    • Les demandes de lecture ou d’écriture qui nécessitent le pilote de fonction de l’appareil pour lire des données ou écrire des données dans l’appareil.
    • Le contrôle d’appareil demande qu’une fonction ou un pilote bus ne puisse pas être en service sans accéder à l’appareil.
  2. Demandes qui ne nécessitent pas qu’un appareil soit dans son état de travail (D0), notamment :

    • Le contrôle d’appareil demande à un pilote de fonction ou de bus de service sans accéder à l’appareil.
    • Éventuellement toutes les demandes reçues par un pilote de filtre.
    • 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 certains qui ne le font pas.

Pour prendre en charge ces deux types de requêtes, 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’attente d’E/S, il définit le membre PowerManaged dans la structure WDF_IO_QUEUE_CONFIG de la file d’attente sur WdfTrue ou WdfFalse pour indiquer l’une des options suivantes :

  • 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 dans un état à faible alimentation, car 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 des pilotes de restaurer l’appareil à son état de fonctionnement avant de remettre la demande à votre pilote.

    Si l’appareil est dans un état à faible alimentation, 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 retourne à son état de travail (D0), puis remet la demande à votre pilote.

    Étant donné que l’infrastructure ne remet 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’alimentation dans la pile des pilotes ne doivent pas utiliser les 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 dans un état de faible alimentation, le pilote ne reçoit pas la demande et ne peut pas le 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 de l’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 demandes au pilote, que l’appareil soit dans son état de fonctionnement (D0). Si vous avez configuré votre file d’attente pour qu’elle reçoive uniquement les demandes qui ne nécessitent pas d’accès à 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 des files d’attente d’E/S gérées par Power.

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 auto-managées. Pour plus d’informations, consultez Utilisation d’E/S auto-managées.