PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE Rückruffunktion (ndis.h)

Die ProtocolCoSendNetBufferListsComplete-Funktion schließt einen Sendevorgang ab, den der Protokolltreiber mit einem Aufruf von initiiert hat. NdisCoSendNetBufferLists-Funktion .

Hinweis Sie müssen die Funktion mit dem typ PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt Beispiele.
 

Syntax

PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE ProtocolCoSendNetBufferListsComplete;

void ProtocolCoSendNetBufferListsComplete(
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] ULONG SendCompleteFlags
)
{...}

Parameter

[in] ProtocolVcContext

Ein Handle für einen vom Protokolltreiber zugewiesenen Kontextbereich, in dem dieser Treiber die Laufzeitstatusinformationen pro virtueller Verbindung (VC) verwaltet. Ein Client oder ein eigenständiger Aufruf-Manager hat dieses Handle entweder beim Aufrufen der NdisCoCreateVc-Funktion oder über seine ProtocolCoCreateVc-Funktion bereitgestellt.

[in] NetBufferLists

Ein Zeiger auf eine Liste von NET_BUFFER_LIST Strukturen, die der Protokolltreiber in einem vorherigen Aufruf von bereitgestellt hat. NdisCoSendNetBufferLists-Funktion .

[in] SendCompleteFlags

NDIS-Flags, die mit einem bitweisen OR-Vorgang kombiniert werden können. Um alle Flags zu löschen, legen Sie diesen Parameter auf 0 (null) fest. ProtocolCoSendNetBufferListsComplete unterstützt das flag NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, das; wenn festgelegt, gibt an, dass die aktuelle IRQL DISPATCH_LEVEL ist. Weitere Informationen zu diesem Flag finden Sie unter Dispatch IRQL Tracking.For more information about this flag, see Dispatch IRQL Tracking.

Rückgabewert

Keine

Bemerkungen

Die ProtocolCoSendNetBufferListsComplete-Funktion ist für CoNDIS-Protokolltreiber erforderlich. ProtocolCoSendNetBufferListsComplete führt alle Nachverarbeitungsvorgänge aus, die zum Abschließen eines Sendevorgangs erforderlich sind. Beispielsweise kann der Protokolltreiber die Clients benachrichtigen, die den Treiber zum Senden der Netzwerkdaten aufgefordert haben, dass der Sendevorgang abgeschlossen ist.

NDIS ruft ProtocolCoSendNetBufferListsComplete auf, nachdem der zugrunde liegende Miniporttreiber den aufruft. NdisMCoSendNetBufferListsComplete-Funktion . Ein vollständiger Sendevorgang bedeutet nicht unbedingt, dass ein zugrunde liegender Miniporttreiber die angegebenen Netzwerkdaten übertragen hat. Ein Miniporttreiber kann beispielsweise angeben, dass ein Sendevorgang abgeschlossen wurde, sobald die Netzwerkdaten an die Netzwerkschnittstelle Karte Hardware (NIC) übertragen werden.

Wenn NDIS ProtocolCoSendNetBufferListsComplete aufruft, erhält der Protokolltreiber den Besitz aller Ressourcen zurück, die den NET_BUFFER_LIST Strukturen zugeordnet sind, die der NetBufferLists-Parameter angibt.

NDIS übermittelt immer vom Protokolltreiber bereitgestellte Netzwerkdaten an die zugrunde liegenden Treiber in der protokollbestimmten Reihenfolge, die an NdisCoSendNetBufferLists übergeben wurde. Der zugrunde liegende Treiber kann die Sendeanforderungen jedoch in beliebiger Reihenfolge abschließen. Das heißt, Protokolltreiber können sich auf NDIS verlassen, um Netzwerkdaten in fiFO-Reihenfolge (First In, First Out) an den zugrunde liegenden Treiber zu übermitteln. Protokolltreiber können sich jedoch nicht auf den zugrunde liegenden Treiber verlassen, um NdisMCoSendNetBufferListsComplete in derselben Reihenfolge aufzurufen.

NDIS ruft ProtocolCoSendNetBufferListsComplete unter IRQL<= DISPATCH_LEVEL auf.

Beispiele

Um eine ProtocolCoSendNetBufferListsComplete-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der zu definierenden Funktion identifiziert. Windows bietet eine Reihe von Funktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Funktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine ProtocolCoSendNetBufferListsComplete-Funktion mit dem Namen "MyCoSendNetBufferListsComplete" zu definieren, verwenden Sie den typ PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE , wie in diesem Codebeispiel gezeigt:

PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE MyCoSendNetBufferListsComplete;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyCoSendNetBufferListsComplete(
    NDIS_HANDLE  ProtocolVcContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendCompleteFlags
    )
  {...}

Der PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE Funktionstyp ist in der Ndis.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie der Funktionsdefinition die anmerkung Use_decl_annotations hinzufügen. Die Use_decl_annotations-Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.

Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Zielplattform Windows
Kopfzeile ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL

Weitere Informationen

Sende- und Empfangsfunktionen des CoNDIS-Protokolltreibers

NET_BUFFER_LIST

NdisCoCreateVc

NdisCoSendNetBufferLists

NdisMCoSendNetBufferListsComplete

ProtocolCoCreateVc

ProtocolCoReceiveNetBufferLists