Freigeben über


MINIPORT_CO_SEND_NET_BUFFER_LISTS Rückruffunktion (ndis.h)

Die Funktion MiniportCoSendNetBufferLists überträgt Netzwerkdaten, die in einer angegebenen verknüpften Liste von NET_BUFFER_LIST-Strukturen enthalten sind.

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

Syntax

MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;

void MiniportCoSendNetBufferLists(
  [in] NDIS_HANDLE MiniportVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] ULONG SendFlags
)
{...}

Parameter

[in] MiniportVcContext

Ein Handle für einen vom Miniporttreiber zugewiesenen Kontextbereich, in dem der Miniporttreiber seinen Status pro virtueller Verbindung (VC) beibehält. Der Miniporttreiber hat dieses Handle über seine MiniportCoCreateVc-Funktion für NDIS bereitgestellt.

[in] NetBufferLists

Ein Zeiger auf die erste NET_BUFFER_LIST-Struktur in einer verknüpften Liste von NET_BUFFER_LIST-Strukturen . Jede NET_BUFFER_LIST-Struktur in der Liste beschreibt eine Liste mit NET_BUFFER Strukturen. Jede NET_BUFFER Struktur in der Liste wird einer Kette von Speicherdeskriptorlisten (MDLs) zugeordnet. Die MDLs enthalten die Netzwerkdaten, die MiniportCoSendNetBufferLists überträgt.

[in] SendFlags

Flags, die Attribute für den Sendevorgang definieren. Die Flags können mit einer bitweisen OR-Operation kombiniert werden. Um alle Flags zu löschen, legen Sie diesen Parameter auf 0 (null) fest. MiniportCoSendNetBufferLists unterstützt die folgenden Flags:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Der Aufrufer kann dieses Flag optional festlegen, wenn 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.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

NDIS sollte auf Loopback überprüfen. Standardmäßig führt NDIS keine Datenschleife an den Treiber zurück, der die Sendeanforderung übermittelt hat. Ein überlastender Treiber kann dieses Verhalten überschreiben, indem das flag NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK festgelegt wird. Wenn dieses Flag festgelegt ist, identifiziert NDIS alle NET_BUFFER Strukturen, die Daten enthalten, die den Empfangskriterien für die Bindung entsprechen. NDIS gibt NET_BUFFER Strukturen an, die den Kriterien des übergeordneten Treibers entsprechen. Dieses Flag wirkt sich nicht auf die Überprüfung auf Loopback oder das Zurückschleifen anderer Bindungen aus.

Rückgabewert

Keine

Bemerkungen

Die MiniportCoSendNetBufferLists-Funktion ist für CoNDIS-Miniporttreiber erforderlich. Wenn ein überlastender Treiber die NdisCoSendNetBufferLists-Funktion , NDIS ruft die MiniportCoSendNetBufferLists-Funktion des gebundenen Miniporttreibers auf.

Die Reihenfolge der verknüpften Liste der NET_BUFFER_LIST Strukturen, die NDIS an NetBufferLists übergibt, stellt die Reihenfolge dar, in der der Miniporttreiber die Netzwerkdaten übertragen soll. Darüber hinaus sollte ein Miniporttreiber die NET_BUFFER_LIST-Strukturen von mehreren MiniportCoSendNetBufferLists-Aufrufen in der Reihenfolge senden, in der der Miniporttreiber die Strukturen empfangen hat.

CoNDIS-Miniporttreiber müssen alle Sendeanforderungen von NDIS akzeptieren, indem sie die MiniportCoSendNetBufferLists-Funktion aufrufen. Wenn ein Miniporttreiber eine Sendeanforderung nicht sofort abschließen kann, muss der Treiber die Anforderung in einer Warteschlange halten, bis er die Anforderung abschließen kann. Während eine Sendeanforderung aussteht, behält der Miniporttreiber den Besitz der NET_BUFFER_LIST-Strukturen und aller Ressourcen, die den NET_BUFFER_LIST-Strukturen zugeordnet sind.

Der Miniporttreiber muss den NdisMCoSendNetBufferListsComplete-Funktion , um alle CoNDIS-Sendeanforderungen abzuschließen. Um die Computerleistung zu verbessern, kann der Treiber eine verknüpfte Liste erstellen, die die NET_BUFFER_LIST Strukturen aus mehreren Sendeanforderungen enthält. Der Treiber kann dann eine solche verknüpfte Liste in einem einzigen Aufruf von NdisMCoSendNetBufferListsComplete übergeben.

Darüber hinaus sollten Sie davon ausgehen, dass der Miniporttreiber nicht auf die NET_BUFFER_LIST-Strukturen und andere zugeordnete Ressourcen zugreifen kann, sobald der Treiber NdisMCoSendNetBufferListsComplete aufruft.

Die MiniportCoSendNetBufferLists-Funktion muss den Zugriff auf die internen Warteschlangen von Netzwerkdaten mit den anderen MiniportXxx-Funktionen des Treibers synchronisieren, die auf dieselben Warteschlangen zugreifen. Ein Miniporttreiber kann Drehsperren verwenden, um den Zugriff auf die Warteschlangen zu synchronisieren.

Protokolltreiber bestimmen, welche Netzwerkdaten erforderlich sind, basierend auf dem vom gebundenen Miniporttreiber ausgewählten Mediumtyp. Ein Protokolltreiber kann jedoch Netzwerkdaten bereitstellen, die Pakete angeben, die kürzer als die Mindestpaketgröße für das ausgewählte Medium sind. In diesem Fall muss MiniportCoSendNetBufferLists die Pakete mit Nullen auffüllen, wenn für das ausgewählte Medium eine Mindestlänge für die Größe des Übertragungspakets erforderlich ist.

NDIS ruft MiniportCoSendNetBufferLists unter IRQL<= DISPATCH_LEVEL auf.

Beispiele

Um eine MiniportCoSendNetBufferLists-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten 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 MiniportCoSendNetBufferLists-Funktion mit dem Namen "MyCoSendNetBufferLists" zu definieren, verwenden Sie den typ MINIPORT_CO_SEND_NET_BUFFER_LISTS , wie in diesem Codebeispiel gezeigt:

MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyCoSendNetBufferLists(
    NDIS_HANDLE  MiniportVcContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendFlags
    )
  {...}

Der MINIPORT_CO_SEND_NET_BUFFER_LISTS Funktionstyp ist in der Headerdatei Ndis.h 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 MINIPORT_CO_SEND_NET_BUFFER_LISTS 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

MiniportCoCreateVc

NET_BUFFER

NET_BUFFER_LIST

NdisCoSendNetBufferLists

NdisMCoSendNetBufferListsComplete