Partager via


MINIPORT_CO_SEND_NET_BUFFER_LISTS fonction de rappel (ndis.h)

La fonction MiniportCoSendNetBufferLists transmet les données réseau contenues dans une liste liée spécifiée de structures NET_BUFFER_LIST .

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

Syntaxe

MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;

void MiniportCoSendNetBufferLists(
  [in] NDIS_HANDLE MiniportVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] ULONG SendFlags
)
{...}

Paramètres

[in] MiniportVcContext

Handle vers une zone de contexte allouée par un pilote miniport dans laquelle le pilote miniport conserve son état de connexion virtuelle (VC). Le pilote miniport a fourni cette poignée à NDIS à partir de sa fonction MiniportCoCreateVc .

[in] NetBufferLists

Pointeur vers la première structure NET_BUFFER_LIST dans une liste liée de structures NET_BUFFER_LIST . Chaque structure NET_BUFFER_LIST de la liste décrit une liste de structures NET_BUFFER . Chaque NET_BUFFER structure dans la liste est mappée à une chaîne de listes de descripteurs de mémoire (MDL). Les dll MDL contiennent les données réseau que MiniportCoSendNetBufferLists transmet.

[in] SendFlags

Indicateurs qui définissent des attributs pour l’opération d’envoi. Les indicateurs peuvent être combinés avec une opération OR au niveau du bit. Pour effacer tous les indicateurs, définissez ce paramètre sur zéro. MiniportCoSendNetBufferLists prend en charge les indicateurs suivants :

NDIS_SEND_FLAGS_DISPATCH_LEVEL

L’appelant peut éventuellement définir cet indicateur si l’IRQL actuel est DISPATCH_LEVEL. Pour plus d’informations sur cet indicateur, consultez Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

NDIS doit case activée pour le bouclage. Par défaut, NDIS ne retourne pas en boucle les données au pilote qui a envoyé la demande d’envoi. Un pilote qui se superpose peut remplacer ce comportement en définissant l’indicateur NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK . Lorsque cet indicateur est défini, NDIS identifie toutes les structures NET_BUFFER qui contiennent des données qui correspondent aux critères de réception de la liaison. NDIS indique NET_BUFFER structures qui correspondent aux critères du pilote qui se superpose. Cet indicateur n’affecte pas la vérification du bouclage ou de la boucle arrière sur d’autres liaisons.

Valeur de retour

None

Remarques

La fonction MiniportCoSendNetBufferLists est requise pour les pilotes miniport CoNDIS. Lorsqu’un pilote qui se superpose appelle le Fonction NdisCoSendNetBufferLists , NDIS appelle la fonction MiniportCoSendNetBufferLists du pilote miniport lié.

L’ordre de la liste liée des structures de NET_BUFFER_LIST que NDIS transmet à NetBufferLists représente l’ordre dans lequel le pilote miniport doit transmettre les données réseau. En outre, un pilote miniport doit envoyer les structures NET_BUFFER_LIST à partir de plusieurs appels MiniportCoSendNetBufferLists dans l’ordre dans lequel le pilote miniport a reçu les structures.

Les pilotes de miniport CoNDIS doivent accepter toutes les demandes d’envoi effectuées par NDIS en appelant la fonction MiniportCoSendNetBufferLists . Si un pilote miniport ne peut pas exécuter une demande d’envoi immédiatement, le pilote doit conserver la demande dans une file d’attente jusqu’à ce qu’il puisse terminer la demande. Lorsqu’une demande d’envoi est en attente, le pilote miniport conserve la propriété des structures NET_BUFFER_LIST et de toutes les ressources associées aux structures NET_BUFFER_LIST .

Le pilote miniport doit appeler le Fonction NdisMCoSendNetBufferListsComplete pour effectuer toutes les demandes d’envoi CoNDIS. Pour améliorer les performances de l’ordinateur, le pilote peut créer une liste liée qui contient les structures NET_BUFFER_LIST à partir de plusieurs demandes d’envoi. Le pilote peut ensuite passer une telle liste liée en un seul appel à NdisMCoSendNetBufferListsComplete.

En outre, vous devez supposer que le pilote miniport ne peut pas accéder aux structures NET_BUFFER_LIST et autres ressources associées dès que le pilote appelle NdisMCoSendNetBufferListsComplete.

La fonction MiniportCoSendNetBufferLists doit synchroniser l’accès à ses files d’attente internes de données réseau avec les autres fonctions MiniportXxx du pilote qui accèdent aux mêmes files d’attente. Un pilote miniport peut utiliser des verrous de rotation pour synchroniser l’accès aux files d’attente.

Les pilotes de protocole sont chargés de déterminer les données réseau requises, en fonction du type moyen sélectionné par le pilote miniport lié. Toutefois, un pilote de protocole peut fournir des données réseau qui spécifient des paquets plus courts que la taille de paquet minimale pour le support sélectionné. Dans ce cas, MiniportCoSendNetBufferLists doit remplir les paquets avec des zéros si le support sélectionné impose une exigence de longueur minimale sur la taille du paquet de transmission.

NDIS appelle MiniportCoSendNetBufferLists à IRQL<= DISPATCH_LEVEL.

Exemples

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

MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MyCoSendNetBufferLists(
    NDIS_HANDLE  MiniportVcContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendFlags
    )
  {...}

Le type de fonction MINIPORT_CO_SEND_NET_BUFFER_LISTS 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_CO_SEND_NET_BUFFER_LISTS 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

MiniportCoCreateVc

NET_BUFFER

NET_BUFFER_LIST

NdisCoSendNetBufferLists

NdisMCoSendNetBufferListsComplete