FILTER_RECEIVE_NET_BUFFER_LISTS Rückruffunktion (ndis.h)
NDIS ruft die FilterReceiveNetBufferLists-Funktion auf, um einen Filtertreiber zum Verarbeiten einer Empfangsanzeige anzufordern.
Syntax
FILTER_RECEIVE_NET_BUFFER_LISTS FilterReceiveNetBufferLists;
void FilterReceiveNetBufferLists(
[in] NDIS_HANDLE FilterModuleContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
)
{...}
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.
[in] NetBufferLists
Eine verknüpfte Liste von NET_BUFFER_LIST Strukturen, die von zugrunde liegenden Treibern zugeordnet wurden. Jede NET_BUFFER_LIST-Struktur enthält eine NET_BUFFER-Struktur .
[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] NumberOfNetBufferLists
Die Anzahl der NET_BUFFER_LIST Strukturen, die sich in der verknüpften Liste der Strukturen unter NetBufferLists befinden .
[in] ReceiveFlags
Flags, die Attribute für die Empfangsanzeige 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_RECEIVE_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_RECEIVE_FLAGS_RESOURCES
Gibt an, dass NDIS unmittelbar nach der Rückgabe des Aufrufs von FilterReceiveNetBufferLists den Besitz der NET_BUFFER_LIST-Strukturen und aller angefügten NET_BUFFER-Strukturen zurückgibt.
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste unter NetBufferLists über denselben Protokolltyp (EtherType) verfügen.
NDIS_RECEIVE_FLAGS_SINGLE_VLAN
Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste unter NetBufferLists zum gleichen VLAN gehören.
NDIS_RECEIVE_FLAGS_PERFECT_FILTERED
Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste unter NetBufferLists nur Daten enthalten, die mit dem Paketfilter und der Multicastadressenliste übereinstimmen, die dem Miniportadapter zugewiesen sind.
NDIS_RECEIVE_FLAGS_SINGLE_QUEUE
Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste unter NetBufferLists derselben VM-Warteschlange angehören. Ein Miniporttreiber muss dieses Flag für alle Empfangsanzeigen in einer Warteschlange festlegen, wenn das NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION-Flag im Flags-Element des NDIS_RECEIVE_QUEUE_PARAMETERS Struktur, wenn diese Warteschlange zugeordnet wurde.
NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID
Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste unter NetBufferLists gültige freigegebene Speicherinformationen enthalten. Wenn dieses Flag für eine empfangene NET_BUFFER_LIST festgelegt ist, behandelt NDIS die Informationen des freigegebenen Speichers als gültig. Wenn dieses Flag nicht festgelegt ist, ignorieren NDIS und Treiber die Freigegebenen Speicherinformationen. Beispielsweise können Zwischentreiber, die Paketdaten ändern, dieses Flag verwenden, um zu bestimmen, ob Daten kopiert werden sollen. Miniporttreiber können das Flag verwenden, um zu bestimmen, wie der Speicher freigegeben werden soll, der einer VM-Warteschlange zugeordnet ist, wenn eine Warteschlange gelöscht wird.
NDIS_RECEIVE_FLAGS_MORE_NBLS
Reserviert.
NDIS_RECEIVE_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.
NDIS_RECEIVE_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.
Rückgabewert
Keine
Bemerkungen
FilterReceiveNetBufferLists ist eine optionale Funktion. Wenn ein Filtertreiber keine Empfangsanzeigen filtert, kann er den Einstiegspunkt für diese Funktion auf NULL festlegen, wenn er die NdisFRegisterFilterDriver-Funktion .
NDIS ruft FilterReceiveNetBufferLists auf, um Empfangsanzeigen zu verarbeiten, die von zugrunde liegenden Treibern initiiert werden. NDIS kann diese Funktion auch als Ergebnis von Loopback aufrufen.
Wenn der Filtertreiber keine FilterReceiveNetBufferLists-Funktion angegeben hat, ruft NDIS den nächsthöheren Filtertreiber im Stapel auf, der eine FilterReceiveNetBufferLists-Funktion angegeben hat. Wenn kein solcher Filtertreiber vorhanden ist, ruft NDIS einen überlastenden Treiber auf. ProtocolReceiveNetBufferLists-Funktion .
Wenn das NDIS_RECEIVE_FLAGS_RESOURCES-Flag im ReceiveFlags-Parameter nicht festgelegt ist, behält der Filtertreiber den Besitz der NET_BUFFER_LIST-Strukturen , bis er die NdisFReturnNetBufferLists-Funktion .
Wenn das NDIS_RECEIVE_FLAGS_RESOURCES-Flag im Parameter ReceiveFlags festgelegt ist, kann der Filtertreiber die NET_BUFFER_LIST-Struktur und die zugeordneten zugrunde liegenden Treiber zugeordneten Ressourcen nicht beibehalten. Dieses Flag kann darauf hinweisen, dass der zugrunde liegende Treiber nicht genügend Empfangsressourcen enthält. Die FilterReceiveNetBufferLists-Funktion sollte so schnell wie möglich zurückgegeben werden. Vor der Rückgabe kann die FilterReceiveNetBufferLists-Funktion die empfangenen Daten in den vom Filtertreiber zugewiesenen Speicher kopieren oder den Puffer übergeben, indem sie die NdisFIndicateReceiveNetBufferLists-Funktion .
-
Übergeben Sie den Puffer an den nächsten übergeordneten Treiber, indem Sie den NdisFIndicateReceiveNetBufferLists-Funktion .
Der Treiber kann den Inhalt des Puffers ändern, bevor NdisFIndicateReceiveNetBufferLists aufgerufen wird.
Der Treiber kann die NDIS_RECEIVE_FLAGS_RESOURCES-Flageinstellung ändern, die NDIS an FilterReceiveNetBufferLists übergeben hat, oder sie einfach an NdisFIndicateReceiveNetBufferLists übergeben.
- Verwerfen Sie den Puffer. Wenn NDIS das flag NDIS_RECEIVE_FLAGS_RESOURCES gelöscht hat, rufen Sie die NdisFReturnNetBufferLists-Funktion auf, um den Puffer zu verwerfen. Wenn NDIS das flag NDIS_RECEIVE_FLAGS_RESOURCES festgelegt hat, führen Sie keine Aktion aus, und kehren Sie von FilterReceiveNetBufferLists zurück, um den Puffer zu verwerfen.
- Den Puffer zur späteren Verarbeitung in eine lokale Datenstruktur in die Warteschlange stellen. Wenn NDIS das NDIS_RECEIVE_FLAGS_RESOURCES-Flag von FilterReceiveNetBufferLists festgelegt hat, muss der Filtertreiber eine Kopie erstellen, bevor er von FilterReceiveNetBufferLists zurückgibt.
- Kopieren Sie den Puffer, und erstellen Sie mit der Kopie eine Empfangsanzeige. Die Empfangsanzeige ähnelt einer vom Filtertreiber initiierten Empfangsanzeige. In diesem Fall muss der Treiber den ursprünglichen Puffer an den zugrunde liegenden Treiber zurückgeben.
Wenn sich ein Filtermodul im Zustand Angehalten befindet, darf der Filtertreiber keine Empfangsanzeigen für dieses Filtermodul haben. Der Filtertreiber darf die erstellten Puffer nicht an NdisFIndicateReceiveNetBufferLists übergeben. Der Treiber kann jedoch eine Empfangsanzeige von einem zugrunde liegenden Treiber übergeben.
NDIS ruft FilterReceiveNetBufferLists unter IRQL <= DISPATCH_LEVEL auf.
Beispiele
Um eine FilterReceiveNetBufferLists-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 FilterReceiveNetBufferLists-Funktion mit dem Namen "MyReceiveNetBufferLists" zu definieren, verwenden Sie den typ FILTER_RECEIVE_NET_BUFFER_LISTS , wie in diesem Codebeispiel gezeigt:
FILTER_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
VOID
MyReceiveNetBufferLists(
NDIS_HANDLE FilterModuleContext,
PNET_BUFFER_LIST NetBufferLists,
NDIS_PORT_NUMBER PortNumber,
ULONG NumberOfNetBufferLists,
ULONG ReceiveFlags
)
{...}
Der FILTER_RECEIVE_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 FILTER_RECEIVE_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
NdisFIndicateReceiveNetBufferLists ProtocolReceiveNetBufferListsFeedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für