FILTER_SEND_NET_BUFFER_LISTS Rückruffunktion (ndis.h)

NDIS ruft die FilterSendNetBufferLists-Funktion auf, damit ein Filtertreiber eine verknüpfte Liste von NET_BUFFER_LIST Strukturen filtern kann.

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

Syntax

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

void FilterSendNetBufferLists(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Parameter

[in] FilterModuleContext

Ein Handle für den Kontextbereich für das Filtermodul. Der Filtertreiber hat diesen Kontextbereich in der FilterAttach-Funktion erstellt und initialisiert.

NetBufferList

Ein Zeiger auf eine verknüpfte Liste von NET_BUFFER_LIST Strukturen, die Listen mit NET_BUFFER Strukturen angeben. Jeder NET_BUFFER in der Liste ordnet eine Kette von MDLs zu, die die übertragenen Daten enthalten.

[in] PortNumber

Eine Portnummer, die einen Miniportadapterport angibt. Portnummern des Miniport-Adapters werden durch Aufrufen der NdisMAllocatePort-Funktion zugewiesen. Ein Nullwert gibt den Standardport eines Miniportadapters an.

[in] SendFlags

Flags, die Attribute für den Sendevorgang definieren. Die Flags können mit einem OR-Vorgang kombiniert werden. Um alle Flags zu löschen, legen Sie dieses Element auf 0 (null) fest. Diese Funktion unterstützt die folgenden Flags:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

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.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Gibt an, dass NDIS auf Loopback überprüfen soll. 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 dieses Flag 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 hat keine Auswirkungen auf die Suche nach Loopback oder zurück auf andere Bindungen.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

Wenn dieses Flag festgelegt ist, stammen alle Pakete in einer verknüpften Liste von NET_BUFFER_LIST Strukturen vom gleichen erweiterbaren Hyper-V-Switch-Quellport.

Weitere Informationen finden Sie unter Hyper-V Extensible Switch Send and Receive Flags.For more information, see Hyper-V Extensible Switch Send and Receive Flags.

Hinweis Wenn jedes Paket in der verknüpften Liste der NET_BUFFER_LIST-Strukturen denselben Quellport verwendet, sollte die Erweiterung das NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE-Flag im SendCompleteFlags-Parameter von NdisFSendNetBufferListsComplete festlegen, wenn die Sendeanforderung abgeschlossen wird.
 
Hinweis Dieses Flag ist in NDIS 6.30 und höher verfügbar.
 

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

Wenn dieses Flag festgelegt ist, sollen alle Pakete in einer verknüpften Liste von NET_BUFFER_LIST Strukturen an den gleichen erweiterbaren Switchzielport weitergeleitet werden.

Weitere Informationen finden Sie unter Hyper-V Extensible Switch Send and Receive Flags.For more information, see Hyper-V Extensible Switch Send and Receive Flags.

Hinweis Dieses Flag ist in NDIS 6.30 und höher verfügbar.
 

Rückgabewert

Keine

Bemerkungen

FilterSendNetBufferLists ist eine optionale Funktion. Wenn ein Filtertreiber keine Sendeanforderungen filtert, kann er den Einstiegspunkt für diese Funktion auf NULL festlegen, wenn er die NdisFRegisterFilterDriver-Funktion .

Wenn ein Filtertreiber eine FilterSendNetBufferLists-Funktion angibt und Sendeanforderungen in die Warteschlange stellt, muss er auch eine FilterCancelSendNetBufferLists-Funktion .

Der Filtertreiber kann die NdisSetOptionalHandlers-Funktion aus der FilterSetModuleOptions-Funktion aufrufen, um eine FilterSendNetBufferLists-Funktion für ein Filtermodul anzugeben.

Wenn der Filtertreiber eine FilterSendNetBufferLists-Funktion angibt, ruft NDIS diese Funktion auf, um die Daten zu filtern, die in einer Liste von NET_BUFFER Strukturen über das Netzwerk enthalten sind. NDIS gibt eine Liste der NET_BUFFER-Strukturen in jeder NET_BUFFER_LIST-Struktur an.

Wenn der Filtertreiber FilterSendNetBufferLists nicht angegeben hat, ruft NDIS den nächsten Filtertreiber auf, der sich niedriger im Treiberstapel befindet, der eine FilterSendNetBufferLists-Funktion angegeben hat. Wenn keine solchen zugrunde liegenden Filtertreiber vorhanden sind, ruft NDIS einen zugrunde liegenden Treiber auf. MiniportSendNetBufferLists-Funktion .

Der Filtertreiber kann die Daten filtern und die gefilterten Daten an zugrunde liegende Treiber senden. Für jede anFilterSendNetBufferLists übermittelte NET_BUFFER-Struktur kann ein Filtertreiber die folgenden Aktionen ausführen:

  • Übergeben Sie den Puffer an den nächsten zugrunde liegenden Treiber, indem Sie die NdisFSendNetBufferLists-Funktion aufrufen. Der Filtertreiber kann den Pufferinhalt ändern, bevor NdisFSendNetBufferLists aufgerufen wird. In diesem Fall ruft NDIS die FilterSendNetBufferListsComplete-Funktion, nachdem die zugrunde liegenden Treiber die Sendeanforderung abgeschlossen haben.
  • Lehnen Sie den Puffer ab, indem Sie die Funktion NdisFSendNetBufferListsComplete aufrufen.
  • Den Puffer zur späteren Verarbeitung in eine lokale Datenstruktur in die Warteschlange stellen.
  • Kopieren Sie den Puffer, und erstellen Sie eine Sendeanforderung mit der Kopie. Der Sendevorgang ähnelt einer vom Filtertreiber initiierten Sendeanforderung. In diesem Fall muss der Treiber den ursprünglichen Puffer an den übergeordneten Treiber zurückgeben, indem er die NdisFSendNetBufferListsComplete-Funktion aufruft .
Nach Abschluss des Sendevorgangs kehrt ein Filtertreiber die Änderungen an den Pufferdeskriptoren um, die er in der FilterSendNetBufferLists-Funktion vorgenommen hat. Der Treiber ruft die NdisFSendNetBufferListsComplete-Funktion auf, um die verknüpfte Liste der NET_BUFFER_LIST Strukturen an die übergeordneten Treiber zurückzugeben und die letzte status der Sendeanforderung zurückzugeben.

Wenn sich ein Filtermodul im Zustand Angehalten befindet, darf der Filtertreiber keine Sendeanforderungen für dieses Filtermodul erstellen. Wenn NDIS FilterSendNetBufferLists aufruft, darf der Treiber nicht NdisFSendNetBufferLists aufrufen, um die Daten zu übergeben, bis der Treiber neu gestartet wird. Der Treiber sollte NdisFSendNetBufferListsComplete sofort aufrufen, um den Sendevorgang abzuschließen. Es sollte die vollständige status in jeder NET_BUFFER_LIST-Struktur auf NDIS_STATUS_PAUSED festgelegt werden.

NDIS ruft FilterSendNetBufferLists unter IRQL <= DISPATCH_LEVEL auf.

Beispiele

Um eine FilterSendNetBufferLists-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.

Wenn Sie beispielsweise eine FilterSendNetBufferLists-Funktion mit dem Namen "MySendNetBufferLists" definieren möchten, verwenden Sie den typ FILTER_SEND_NET_BUFFER_LISTS , wie in diesem Codebeispiel gezeigt:

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Der FILTER_SEND_NET_BUFFER_LISTS 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 FILTER_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

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry