Partager via


MINIPORT_INTERRUPT_DPC fonction de rappel (ndis.h)

Un pilote miniport doit fournir une fonction MiniportInterruptDPC si le pilote appelle la fonction NdisMRegisterInterruptEx pour inscrire une interruption.

Note Vous devez déclarer la fonction à l’aide du type MINIPORT_INTERRUPT_DPC . Pour plus d’informations, consultez la section Exemples suivante.
 

Syntaxe

MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;

void MiniportInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
  [in] PVOID NdisReserved2
)
{...}

Paramètres

[in] MiniportInterruptContext

Handle pour 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 .

[in] MiniportDpcContext

Pointeur vers une zone de contexte fournie par le pilote miniport quand il a appelé la fonction NdisMQueueDpcEx ou NdisMQueueDpc . Si NDIS a appelé MiniportInterruptDPC parce que le pilote miniport a retourné un masque de bits dans le paramètre TargetProcessors de la fonction MiniportInterrupt , MiniportDpcContext a la valeur NULL.

[in] ReceiveThrottleParameters

Pointeur vers un NDIS_RECEIVE_THROTTLE_PARAMETERS structure. Cette structure spécifie le nombre maximal de structures NET_BUFFER_LIST qu’un pilote de miniport doit indiquer dans un DPC.

[in] NdisReserved2

Réservé pour NDIS.

Valeur de retour

None

Remarques

Les pilotes Miniport qui enregistrent une interruption avec la fonction NdisMRegisterInterruptEx doivent fournir une fonction MiniportInterruptDPC .

NDIS appelle MiniportInterruptDPC pour terminer le traitement différé d’une interruption. Le pilote miniport peut appeler la fonction NdisMQueueDpcEx ou NdisMQueueDpc pour demander des appels supplémentaires de procédure différée (DPC) pour d’autres processeurs.

Les pilotes miniport déterminent la source de chaque interruption et prennent les mesures appropriées. Par exemple, si une interruption indique l’achèvement d’une opération de transmission, le pilote miniport effectue une demande d’envoi en attente. Si la source de l’interruption est une modification de l’état du lien, le pilote miniport indique le nouveau lien status vers NDIS. S’il existe des paquets de réception en attente, le pilote miniport indique les paquets à NDIS.

Un pilote miniport qui prend en charge la mise à l’échelle côté réception (RSS) et dont la fonctionnalité est activée examine ses files d’attente de réception dans MiniportInterruptDPC. La carte réseau peut avoir déjà mis en file d’attente les paquets reçus sur des files d’attente distinctes basées sur des valeurs de hachage, si la carte réseau fournit ces fonctionnalités. Sinon, le pilote miniport peut trier les paquets dans des files d’attente distinctes dans MiniportInterruptDPC.

MiniportInterruptDPC appelle le Fonction NdisMIndicateReceiveNetBufferLists pour indiquer les paquets sur le processeur actuel. MiniportInterruptDPC peut identifier le traitement requis pour d’autres processeurs et demander à NDIS de planifier des DCP sur des processeurs où un DPC n’est pas en attente.

Si le DPC actuel s’exécute sur le même processeur que la fonction MiniportInterrupt , le pilote miniport doit indiquer tous les paquets qui n’ont pas pu être mappés à un processeur. Si ce DPC est le dernier DPC planifié et qu’il ne demande pas de DPC supplémentaires, MiniportInterruptDPC doit réactiver les interruptions sur la carte réseau avant qu’elle ne retourne.

Les interruptions sont généralement déjà désactivées sur la carte réseau dans la fonction MiniportInterrupt avant que NDIS appelle MiniportInterruptDPC. Avant de retourner le contrôle, MiniportInterruptDPC peut réactiver les interruptions. Si le pilote miniport a mis en file d’attente d’autres PDC alors que les interruptions ont été désactivées, le pilote doit activer les interruptions avant le dernier retour de DPC.

Les pilotes miniport doivent limiter le nombre de mémoires tampons de réception qu’ils indiquent pendant le traitement d’un lot DPC d’interruption à effectuer dans le délai imparti. Un lot DPC d’interruption est la collection de tous les DPC qui s’exécutent après l’ISR et avant que les interruptions ne soient réactivées.

Un pilote miniport peut appeler le Fonction NdisMDeregisterInterruptEx à partir de sa fonction MiniportInitializeEx ou MiniportHaltEx pour libérer les ressources qu’elle a allouées avec NdisMRegisterInterruptEx. Une fois que NdisMDeregisterInterruptEx est retourné, NDIS n’appelle pas la fonction MiniportInterrupt ou MiniportInterruptDPC d’un pilote miniport.

NDIS appelle MiniportInterruptDPC à IRQL = DISPATCH_LEVEL.

Exemples

Pour définir une fonction MiniportInterruptDPC , 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 fonction permet à l’analyse du code pour les pilotes, au vérificateur de pilotes statiques (SDV) et à d’autres outils de vérification de trouver des erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction MiniportInterruptDPC nommée « MyInterruptDPC », utilisez le type MINIPORT_INTERRUPT_DPC comme indiqué dans cet exemple de code :

MINIPORT_INTERRUPT_DPC MyInterruptDPC;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MyInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

Le type de fonction MINIPORT_INTERRUPT_DPC est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lors de l’exécution des 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_INTERRUPT_DPC 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 Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge dans NDIS 6.0 et versions ultérieures.
Plateforme cible Windows
En-tête ndis.h (inclure Ndis.h)
IRQL DISPATCH_LEVEL

Voir aussi

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

NDIS_RECEIVE_THROTTLE_PARAMETERS NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)