Partager via


IRQL dans les pilotes réseau

Chaque fonction de pilote appelée par NDIS s’exécute sur un IRQL déterminé par le système (l’un des PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL). Par exemple, la fonction d’initialisation d’un pilote miniport, la fonction d’arrêt , la fonction de réinitialisation et la fonction d’arrêt s’exécutent généralement à PASSIVE_LEVEL, bien que les fonctions de réinitialisation et d’arrêt puissent être appelées à un IRQL plus élevé si le système en a besoin. Le code d’interruption s’exécute sur DIRQL, de sorte qu’un pilote intermédiaire ou de protocole NDIS ne s’exécute jamais sur DIRQL. Toutes les autres fonctions du pilote NDIS s’exécutent à la valeur IRQL = DISPATCH_LEVEL.

L’IRQL auquel une fonction de pilote s’exécute affecte les fonctions NDIS qu’elle peut appeler. Certaines fonctions peuvent être appelées uniquement dans IRQL = PASSIVE_LEVEL. D’autres peuvent être appelées à DISPATCH_LEVEL ou moins. Vous devez case activée chaque fonction NDIS pour les restrictions IRQL.

Toute fonction de pilote qui partage des ressources avec la routine de service d’interruption (ISR) du pilote doit être en mesure d’augmenter son IRQL en DIRQL pour éviter les conditions de concurrence. NDIS fournit un tel mécanisme.