Partager via


Utilisation de Self-Managed E/S

La plupart des pilotes basés sur l’infrastructure tirent parti des fonctionnalités PnP et de gestion de l’alimentation de l’infrastructure pour les appareils qu’ils prennent en charge. En d’autres termes, la plupart des pilotes basés sur l’infrastructure permettent au framework de gérer les états PnP et d’alimentation d’un appareil en procédant comme suit :

  • Fourniture des fonctions de rappel EvtDeviceD0Entry et EvtDeviceD0Exit .

  • Fourniture des fonctions de rappel EvtDevicePrepareHardware et EvtDeviceReleaseHardware .

  • Utilisation de files d’attente gérées par l’alimentation pour les demandes d’E/S qui nécessitent que l’appareil soit dans son état de fonctionnement, et utilisation de files d’attente qui ne sont pas gérées par l’alimentation pour toutes les autres demandes.

Toutefois, quelques pilotes basés sur l’infrastructure nécessitent une meilleure connaissance de l’état de leurs appareils, y compris les pilotes dans les situations suivantes :

  • Les opérations qu’un pilote effectue ne sont pas déterminées par un ensemble de demandes d’E/S que le pilote reçoit des files d’attente d’E/S du framework.

  • Un pilote communique avec des pilotes non-framework plus anciens et traite directement avec les interfaces WDM.

  • Les demandes d’E/S qu’un pilote reçoit ne peuvent pas être divisées en deux groupes : celles qui nécessitent que l’appareil soit dans son état de fonctionnement et celles qui ne le font pas.

La plupart des pilotes ne se trouvent pas dans l’une des situations précédentes, mais si votre pilote l’est, il peut avoir besoin d’avoir un contrôle plus direct sur le PnP et les opérations de gestion de l’alimentation de l’appareil. Ces pilotes peuvent utiliser des E/S autogérées. L’utilisation d’E/S autogérées signifie que le pilote est averti (au moyen d’un ensemble de fonctions de rappel) chaque fois que ses appareils sont branchés ou débranchés, et chaque fois que l’appareil est temporairement arrêté.

Notez qu’un pilote peut utiliser des E/S autogérées tout en continuant d’utiliser les files d’attente d’E/S de l’infrastructure, en tant que files d’attente gérées par l’alimentation ou non. Par exemple, un pilote peut utiliser les files d’attente d’E/S de l’infrastructure, et non pas gérées par l’alimentation, avec un ensemble de fonctions de rappel d’E/S autogérées.

Pour utiliser des E/S auto-managées, le pilote enregistre un ensemble supplémentaire de fonctions de rappel d’événements lorsqu’il appelle WdfDeviceInitSetPnpPowerEventCallbacks. Ces fonctions de rappel d’événement sont les suivantes :

Lorsque votre appareil passe à son état de fonctionnement (D0) pour la première fois, l’infrastructure appelle la fonction de rappel EvtDeviceSelfManagedIoInit de votre pilote. Cela se produit chaque fois qu’un utilisateur branche votre appareil dans le système et chaque fois que le système est redémarré.

Il existe trois circonstances dans lesquelles un pilote doit arrêter les opérations d’E/S d’un appareil : l’appareil est sur le point de passer à un état de faible consommation, il est sur le point d’être supprimé ou il a déjà été supprimé de manière inattendue. La liste suivante examine chacune de ces circonstances en détail :

  • L’appareil est sur le point de passer à un état de faible consommation d’énergie et finira par revenir à son état de fonctionnement.

    Lorsque votre appareil est sur le point d’entrer dans un état de faible consommation (parce que votre appareil est inactif, que le système entier entre dans un état de faible consommation ou que le gestionnaire PnP redistribue les ressources matérielles système), le framework appelle la fonction de rappel EvtDeviceSelfManagedIoSuspend de votre pilote. Une fois que l’appareil entre à nouveau son état de fonctionnement, le framework appelle la fonction de rappel EvtDeviceSelfManagedIoRestart de votre pilote.

  • L’appareil est sur le point d’être supprimé.

    Pour gérer la suppression d’appareil demandée par l’utilisateur, l’infrastructure appelle la fonction de rappel EvtDeviceSelfManagedIoSuspend de votre pilote avant d’arrêter l’appareil. Après l’arrêt de l’appareil, le framework appelle la fonction de rappel EvtDeviceSelfManagedIoFlush de votre pilote. Une fois l’appareil supprimé, le framework appelle la fonction de rappel EvtDeviceSelfManagedIoCleanup .

  • L’appareil a déjà été supprimé de manière inattendue (suppression surprise).

    Si le pilote du bus de l’appareil détermine que le périphérique n’est plus présent, ou si un autre pilote dans la pile détermine que le périphérique ne répond pas, le pilote qui a détecté le problème en informe le gestionnaire PnP. Le gestionnaire PnP informe ensuite le reste des pilotes que l’appareil a disparu. Pour les pilotes basés sur l’infrastructure, le framework reçoit le message du gestionnaire PnP et appelle les fonctions de rappel EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlush et EvtDeviceSelfManagedIoCleanup de votre pilote.

    (Votre pilote peut également inscrire une fonction de rappel EvtDeviceSurpriseRemoval . Si l’appareil était dans son état opérationnel (D0) lors de sa suppression, le framework appelle EvtDeviceSurpriseRemoval avant d’appeler les fonctions de rappel d’E/S autogérées. Si l’appareil était dans un état de faible consommation lors de sa suppression, EvtDeviceSurpriseRemoval est appelé après EvtDeviceSelfManagedIoSuspend)

Pour plus d’informations sur l’ordre dans lequel l’infrastructure appelle les fonctions de rappel d’événements d’un pilote, consultez Scénarios pnP et de gestion de l’alimentation.

Bien que rarement nécessaire, l’infrastructure permet aux pilotes d’avoir encore plus de contrôle sur les états PnP et d’alimentation d’un appareil, en accédant aux machines d’état dans l’infrastructure.