Envoi de données réseau
La figure suivante illustre une opération d’envoi de base, qui implique un pilote de protocole, NDIS et un pilote miniport.
Les pilotes de protocole appellent la fonction NdisSendNetBufferLists pour envoyer NET_BUFFER_LIST structures sur une liaison. NDIS appelle la fonction MiniportSendNetBufferLists du pilote miniport pour transférer les structures NET_BUFFER_LIST à un pilote miniport sous-jacent.
Toutes les opérations d’envoi basées sur NET_BUFFER sont asynchrones. Le pilote miniport appelle la fonction NdisMSendNetBufferListsComplete avec un code de status approprié quand elle est terminée. L’envoi de chaque structure NET_BUFFER_LIST peut être effectué individuellement. NDIS appelle la fonction ProtocolSendNetBufferListsComplete du pilote de protocole chaque fois que le pilote miniport appelle NdisMSendNetBufferListsComplete.
Les pilotes de protocole peuvent récupérer la propriété des structures NET_BUFFER_LIST et de toutes les structures et données associées dès que le NDIS appelle la fonction ProtocolSendNetBufferListsComplete du pilote de protocole.
Le pilote miniport ou NDIS peut retourner les structures NET_BUFFER_LIST dans n’importe quel ordre. Les pilotes de protocole sont garantis que la liste des structures NET_BUFFER attachées à chaque structure NET_BUFFER_LIST n’a pas été modifiée.
N’importe quel pilote NDIS peut séparer les structures NET_BUFFER dans une structure NET_BUFFER_LIST. N’importe quel pilote NDIS peut également séparer les dll mdl dans une structure NET_BUFFER. Toutefois, le pilote doit toujours retourner les structures NET_BUFFER_LIST avec les structures NET_BUFFER et les LDM dans la forme d’origine. Par exemple, un pilote intermédiaire peut séparer un NET_BUFFER_LIST en deux nouvelles structures NET_BUFFER_LIST et transmettre une partie des données d’origine au pilote suivant. Toutefois, lorsque le pilote intermédiaire termine le traitement de l’NET_BUFFER_LIST d’origine, il doit retourner la NET_BUFFER_LIST complète avec les structures de NET_BUFFER d’origine et les dll MDL d’origine.
Les pilotes de protocole définissent le membre SourceHandle dans la structure NET_BUFFER_LIST sur le NdisBindingHandle fourni par NDIS dans un appel à la fonction NdisOpenAdapterEx . NDIS utilise le membre SourceHandle pour renvoyer les structures NET_BUFFER_LIST au pilote de protocole qui a envoyé les structures NET_BUFFER_LIST.
Les pilotes intermédiaires définissent également le membre SourceHandle dans la structure NET_BUFFER_LIST sur la valeur NdisBindingHandle fournie par NDIS dans un appel à NdisOpenAdapterEx. Si un pilote intermédiaire transfère une demande d’envoi, le pilote doit enregistrer la valeur SourceHandle fournie par le pilote de surélément avant d’écrire dans le membre SourceHandle . Lorsque NDIS retourne une structure de NET_BUFFER_LIST transférée au pilote intermédiaire, le pilote intermédiaire doit restaurer le SourceHandle qu’il a enregistré.