Partager via


Activation et désactivation des interruptions

Si votre pilote gère les interruptions d’appareil, il doit fournir des fonctions de rappel EvtInterruptEnable et EvtInterruptDisable qui activent et désactivent les interruptions. En règle générale, ces fonctions de rappel s’exécutent au niveau du DIRQL de l’appareil et doivent faire tout ce qui est nécessaire pour activer et désactiver le mécanisme d’interruption d’un appareil. Pour les interruptions de niveau passif, ces fonctions de rappel s’exécutent à IRQL = PASSIVE_LEVEL tout en conservant le verrou d’interruption de niveau passif.

Si votre pilote doit effectuer des opérations supplémentaires liées à l’activation ou à la désactivation des interruptions, et si ces opérations supplémentaires ne peuvent pas être effectuées à IRQL = DIRQL, le pilote peut également fournir des fonctions de rappel EvtDeviceD0EntryPostInterruptsEnabled et EvtDeviceD0ExitPreInterruptsDisabled . Ces deux fonctions de rappel s’exécutent à IRQL = PASSIVE_LEVEL sans verrou d’interruption et peuvent appeler des méthodes d’objet d’infrastructure qui ne sont pas disponibles dans IRQL = DIRQL.

L’infrastructure appelle les fonctions de rappel EvtInterruptEnable et EvtDeviceD0EntryPostInterruptsEnabled chaque fois que l’appareil entre dans son état de travail (D0), une fois que l’infrastructure a appelé la fonction de rappel EvtDeviceD0Entry du pilote.

L’infrastructure appelle les fonctions de rappel EvtDeviceD0ExitPreInterruptsDisabled et EvtInterruptDisable du pilote chaque fois que l’appareil quitte son état de fonctionnement, avant que l’infrastructure n’appelle la fonction de rappel EvtDeviceD0Exit du pilote. Pour plus d’informations sur le moment où l’infrastructure appelle les fonctions de rappel d’un pilote, consultez Scénarios pnP et de gestion de l’alimentation.

Vous ne devez pas supposer qu’un appareil utilisera les mêmes ressources d’interruption chaque fois que l’infrastructure appelle la fonction de rappel EvtInterruptEnable de votre pilote. Parfois, le gestionnaire PnP redistribue les ressources système et peut affecter de nouvelles ressources d’interruption à votre appareil.

Le pilote peut appeler WdfInterruptGetInfo pour déterminer les ressources d’interruption d’un appareil. Le pilote peut appeler WdfInterruptGetDevice pour déterminer l’appareil auquel appartient un objet d’interruption. (Quelques pilotes peuvent appeler WdfInterruptWdmGetInterrupt.)

Pour activer et désactiver les interruptions directement, le pilote peut appeler les méthodes WdfInterruptEnable et WdfInterruptDisable de l’objet d’interruption, qui appellent les fonctions de rappel d’événements EvtInterruptEnable et EvtInterruptDisable du pilote. Toutefois, la plupart des pilotes doivent simplement autoriser l’infrastructure à appeler les fonctions de rappel EvtInterruptEnable et EvtInterruptDisable au bon moment.