Senden von NET_BUFFER-Strukturen von CoNDIS-Treibern
Die folgende Abbildung veranschaulicht einen einfachen CoNDIS-Sendevorgang, der einen Protokolltreiber, NDIS und einen Miniporttreiber umfasst.
Wie die obige Abbildung zeigt, rufen Protokolltreiber die NdisCoSendNetBufferLists-Funktion auf, um NET_BUFFER_LIST Strukturen über eine virtuelle Verbindung (VC) zu senden. NDIS ruft dann die MiniportCoSendNetBufferLists-Funktion des Miniporttreibers auf, um die NET_BUFFER_LIST Strukturen an einen zugrunde liegenden Miniporttreiber weiterzuleiten.
Alle NET_BUFFER-basierten Sendevorgänge sind asynchron. Daher ruft der Miniporttreiber immer die NdisMCoSendNetBufferListsComplete-Funktion auf und stellt eine geeignete status Code bereit, wenn die Daten gesendet werden. Der Miniporttreiber kann den Sendevorgang für jede NET_BUFFER_LIST Struktur unabhängig von anderen NET_BUFFER_LIST-Strukturen abschließen. NDIS ruft die ProtocolCoSendNetBufferListsComplete-Funktion des Protokolltreibers jedes Mal auf, wenn der Miniporttreiber NdisMCoSendNetBufferListsComplete aufruft.
Protokolltreiber können den Besitz der NET_BUFFER_LIST-Strukturen und aller zugehörigen Strukturen und Daten zurückerobern, sobald NDIS die ProtocolCoSendNetBufferListsComplete-Funktion des Protokolltreibers aufruft .
Der Miniporttreiber oder NDIS kann die NET_BUFFER_LIST Strukturen in beliebiger Reihenfolge zurückgeben. Protokolltreiber sind jedoch garantiert, dass die Liste der NET_BUFFER Strukturen, die an jede NET_BUFFER_LIST-Struktur angefügt sind, nicht geändert wurde.
Protokolltreiber legen den SourceHandle-Member in der NET_BUFFER_LIST-Struktur auf denselben Wert wie den NdisVcHandle-Parameter von NdisCoSendNetBufferLists fest. NDIS verwendet den SourceHandle-Member , um die NET_BUFFER_LIST Strukturen an den Protokolltreiber zurückzugeben, der die NET_BUFFER_LIST-Strukturen gesendet hat.
Zwischentreiber legen auch den SourceHandle-Member in der NET_BUFFER_LIST-Struktur auf den Wert NdisVcHandle fest. Wenn ein Zwischentreiber eine Sendeanforderung weiterleitet, muss der Treiber den SourceHandle-Wert speichern, den der überlappende Treiber bereitgestellt hat, bevor er in das SourceHandle-Element schreibt. Wenn NDIS eine weitergeleitete NET_BUFFER_LIST-Struktur an den Zwischentreiber zurückgibt, muss der zwischengeschaltete Treiber den gespeicherten SourceHandle wiederherstellen.
Protokolltreiber können Sendeanforderungen abbrechen, indem sie dieselben Mechanismen wie verbindungslose Treiber verwenden. Weitere Informationen zum Abbrechen von Sendeanforderungen finden Sie unter Abbrechen eines Sendevorgangs.