Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ProtocolCoSendNetBufferListsComplete--Funktion schließt einen Sendevorgang ab, den der Protokolltreiber mit einem Aufruf an den NdisCoSendNetBufferLists Funktion.
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 zu einem vom Protokolltreiber zugewiesenen Kontextbereich, in dem dieser Treiber die Laufzeitstatusinformationen für die virtuelle Verbindung (VC) verwaltet. Ein Client- oder eigenständiger Anruf-Manager hat dieses Handle entweder bereitgestellt, wenn er die NdisCoCreateVc--Funktion oder aus seiner ProtocolCoCreateVc--Funktion aufgerufen hat.
[in] NetBufferLists
Ein Zeiger auf eine Liste der NET_BUFFER_LIST Strukturen, die der Protokolltreiber in einem vorherigen Aufruf des 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 Null fest. ProtocolCoSendNetBufferListsComplete- unterstützt das NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL Flag, das; wenn festgelegt, gibt an, dass die aktuelle IRQL DISPATCH_LEVEL ist. Weitere Informationen zu diesem Kennzeichen finden Sie unter IRQL Tracking.
Rückgabewert
Nichts
Bemerkungen
Die ProtocolCoSendNetBufferListsComplete--Funktion ist für CoNDIS-Protokolltreiber erforderlich. ProtocolCoSendNetBufferListsComplete führt die Postverarbeitung aus, die zum Abschließen eines Sendevorgangs erforderlich ist. Beispielsweise kann der Protokolltreiber die Clients benachrichtigen, die den Treiber aufgefordert haben, die Netzwerkdaten zu senden, die der Sendevorgang abgeschlossen ist.
NDIS ruft ProtocolCoSendNetBufferListsComplete auf, nachdem der zugrunde liegende Miniporttreiber den NdisMCoSendNetBufferListsComplete Funktion. Ein vollständiger Sendevorgang impliziert nicht unbedingt, dass ein zugrunde liegender Miniporttreiber die angegebenen Netzwerkdaten übertragen hat. Beispielsweise kann ein Miniporttreiber angeben, dass ein Sendevorgang abgeschlossen ist, sobald er die Netzwerkdaten an die Hardware der Netzwerkschnittstellenkarte (Network Interface Card, NIC) überträgt.
Wenn NDIS ProtocolCoSendNetBufferListsCompleteaufruft, erhält der Protokolltreiber den Besitz aller Ressourcen, die den NET_BUFFER_LIST Strukturen zugeordnet sind, die der NetBufferLists- Parameter angibt.
NDIS sendet immer die vom Protokolltreiber bereitgestellten Netzwerkdaten an die zugrunde liegenden Treiber in der protokollbestimmten Reihenfolge, die an NdisCoSendNetBufferListsübergeben wurde. Der zugrunde liegende Treiber kann jedoch die Sendeanforderungen in beliebiger Reihenfolge ausführen. Das heißt, Protokolltreiber können sich auf NDIS verlassen, um Netzwerkdaten in "first in, first out" (FIFO) 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- bei IRQL<= DISPATCH_LEVEL auf.
beispiele für
Um eine ProtocolCoSendNetBufferListsComplete--Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der Funktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Funktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.Um beispielsweise eine ProtocolCoSendNetBufferListsComplete--Funktion zu definieren, die den Namen "MyCoSendNetBufferListsComplete" hat, verwenden Sie den PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE Typ, 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 wird in der Ndis.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE in der Headerdatei angewendet werden, verwendet 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_annotationsfinden Sie unter Annotating Function Behavior.
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Unterstützt in NDIS 6.0 und höher. |
| Zielplattform- | Fenster |
| Header- | ndis.h (include Ndis.h) |
| IRQL- | <= DISPATCH_LEVEL |