Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
À compter de Windows 8, l’infrastructure de pilote en mode noyau (KMDF) et les pilotes UMDF (User-Mode Driver Framework) peuvent, en tant qu’option, inscrire leurs routines de service d’interruption (ISR) pour s’exécuter au niveau passif.
Pour plus d’informations sur les ISR de niveau passif pour les pilotes KMDF et UMDF, consultez les rubriques suivantes :
Si un périphérique utilise une broche d’E/S à usage général (GPIO) pour relayer une demande d’interruption au processeur, l’abstraction d’interruption Windows permet facilement au pilote pour cet appareil d’ignorer les détails spécifiques au matériel du contrôleur GPIO auquel appartient cette broche. Lorsque le gestionnaire d’interruption du noyau s’exécute en réponse à une demande d’interruption relayée par GPIO à partir de l’appareil, ce gestionnaire efface ou masque automatiquement, selon les besoins, l’interruption dans les registres matériels GPIO. En outre, le gestionnaire d’interruption du noyau appelle directement l’ISR de l’appareil ou planifie l’exécution de cet ISR dans un autre thread.
Fréquemment, les registres matériels GPIO sont cartographiés en mémoire, auquel cas le gestionnaire de trappes du noyau peut y accéder directement à DIRQL. Toutefois, les registres matériels du périphérique peuvent ne pas être mappés en mémoire, auquel cas, le pilote de périphérique doit utiliser des requêtes d’E/S pour y accéder. Si c’est le cas, l’ISR du pilote de périphérique doit s’exécuter à IRQL = PASSIVE_LEVEL afin qu’il puisse utiliser des demandes d’E/S pour réduire l’interruption ou effectuer la maintenance initiale de l’interruption. Un ISR de niveau passif peut envoyer une requête d’E/S de manière synchrone et, si nécessaire, bloquer jusqu’à ce que la demande soit terminée.
Pour prendre en charge un ISR de niveau passif pour un appareil périphérique qui génère un signal de demande d’interruption déclenchée par un périmètre, le gestionnaire d’interruption du noyau efface l’interruption en attente au niveau de la broche GPIO, puis planifie l’exécution de l’ISR dans un thread de noyau de niveau passif.
Pour prendre en charge un ISR de niveau passif pour un appareil périphérique qui génère un signal de demande d’interruption déclenchée par niveau, le gestionnaire de pièges du noyau masque l’interruption en attente au niveau de la broche GPIO, puis programme l’ISR pour s'exécuter dans un thread noyau de niveau passif. L’ISR est responsable de l’effacement de la demande d’interruption dans l’appareil périphérique. Une fois que l’ISR est retourné, le thread du noyau supprime l’interruption au niveau de la broche GPIO.
Étant donné que l’interruption reste masquée jusqu’à ce que l’ISR retourne, l’ISR de niveau passif de l’appareil doit effectuer uniquement la maintenance initiale de l’interruption, puis revenir pour éviter de retarder les ISR de niveau passif pour d’autres appareils. En règle générale, le pilote doit différer un traitement supplémentaire lié à l’interruption au thread de travail d’interruption, qui s’exécute à une priorité inférieure à celle de l’ISR.