MINIPORT_SEND_NET_BUFFER_LISTS fonction de rappel (ndis.h)
NDIS appelle la fonction MiniportSendNetBufferLists pour transmettre des données réseau contenues dans une liste liée de structures NET_BUFFER_LIST.
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 vers une zone de contexte allouée par le pilote miniport dans sa fonction MiniportInitializeEx. Le pilote miniport utilise cette zone de contexte pour conserver des informations d’état sur un adaptateur.
[in] NetBufferList
Pointeur vers la première structure de 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 structure NET_BUFFER dans la liste est mappée à une chaîne de DLL. Les MDL contiennent les données réseau.
[in] PortNumber
Numéro de port qui identifie un port d’adaptateur miniport. Pour affecter 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 le runtime d’intégration 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 vérifier la bouclage. Par défaut, NDIS ne boucle pas les données vers le pilote qui a envoyé la demande d’envoi. Un pilote surlysant 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 overlying. Cet indicateur n’a aucun impact sur la vérification de la bouclage ou de la bouclage, sur d’autres liaisons.
Valeur de retour
Aucun
Remarques
MiniportSendNetBufferLists est une fonction requise pour les pilotes miniport. Lorsqu’un pilote surlysant appelle la fonction NdisSendNetBufferLists, NDIS appelle les MiniportSendNetBufferLists fonction 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 utiliser les instructions suivantes :
- L’ordre des structures NET_BUFFER dans chaque structure NET_BUFFER_LIST doit être conservé.
- L’ordre des structures NET_BUFFER_LIST doit être conservé s’ils doivent être transmis sur la même connexion.
-
Si les structures NET_BUFFER_LIST doivent être transmises sur différentes connexions, elles peuvent être divisées en plusieurs files d’attente de transmission si les fonctionnalités suivantes sont en cours d’utilisation. Dans ce cas, l’ordre des structures NET_BUFFER_LIST pour chaque connexion doit être conservé.
- La mise à l’échelle côté réception (RSS) (Valeur de hachage RSS dans la structure NET_BUFFER_LIST peut être utilisée comme index dans la table d’indirection RSS.)
- Virtual Machine Queue (VMQ) (L’identificateur de file d’attente de la file d’attente sortante est défini dans la NetBufferListFilteringInfo informations OOB. Pour plus d’informations, consultez chemin de transmission VMQ.)
- IEEE 802.1 Data Center Bridging (DCB) (Vous pouvez désactiver la classe de trafic (TC).)
- IEEE 802.1p (Vous pouvez désactiver 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 effectuer une demande d’envoi immédiatement, le pilote doit contenir la demande dans une file d’attente jusqu’à ce qu’elle puisse terminer la requête. Pendant qu’une demande d’envoi est en attente, le pilote miniport conserve la propriété des structures NET_BUFFER_LIST et toutes les ressources allouées par le protocole associées aux structures NET_BUFFER_LIST.
Le pilote miniport doit appeler le fonction NdisMSendNetBufferListsComplete pour terminer les demandes d’envoi de 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 d’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 minimale des paquets pour le support sélectionné. Dans ce cas, MiniportSendNetBufferLists devez remplir les paquets avec zéros si le support sélectionné impose une exigence de longueur minimale sur la taille du paquet de transmission.
Si le pilote miniport a défini l’indicateur de NDIS_MAC_OPTION_NO_LOOPBACK lorsque NDIS a interrogé le OID_GEN_MAC_OPTIONS OID, le pilote miniport ne doit pas tenter de boucler les données réseau. NDIS fournit une prise en charge de bouclage logiciel pour un tel pilote.
NDIS appelle MiniportSendNetBufferLists au<IRQL = DISPATCH_LEVEL.
exemples de
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 fonctions permet d'Analyse du code pour les pilotes, de vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des 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 lorsque vous exécutez les 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 annoter le comportement de la fonction.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Prise en charge dans NDIS 6.0 et versions ultérieures. |
plateforme cible | Windows |
d’en-tête | ndis.h (include Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
règles de conformité DDI | NdisTimedDataHang, NdisTimedDataSend |