MINIPORT_MESSAGE_INTERRUPT_DPC fonction de rappel (ndis.h)

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

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

Syntaxe

MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;

void MiniportMessageInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] ULONG MessageId,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
       PVOID NdisReserved2 PULONG NdisReserved1,
  [in] PULONG NdisReserved2
)
{...}

Paramètres

[in] MiniportInterruptContext

Handle d’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] MessageId

Identificateur de message d’interruption signalée par message (MSI). MessageId est un index d’un IO_INTERRUPT_MESSAGE_INFO_ENTRY structure à l’intérieur d’un IO_INTERRUPT_MESSAGE_INFO structure. NDIS transmet un pointeur vers la structure IO_INTERRUPT_MESSAGE_INFO associée dans le membre MessageInfoTable lorsque le pilote s’inscrit correctement à MSI avec la fonction NdisMRegisterInterruptEx .

[in] MiniportDpcContext

Pointeur vers une zone de contexte fournie par le pilote miniport lorsqu’il a appelé la fonction NdisMQueueDpcEx ou NdisMQueueDpc . Si NDIS a appelé MiniportMessageInterruptDPC , car le pilote miniport a retourné un masque de bits dans le paramètre TargetProcessors du MiniportMessageInterrupt , puis MiniportDpcContext a la valeur NULL.

[in] ReceiveThrottleParameters

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

Note Dans NDIS 6.1 et versions antérieures, ce paramètre est nommé NdisReserved1, son type de données est PULONG et il est réservé à NDIS.
 

NdisReserved1

Réservé à NDIS.

[in] NdisReserved2

Réservé à NDIS.

Note Dans NDIS 6.1 et versions antérieures, le type de données de ce paramètre est PULONG.
 

Valeur de retour

None

Remarques

Les pilotes miniport qui enregistrent une interruption signalée par un message avec la fonction NdisMRegisterInterruptEx doivent fournir une fonction MiniportMessageInterruptDPC .

NDIS appelle MiniportMessageInterruptDPC pour terminer le traitement différé d’une interruption. Le pilote miniport peut appeler la fonction NdisMQueueDpcEx ou NdisMQueueDpc pour demander des appels de procédure différée supplémentaires 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 la fin d’une opération de transmission, le pilote miniport effectue une demande d’envoi en attente. Si la cause de l’interruption est un changement d’état de 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 MiniportMessageInterruptDPC. La carte réseau a peut-être 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 de telles fonctionnalités. Sinon, le pilote miniport peut trier les paquets dans des files d’attente distinctes dans MiniportMessageInterruptDPC.

MiniportMessageInterruptDPC appelle le Fonction NdisMIndicateReceiveNetBufferLists pour indiquer les paquets sur le processeur actuel. MiniportMessageInterruptDPC peut déterminer 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 le MiniportMessageInterrupt , 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 DCP supplémentaires, MiniportMessageInterruptDPC doit réactiver les interruptions sur la carte réseau, pour le message spécifié, avant qu’il ne retourne.

Avant que NDIS appelle MiniportMessageInterruptDPC, les interruptions du message spécifié sur la carte réseau ont généralement été désactivées dans le Fonction MiniportMessageInterrupt . Avant de retourner le contrôle, MiniportMessageInterruptDPC peut réactiver les interruptions. Si le pilote miniport a mis en file d’attente d’autres DCP alors que les interruptions ont été désactivées, le pilote doit activer les interruptions après la dernière exécution du DPC.

Note Pour de meilleures performances, les pilotes miniport doivent uniquement désactiver les interruptions pour des messages spécifiques. Ils ne doivent pas désactiver toutes les interruptions signalées par le message.
 
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 requis. Un lot DPC d’interruption est la collection de tous les PDC qui s’exécutent après l’ISR et avant que les interruptions soient réactivées.

Un pilote miniport peut appeler NdisMDeregisterInterruptEx à partir de sa fonction MiniportInitializeEx ou MiniportHaltEx pour libérer les ressources qu’il a allouées avec NdisMRegisterInterruptEx. Une fois NdisMDeregisterInterruptEx retourné, NDIS n’appelle pas la fonction MiniportMessageInterrupt ou MiniportMessageInterruptDPC d’un pilote miniport.

NDIS appelle MiniportMessageInterruptDPC à IRQL = DISPATCH_LEVEL.

Exemples

Pour définir une fonction MiniportMessageInterruptDPC , 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, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification de trouver les erreurs, et 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 MiniportMessageInterruptDPC nommée « MyMessageInterruptDPC », utilisez le type MINIPORT_MESSAGE_INTERRUPT_DPC comme indiqué dans cet exemple de code :

MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MyMessageInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

Le type de fonction MINIPORT_MESSAGE_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_MESSAGE_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

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterrupt

NDIS_RECEIVE_THROTTLE_PARAMETERS NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)