MINIPORT_ISR fonction de rappel (ndis.h)
NDIS appelle la fonction MiniportInterrupt lorsqu’une carte réseau, ou un autre appareil qui partage l’interruption avec la carte réseau, génère une interruption.
Syntaxe
MINIPORT_ISR MiniportIsr;
BOOLEAN MiniportIsr(
[in] NDIS_HANDLE MiniportInterruptContext,
[out] PBOOLEAN QueueDefaultInterruptDpc,
[out] PULONG TargetProcessors
)
{...}
Paramètres
[in] MiniportInterruptContext
Handle vers un bloc d’informations de contexte d’interruption. Le pilote miniport a fourni cette poignée dans le paramètre MiniportInterruptContext que le pilote miniport a transmis au fonction NdisMRegisterInterruptEx.
[out] QueueDefaultInterruptDpc
Pointeur vers une variable BOOLEAN définie par le pilote miniport avant de retourner à partir de cet appel. Un pilote miniport définit cette valeur sur TRUE pour indiquer que le pilote requiert une DPC sur le processeur par défaut (actuel). Si cette valeur est définie sur TRUE, NDIS ignore la valeur du paramètre TargetProcessors. S’il est défini sur FALSE, NDIS utilise la valeur du paramètre TargetProcessors pour planifier des contrôleurs de domaine. Si QueueDefaultInterruptDpc est TRUE, NDIS planifie un DPC, quelle que soit la valeur de retour de MiniportInterrupt.
[out] TargetProcessors
Masque de bits qui indique les processeurs cibles pour lesquels NDIS doit planifier une DPC. Ce masque de bits représente les 32 premiers processeurs du groupe de processeurs 0. Chaque bit dans le masque de bits identifie un processeur. Si l’appelant définit le bit 0, NDIS planifie une DPC pour l’UC 0. Si l’appelant définit le bit 1, NDIS planifie une DPC pour le processeur 1, et ainsi de suite. Si QueueDefaultInterruptDpc a la valeur FALSE et que TargetProcessors est défini sur zéro, NDIS ne planifie aucune DPC. Sinon, NDIS planifie les contrôleurs de domaine, quelle que soit la valeur de retour de MiniportInterrupt.
Valeur de retour
MiniportInterrupt retourne l’une des valeurs suivantes :
Retourner le code | Description |
---|---|
|
MiniportInterrupt déterminé que la carte réseau sous-jacente a généré l’interruption. |
|
MiniportInterrupt déterminé que la carte réseau sous-jacente n’a pas généré l’interruption. |
Remarques
Les pilotes Miniport qui inscrivent une interruption avec la fonction NdisMRegisterInterruptEx doivent fournir une fonction MiniportInterrupt.
Un pilote miniport doit faire le plus peu de travail possible dans sa fonction MiniportInterrupt. Il doit différer les opérations d’E/S pour les interruptions générées par la carte réseau dans la fonction MiniportInterruptDPC.
Lorsqu’une interruption se produit sur la ligne d’interruption d’une carte réseau, NDIS appelle la fonction MiniportInterrupt du pilote MiniportInterrupt.
Toutes les cartes réseau peuvent partager des interruptions basées sur des lignes avec d’autres appareils sur le bus d’E/S. Si la carte réseau n’a pas généré l’interruption, MiniportInterrupt doit retourner FALSE immédiatement afin que le système puisse appeler le pilote de l’appareil qui a généré l’interruption. Si le QueueDefaultInterruptDpc a la valeur FALSE et que le paramètre TargetProcessors est défini sur zéro, NDIS ne planifie pas de contrôleurs de domaine. Dans le cas contraire, NDIS planifie les DPC quelle que soit la valeur de tour deMiniportInterruptde MiniportInterrupt.
Si l’interruption concerne la carte réseau, MiniportInterrupt ignore l’interruption sur la carte réseau, enregistre l’état de l’interruption et reporte autant que possible le traitement des E/S à la fonction MiniportInterruptDPC.
Si la carte réseau sous-jacente a généré l’interruption spécifiée et que le pilote miniport demande des appels de procédure différée (DPCs), le pilote miniport doit désactiver toutes les interruptions supplémentaires de la carte réseau et réactiver les interruptions une fois que toutes les DPCs sont terminées.
Le pilote miniport doit définir QueueDefaultInterruptDpc sur TRUE pour planifier un DPC pour le processeur par défaut uniquement. Le pilote peut le faire, par exemple, si :
- La carte réseau a généré l’interruption pour signaler l’achèvement d’une opération d’envoi, ou toute autre requête qui ne s’exécute pas sur d’autres processeurs.
- La carte réseau a généré l’interruption pour signaler les données reçues et le pilote miniport ne peut pas traiter les paquets reçus dans des contrôleurs de domaine distincts.
- L’interruption indique les paquets reçus et le pilote miniport peut traiter les paquets reçus dans des DPCs distincts, mais ' de réception côté mise à l’échelle (RSS) n’est pas activé pour le pilote miniport. Pour plus d’informations, consultez OID_GEN_RECEIVE_SCALE_CAPABILITIES et OID_GEN_RECEIVE_SCALE_PARAMETERS.
Un pilote miniport peut appeler le fonction NdisMDeregisterInterruptEx de sa fonction MiniportInitializeEx ou MiniportHaltEx pour libérer les ressources qu’elle a allouées avec NdisMRegisterInterruptEx. Une fois NdisMDeregisterInterruptEx retourné, NDIS n’appelle pas la fonction MiniportInterrupt ou MiniportInterruptDPC.
NDIS appelle MiniportInterrupt au DIRQL de l’interruption enregistrée par le pilote miniport dans un appel précédent pour NdisMRegisterInterruptEx. Par conséquent, MiniportInterrupt doit appeler le sous-ensemble des fonctions NDIS, telles que les fonctions NdisRawXxx ou NdisRead/WriteRegisterXxx, qui sont sécurisées pour appeler à n’importe quel irQL.
exemples de
Pour définir une fonction MiniportInterrupt, vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction que vous définissez. Windows fournit un ensemble de types de fonctions pour les pilotes. La déclaration d’une fonction à l’aide des types de fonctions permet d'Analyse du code pour les pilotes, de vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.Par exemple, pour définir une fonction MiniportInterrupt nommée « MyInterrupt », utilisez le type MINIPORT_ISR comme indiqué dans cet exemple de code :
MINIPORT_ISR MyInterrupt;
Ensuite, implémentez votre fonction comme suit :
_Use_decl_annotations_
BOOLEAN
MyInterrupt(
NDIS_HANDLE MiniportInterruptContext,
PBOOLEAN QueueDefaultInterruptDpc,
PULONG TargetProcessors
)
{...}
Le type de fonction MINIPORT_ISR est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction MINIPORT_ISR dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.
Pour plus d’informations sur Use_decl_annotations, consultez annoter le comportement de la fonction.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Prise en charge dans NDIS 6.0 et versions ultérieures. |
plateforme cible | Windows |
d’en-tête | ndis.h (include Ndis.h) |
IRQL | Voir la section Remarques |