Fonction NdisSendNetBufferLists (ndis.h)
Les pilotes de protocole appellent la fonction NdisSendNetBufferLists pour envoyer des données réseau contenues dans une liste de structures NET_BUFFER_LIST .
Syntaxe
void NdisSendNetBufferLists(
[in] NDIS_HANDLE NdisBindingHandle,
[in] __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG SendFlags
);
Paramètres
[in] NdisBindingHandle
Handle qui identifie l’adaptateur cible. Un appel précédent à NdisOpenAdapterEx a retourné ce handle.
[in] NetBufferLists
Pointeur vers une liste liée de structures NET_BUFFER_LIST . Chaque structure NET_BUFFER_LIST décrit une liste de structures NET_BUFFER .
[in] PortNumber
Numéro de port qui identifie un port d’adaptateur miniport. Le numéro de port par défaut d’un adaptateur miniport est zéro. Les pilotes de protocole qui n’utilisent pas de ports d’adaptateur miniport doivent spécifier le port par défaut.
[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
Une fois qu’un pilote de protocole appelle NdisSendNetBufferLists, NDIS envoie les structures NET_BUFFER_LIST à un pilote sous-jacent Fonction MiniportSendNetBufferLists .
Le pilote de protocole doit allouer chaque structure NET_BUFFER_LIST à partir d’un pool en appelant l’une des fonctions suivantes :
Le pilote de protocole peut préallouer NET_BUFFER_LIST structures, par exemple, dans sa routine DriverEntry . Le pilote peut également allouer les structures juste avant d’appeler NdisSendNetBufferLists , puis les libérer une fois l’opération d’envoi terminée. Quand NDIS retourne une structure NET_BUFFER_LIST à ProtocolSendNetBufferListsComplete, le pilote miniport peut préparer la structure NET_BUFFER_LIST et toutes les ressources associées pour la réutilisation. La réutilisation des structures NET_BUFFER_LIST peut produire de meilleures performances que le retour des structures à un pool, puis leur réaffectation pour une autre opération d’envoi.Un pilote de protocole doit définir le membre SourceHandle de chaque structure NET_BUFFER_LIST sur la même valeur qu’il passe au paramètre NdisBindingHandle . Le handle de liaison fournit les informations requises par NDIS pour renvoyer la structure NET_BUFFER_LIST au pilote de protocole après les appels du pilote miniport sous-jacent NdisMSendNetBufferListsComplete.
Avant d’appeler NdisSendNetBufferLists, un pilote de protocole peut définir les informations qui accompagnent la demande d’envoi avec la macro NET_BUFFER_LIST_INFO . Le pilote sous-jacent peut récupérer ces informations avec la macro NET_BUFFER_LIST_INFO.
Avant qu’un pilote de protocole n’appelle NdisSendNetBufferLists avec une liste de structures NET_BUFFER_LIST, le pilote de protocole doit s’assurer que les structures NET_BUFFER_LIST sont configurées dans l’ordre dans lequel les données réseau doivent être envoyées sur le réseau.
Dès qu’un pilote de protocole appelle NdisSendNetBufferLists, il abandonne la propriété des structures NET_BUFFER_LIST et de toutes les ressources associées. NDIS appelle la fonction ProtocolSendNetBufferListsComplete pour renvoyer les structures et les données au pilote de protocole. NDIS peut collecter les structures et les données de plusieurs requêtes d’envoi dans une seule liste liée de structures NET_BUFFER_LIST avant de passer la liste à ProtocolSendNetBufferListsComplete.
Jusqu’à ce que NDIS appelle ProtocolSendNetBufferListsComplete, la status actuelle d’un envoi initié par un pilote de protocole n’est pas disponible pour le pilote de protocole. Un pilote de protocole libère temporairement la propriété de toutes les ressources qu’il a allouées pour une demande d’envoi lorsqu’il appelle NdisSendNetBufferLists. Un pilote de protocole ne doit jamais tenter d’examiner les structures NET_BUFFER_LIST ou les données associées après avoir appelé NdisSendNetBufferLists.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge dans NDIS 6.0 et versions ultérieures. |
Plateforme cible | Universal |
En-tête | ndis.h (inclure Ndis.h) |
Bibliothèque | Ndis.lib |
IRQL | <=DISPATCH_LEVEL |
Règles de conformité DDI | Irql_SendRcv_Function(ndis) |