Partager via


Dispatch IRQL Tracking

Pour améliorer les performances du système, certaines fonctions NDIS (par exemple, la fonction MiniportSendNetBufferLists ) incluent un indicateur de niveau de répartition qui indique l’IRQL actuel. L’utilisation appropriée de l’indicateur de niveau de répartition peut vous aider à éviter les tentatives inutiles de définition de l’IRQL.

Il existe d’autres indicateurs qui contrôlent d’autres attributs, mais les noms des indicateurs de niveau de répartition sont les suivants :

NDIS_SEND_FLAGS_DISPATCH_LEVEL

NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

NDIS_RETURN_FLAGS_DISPATCH_LEVEL

NDIS_RWL_AT_DISPATCH_LEVEL

L’appelant doit déterminer le paramètre d’indicateur de niveau de répartition à partir de l’IRQL actuel connu, et non en testant l’IRQL. Par exemple, vous connaissez l’IRQL, car il s’agit d’une caractéristique fixe de la conception du pilote, ou le pilote a enregistré l’IRQL actuel.

Si l’IRQL actuel connu est DISPATCH_LEVEL, l’appelant doit définir cet indicateur. Si l’IRQL actuel est inconnu ou si l’appelant n’est pas en cours d’exécution à DISPATCH_LEVEL, l’appelant doit effacer cet indicateur. Si l’appelant est NDIS, la fonction appelée doit tester cet indicateur pour éviter de modifier l’IRQL.

Les pilotes ne doivent pas tester l’IRQL pour déterminer la valeur de l’indicateur de niveau de répartition. Le test irait à l’échec de l’objectif de l’indicateur. Si nécessaire, la fonction appelée peut simplement effectuer le test elle-même. La façon dont un pilote détermine qu’il doit ou ne doit pas définir l’indicateur est laissée à la conception du pilote particulier.