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.
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.
NdisReserved1
Réservé à NDIS.
[in] NdisReserved2
Réservé à NDIS.
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.
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 |