Partager via


MINIPORT_SEND_NET_BUFFER_LISTS fonction de rappel (ndis.h)

NDIS appelle la fonction MiniportSendNetBufferLists pour transmettre les données réseau contenues dans une liste liée de structures NET_BUFFER_LIST .

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

Syntaxe

MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;

void MiniportSendNetBufferLists(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Paramètres

[in] MiniportAdapterContext

Handle à une zone de contexte que le pilote miniport a allouée dans sa fonction MiniportInitializeEx . Le pilote miniport utilise cette zone de contexte pour conserver les informations d’état sur une carte.

[in] NetBufferList

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 dll mdl. Les dll MDL contiennent les données réseau.

[in] PortNumber

Numéro de port qui identifie un port d’adaptateur miniport. Pour attribuer un numéro de port d’adaptateur miniport, appelez la fonction NdisMAllocatePort . Une valeur zéro identifie le port par défaut d’un adaptateur miniport.

[in] SendFlags

Indicateurs qui définissent des attributs pour l’opération d’envoi. Les indicateurs peuvent être combinés à une opération OR. Pour effacer tous les indicateurs, définissez ce membre sur zéro. Cette fonction prend en charge les indicateurs suivants :

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Spécifie que l’IRQL actuel est DISPATCH_LEVEL. Pour plus d’informations sur cet indicateur, consultez Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Spécifie que 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 cet indicateur. 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’a aucun effet sur la vérification du bouclage ou de la boucle arrière sur d’autres liaisons.

Valeur de retour

None

Remarques

MiniportSendNetBufferLists est une fonction obligatoire pour les pilotes miniport. Lorsqu’un pilote en surclassement appelle la fonction NdisSendNetBufferLists , NDIS appelle la fonction MiniportSendNetBufferLists du pilote miniport lié.

Lors de la transmission des données réseau transmises par NDIS dans le paramètre NetBufferLists , le pilote miniport doit suivre les instructions suivantes :

  1. L’ordre des structures NET_BUFFER dans chaque structure NET_BUFFER_LIST doit être conservé.
  2. L’ordre des structures NET_BUFFER_LIST doit être conservé si elles doivent être transmises sur la même connexion.
  3. Si les structures NET_BUFFER_LIST doivent être transmises sur différentes connexions, elles peuvent être fractionnées en plusieurs files d’attente de transmission si les fonctionnalités suivantes sont utilisées. Dans ce cas, l’ordre des structures NET_BUFFER_LIST pour chaque connexion doit être conservé.
    • Mise à l’échelle côté réception (RSS) (la valeur de hachage RSS de la structure NET_BUFFER_LIST peut être utilisée comme index dans la table d’indirection RSS.)
    • File d’attente de machines virtuelles (VMQ) (L’identificateur de file d’attente de la file d’attente sortante est défini dans les informations OOB NetBufferListFilteringInfo . Pour plus d’informations, consultez VmQ Transmit Path.)
    • IEEE 802.1 Data Center Bridging (DCB) (vous pouvez utiliser une touche sur la classe Traffic (TC).)
    • IEEE 802.1p (vous pouvez activer les balises 802.1p sans DCB.)

Les pilotes Miniport acceptent toutes les demandes d’envoi effectuées par NDIS en appelant la fonction MiniportSendNetBufferLists . 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 allouées au protocole associées aux structures NET_BUFFER_LIST.

Le pilote miniport doit appeler le Fonction NdisMSendNetBufferListsComplete pour effectuer les requêtes d’envoi pour toutes les structures NET_BUFFER_LIST. Pour améliorer les performances du système, 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 dans un seul appel à NdisMSendNetBufferListsComplete.NET_BUFFER_LIST structures et autres ressources associées doivent être traitées comme inaccessibles par le pilote miniport dès que le pilote appelle NdisMSendNetBufferListsComplete.

La fonction MiniportSendNetBufferLists 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, MiniportSendNetBufferLists 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.

Si le pilote miniport définit l’indicateur NDIS_MAC_OPTION_NO_LOOPBACK lorsque NDIS a interrogé l’OID OID_GEN_MAC_OPTIONS , le pilote miniport ne doit pas tenter de récupérer les données réseau en boucle. NDIS fournit la prise en charge du bouclage logiciel pour un tel pilote.

NDIS appelle MiniportSendNetBufferLists à IRQL<= DISPATCH_LEVEL.

Exemples

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

MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  MiniportAdapterContext,
    PNET_BUFFER_LIST  NetBufferList,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Le type de fonction MINIPORT_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_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
Règles de conformité DDI NdisTimedDataHang, NdisTimedDataSend

Voir aussi

MiniportInitializeEx

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisSendNetBufferLists

OID_GEN_MAC_OPTIONS