Partager via


Gestion des données réseau de pilotes intermédiaires

Un pilote intermédiaire reçoit NET_BUFFER_LIST structures avec une ou plusieurs DLL associées d’un pilote de niveau supérieur à envoyer sur le réseau. Le pilote intermédiaire peut transmettre les données au pilote sous-jacent en appelant NdisSendNetBufferLists si le pilote a un bord inférieur sans connexion, ou en appelant NdisCoSendNetBufferLists si le pilote a un bord inférieur orienté connexion. Le pilote intermédiaire peut également prendre des mesures pour modifier le contenu des mémoires tampons chaînées ou l’ordre ou le minutage des données entrantes par rapport à d’autres transmissions.

Selon l’objectif du pilote intermédiaire, un tel pilote peut reconditionner les mémoires tampons chaînées aux structures NET_BUFFER_LIST entrantes. Par exemple, un pilote intermédiaire repackage les données réseau dans les circonstances suivantes :

  • Le pilote intermédiaire reçoit une mémoire tampon de données plus grande à partir d’un pilote de protocole trop élevé que ne peut être envoyé dans une mémoire tampon unique sur le support sous-jacent. Par conséquent, le pilote intermédiaire doit diviser les données entrantes en mémoires tampons plus petites.

  • Le pilote intermédiaire modifie la longueur ou le contenu des données réseau en compressant ou en chiffrant les données avant de transférer chaque envoi au pilote sous-jacent.

Pour plus d’informations sur la création de la gestion des données réseau, consultez Gestion de la mémoire tampon du pilote de protocole.

NDIS fournit des interfaces pour cloner et fragmenter des structures NET_BUFFER_LIST . Pour plus d’informations sur le clonage et la fragmentation des structures, consultez Structures NET_BUFFER_LIST dérivées.

NET_BUFFER_LIST structures peuvent être allouées en fonction des besoins, au moment de l’initialisation du pilote ou dans la fonction ProtocolBindAdapterEx . Un développeur de pilotes intermédiaires peut, si nécessaire et pour des raisons de performances, allouer un certain nombre de structures au moment de l’initialisation afin que ProtocolReceiveNetBufferLists dispose de ressources préallouées dans lesquelles copier les données entrantes pour indiquer à un pilote de niveau supérieur, et que MiniportSendNetBufferLists dispose de NET_BUFFER_LIST structures (et éventuellement de mémoires tampons) pour transmettre les données réseau entrantes sur le pilote inférieur suivant.

Si un pilote intermédiaire copie envoie des données ou des données reçues vers une nouvelle mémoire tampon ou de nouvelles mémoires tampons, et que la longueur des données réelles dans la dernière mémoire tampon est inférieure à la longueur allouée de la mémoire tampon, le pilote intermédiaire peut appeler NdisAdjustMdlLength pour ajuster la mémoire tampon à la longueur réelle des données.

Un pilote intermédiaire avec un bord inférieur sans connexion reçoit toujours les données entrantes d’un adaptateur miniport sous-jacent à partir de sa fonction ProtocolReceiveNetBufferLists .

Un pilote intermédiaire avec un bord inférieur orienté connexion reçoit toujours les données entrantes d’un adaptateur miniport sous-jacent de sa fonction ProtocolCoReceiveNetBufferLists .