Freigeben über


Zwischentreiber-Netzwerkdatenverwaltung

Ein Zwischentreiber empfängt NET_BUFFER_LIST Strukturen mit einem oder mehreren zugeordneten MDLs von einem übergeordneten Treiber, um über das Netzwerk gesendet zu werden. Der Zwischentreiber kann die Daten an den zugrunde liegenden Treiber übergeben, indem NdisSendNetBufferLists aufgerufen wird, wenn der Treiber über einen verbindungslosen unteren Rand verfügt, oder indem NdisCoSendNetBufferLists aufgerufen wird, wenn der Treiber über einen verbindungsorientierten unteren Rand verfügt. Alternativ kann der Zwischentreiber einige Aktionen ausführen, um entweder den Inhalt der verketteten Puffer oder die Reihenfolge oder Anzeigedauer der eingehenden Daten relativ zu anderen Übertragungen zu ändern.

Je nach Zweck des Zwischentreibers kann ein solcher Treiber Puffer neu packen, die an eingehende NET_BUFFER_LIST-Strukturen verkettet sind. Ein Zwischentreiber packt z. B. Netzwerkdaten unter folgenden Umständen neu:

  • Der Zwischentreiber empfängt einen größeren Datenpuffer von einem überlagerten Protokolltreiber, als in einem einzelnen Puffer über dem zugrunde liegenden Medium gesendet werden kann. Folglich muss der Zwischentreiber die eingehenden Daten in kleinere Puffer unterteilen.

  • Der Zwischentreiber ändert die Länge oder den Inhalt der Netzwerkdaten, indem die Daten komprimiert oder verschlüsselt werden, bevor jedes Senden an den zugrunde liegenden Treiber weitergeleitet wird.

Informationen zum Erstellen der Netzwerkdatenverwaltung finden Sie unter Protokolltreiberpufferverwaltung.

NDIS stellt Schnittstellen zum Klonen und Fragmentieren von NET_BUFFER_LIST-Strukturen bereit. Weitere Informationen zu Klon- und Fragmentierungsstrukturen finden Sie unter Abgeleitete NET_BUFFER_LIST Strukturen.

NET_BUFFER_LIST Strukturen können nach Bedarf, zur Treiberinitialisierungszeit oder in der ProtocolBindAdapterEx-Funktion zugeordnet werden. Ein Entwickler eines Zwischentreibers kann, falls erforderlich und aus Leistungsgründen, eine Reihe von Strukturen zur Initialisierungszeit zuweisen, sodass ProtocolReceiveNetBufferLists vorzugewiesene Ressourcen hat, in die eingehende Daten kopiert werden, um diese an einen höheren Treiber anzugeben. Gleichzeitig stehen MiniportSendNetBufferListsNET_BUFFER_LIST-Strukturen (und möglicherweise Puffer) zur Verfügung, um eingehende Sendenetzwerkdaten an den nächsten niedrigeren Treiber zu übermitteln.

Wenn ein Zwischentreiber Sendedaten oder empfangene Daten in einen neuen Puffer oder mehrere Puffer kopiert und die Länge der tatsächlichen Daten im letzten Puffer geringer ist als die zugewiesene Länge des Puffers, kann der Zwischentreiber NdisAdjustMdlLength aufrufen, um den Puffer an die tatsächliche Datenlänge anzupassen.

Ein Zwischentreiber mit einem verbindungslosen unteren Rand empfängt immer eingehende Daten von einem zugrunde liegenden Miniportadapter aus seiner ProtocolReceiveNetBufferLists-Funktion .

Ein Zwischentreiber mit einem verbindungsorientierten unteren Rand empfängt immer eingehende Daten von einem zugrunde liegenden Miniportadapter aus seiner ProtocolCoReceiveNetBufferLists-Funktion .