Zwischentreibernetzwerk Datenverwaltung
Ein Zwischentreiber empfängt NET_BUFFER_LIST-Strukturen mit einer oder mehreren zugeordneten MDLs von einem Treiber auf höherer Ebene, der über das Netzwerk gesendet werden soll. Der Zwischentreiber kann die Daten an den zugrunde liegenden Treiber übergeben, indem er NdisSendNetBufferLists aufruft , wenn der Treiber über einen verbindungslosen unteren Rand verfügt, oder durch Aufrufen von NdisCoSendNetBufferLists , 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 den Zeitpunkt der eingehenden Daten relativ zu anderen Übertragungen zu ändern.
Je nach Zweck des Zwischentreibers kann ein solcher Treiber Puffer neu packen, die mit eingehenden NET_BUFFER_LIST Strukturen verkettet sind. Beispielsweise packt ein Zwischentreiber Netzwerkdaten unter den folgenden Umständen neu:
Der Zwischentreiber empfängt einen größeren Datenpuffer von einem übergeordneten Protokolltreiber, als in einem einzelnen Puffer über das zugrunde liegende 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 jede Nachricht an den zugrunde liegenden Treiber weitergeleitet wird.
Informationen zum Erstellen der Netzwerkdatenverwaltung finden Sie unter Protokolltreiberpufferverwaltung.
NDIS bietet Schnittstellen zum Klonen und Fragmentieren NET_BUFFER_LIST Strukturen. Weitere Informationen zum Klonen und Fragmentieren von Strukturen finden Sie unter Abgeleitete NET_BUFFER_LIST Strukturen.
NET_BUFFER_LIST Strukturen können nach Bedarf, zum Zeitpunkt der Treiberinitialisierung oder in der ProtocolBindAdapterEx-Funktion zugeordnet werden. Ein Entwickler eines zwischengeschalteten Treibers kann bei Bedarf und aus Leistungsgründen eine Reihe von Strukturen zur Initialisierungszeit zuordnen, sodass ProtocolReceiveNetBufferLists über vorab zugewiesene Ressourcen verfügt, in die eingehende Daten kopiert werden können, um sie an einen Treiber auf höherer Ebene anzuzeigen, und sodass MiniportSendNetBufferListsüber NET_BUFFER_LIST Strukturen (und möglicherweise Puffer) verfügt, um eingehende Sendenetzwerkdaten an den nächstniedrigen Treiber zu übergeben.
Wenn ein Zwischentreiber Sendedaten oder empfangene Daten in einen oder mehrere puffer kopiert und die Länge der tatsächlichen Daten im letzten Puffer kleiner als die zugeordnete Länge des Puffers ist, kann der Zwischentreiber NdisAdjustMdlLength aufrufen, um den Puffer an die tatsächliche Länge der Daten anzupassen.
Ein Zwischentreiber mit einem verbindungslosen unteren Rand empfängt immer eingehende Daten von einem zugrunde liegenden Miniportadapter von seiner ProtocolReceiveNetBufferLists-Funktion .
Ein Zwischentreiber mit einem verbindungsorientierten unteren Rand empfängt immer eingehende Daten von einem zugrunde liegenden Miniportadapter von seiner ProtocolCoReceiveNetBufferLists-Funktion .