MINIPORT_SYNCHRONIZE_INTERRUPT fonction de rappel (ndis.h)

Un pilote miniport doit fournir un gestionnaire MiniportSynchronizeInterrupt si une fonction de pilote qui s’exécute à un niveau inférieur à DIRQL partage des ressources avec la fonction MiniportInterrupt .

Pour les interruptions signalées par un message, le pilote miniport fournit un gestionnaire MiniportSynchronizeMessageInterrupt si une fonction de pilote qui s’exécute à un niveau inférieur à DIRQL partage des ressources pour une interruption signalée par un message avec la fonction MiniportMessageInterrupt .

Note Vous devez déclarer cette fonction en utilisant le type MINIPORT_SYNCHRONIZE_INTERRUPT pour les interruptions non signalées par message, ou en utilisant le type MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT pour les interruptions signalées par un message. Pour plus d’informations, consultez la section Exemples suivante.
 

Syntaxe

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

Paramètres

[in] SynchronizeContext

Handle à une zone de contexte fournie lorsque la fonction MiniportXxx du pilote miniport ou interne appelée NdisMSynchronizeWithInterruptEx , fonction.

Valeur retournée

MiniportSynchronizeInterrupt retourne une valeur booléenne avec une signification déterminée par le pilote. NDIS retourne la même valeur lorsque NDIS retourne à partir de NdisMSynchronizeWithInterruptEx.

Remarques

Note Les informations de cette section peuvent également s’appliquer aux interruptions signalées par un message en remplaçant « MiniportInterrupt » par « MiniportMessageInterrupt » et en remplaçant « MiniportSynchronizeInterrupt » par « MiniportSynchronizeMessageInterrupt ».
 
Si une fonction de pilote miniport qui s’exécute à moins de DIRQL partage des ressources, telles que les registres de carte réseau, avec la fonction MiniportInterrupt du pilote, ce pilote ne peut pas accéder directement à ces ressources. Si une fonction de priorité inférieure tente d’accéder directement aux ressources partagées, elle peut être préemptée par MiniportInterrupt, qui peut remplacer les changements d’état de la fonction de pilote de priorité inférieure.

Pour synchroniser l’accès aux ressources partagées avec MiniportInterrupt, les fonctions de pilote de priorité inférieure doivent appeler le NdisMSynchronizeWithInterruptEx , fonction. La fonction MiniportSynchronizeInterrupt du pilote accède aux ressources partagées sur DIRQL. L’appel de NdisMSynchronizeWithInterruptEx empêche les conditions de course et les interblocages dans un tel pilote de miniport.

Toutes les fonctions de pilote de priorité inférieure qui partagent des ressources entre elles (mais pas avec une fonction qui s’exécute sur DIRQL) doivent utiliser un verrou de rotation pour protéger ces ressources partagées.

MiniportSynchronizeInterrupt s’exécute au niveau du DIRQL affecté lorsque la fonction MiniportInitializeEx du pilote appelle le Fonction NdisMRegisterInterruptEx . Comme toute fonction de pilote qui s’exécute sur DIRQL, MiniportSynchronizeInterrupt doit retourner le contrôle à l’appelant aussi rapidement que possible, et il peut appeler uniquement les fonctions NdisXxx qui peuvent être appelées en toute sécurité à n’importe quel IRQL.

Exemples

Pour définir une fonction MiniportSynchronizeInterrupt , 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 MiniportSynchronizeInterrupt nommée « MySynchronizeInterrupt », utilisez le type MINIPORT_SYNCHRONIZE_INTERRUPT comme indiqué dans cet exemple de code :

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Pour définir une fonction MiniportSynchronizeMessageInterrupt pour les interruptions signalées par un message, utilisez le type MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT comme indiqué dans cet exemple de code :

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Les types de fonction MINIPORT_SYNCHRONIZE_INTERRUPT et MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT sont définis 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 à vos définitions de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction 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 Voir la section Notes

Voir aussi

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx