Envoi de structures NET_BUFFER à partir de pilotes CoNDIS
La figure suivante illustre une opération d’envoi CoNDIS de base, qui implique un pilote de protocole, NDIS et un pilote miniport.
Comme le montre la figure précédente, les pilotes de protocole appellent la fonction NdisCoSendNetBufferLists pour envoyer NET_BUFFER_LIST structures sur une connexion virtuelle (VC). NDIS appelle ensuite la fonction MiniportCoSendNetBufferLists 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. Par conséquent, le pilote miniport appelle toujours la fonction NdisMCoSendNetBufferListsComplete et fournit un code de status approprié lorsqu’il a terminé l’envoi des données. Le pilote miniport peut effectuer l’opération d’envoi pour chaque structure NET_BUFFER_LIST indépendamment des autres structures de NET_BUFFER_LIST. NDIS appelle la fonction ProtocolCoSendNetBufferListsComplete du pilote de protocole chaque fois que le pilote miniport appelle NdisMCoSendNetBufferListsComplete.
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 NDIS appelle la fonction ProtocolCoSendNetBufferListsComplete du pilote de protocole.
Le pilote miniport ou NDIS peut retourner les structures NET_BUFFER_LIST dans n’importe quel ordre. Toutefois, 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.
Les pilotes de protocoles définissent le membre SourceHandle dans la structure NET_BUFFER_LIST sur la même valeur que le paramètre NdisVcHandle de NdisCoSendNetBufferLists. 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 NdisVcHandle . Si un pilote intermédiaire transfère une demande d’envoi, le pilote doit enregistrer la valeur SourceHandle fournie par le pilote de dépassement 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é.
Les pilotes de protocole peuvent annuler des demandes d’envoi en utilisant les mêmes mécanismes que les pilotes sans connexion. Pour plus d’informations sur l’annulation des demandes d’envoi, consultez Annulation d’une opération d’envoi.