Partager via


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.

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

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

[in] MessageId

Identificateur de message d’interruption signalé par un message (MSI). MessageId est un index à un IO_INTERRUPT_MESSAGE_INFO_ENTRY structure à l’intérieur d’une structure IO_INTERRUPT_MESSAGE_INFO. NDIS transmet un pointeur à la structure de IO_INTERRUPT_MESSAGE_INFO associée dans le membre MessageInfoTable lorsque le pilote s’inscrit correctement à MSI auprès de 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é une masque de bits dans le paramètre TargetProcessors du fonction MiniportMessageInterrupt, puis MiniportDpcContext est 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.

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

NdisReserved1

Réservé à NDIS.

[in] NdisReserved2

Réservé à NDIS.

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

Valeur de retour

Aucun

Remarques

Les pilotes miniport qui inscrivent une interruption signalée par un message auprès de 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 fonction NdisMQueueDpc pour demander des appels de procédure différés supplémentaires pour d’autres processeurs.

Les pilotes miniports 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 termine une demande d’envoi en attente. Si la cause de l’interruption est un changement d’état de lien, le pilote miniport indique le nouvel état du lien vers NDIS. S’il existe des paquets de réception en attente, le pilote miniport indique les paquets sur NDIS.

Un pilote miniport qui prend en charge 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 peut avoir déjà mis en file d’attente des paquets reçus sur des files d’attente distinctes en fonction des valeurs de hachage, si la carte réseau fournit de telles fonctionnalités. Sinon, le pilote miniport peut trier les paquets en files d’attente distinctes dans MiniportMessageInterruptDPC.

MiniportMessageInterruptDPC appelle le NdisMIndicateReceiveNetBufferLists fonction 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 PROCESSEURs sur des PROCESSEURs où une DPC n’est pas en attente.

Si le DPC actuel est en cours d’exécution sur le même processeur que le MiniportMessageInterrupt fonction, le pilote miniport doit indiquer tous les paquets qui n’ont pas pu être mappés à un processeur. Si cette DPC est la dernière DPC planifiée et qu’elle ne demande pas de contrôleurs de domaine supplémentaires, MiniportMessageInterruptDPC doit réactiver les interruptions sur la carte réseau, pour le message spécifié, avant de retourner.

Avant que NDIS appelle MiniportMessageInterruptDPC, les interruptions pour le 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 des contrôleurs de domaine supplémentaires pendant la désactivation des interruptions, le pilote doit activer les interruptions après l’exécution de la dernière DPC.

Remarque Pour de meilleures performances, les pilotes miniports ne doivent désactiver que les interruptions pour des messages spécifiques. Ils ne doivent pas désactiver toutes les interruptions signalées par un 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 de à terminer dans le délai nécessaire. Un lot DPC d’interruption est la collection de tous les contrôleurs de domaine qui s’exécutent après l’ISR et avant que les interruptions ne soient réenables.

Un pilote miniport peut appeler NdisMDeregisterInterruptEx à partir de son MiniportInitializeEx ou fonction 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.

NDIS appelle MiniportMessageInterruptDPC à IRQL = DISPATCH_LEVEL.

exemples de

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 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 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 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_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 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 DISPATCH_LEVEL

Voir aussi

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

mise à l’échelle côté réception (RSS)