Freigeben über


PROTOCOL_RECEIVE_NET_BUFFER_LISTS Rückruffunktion (ndis.h)

Die ProtocolReceiveNetBufferLists Funktionsprozesse erhalten Hinweise von zugrunde liegenden Treibern.

Hinweis Sie müssen die Funktion mithilfe des PROTOCOL_RECEIVE_NET_BUFFER_LISTS Typs deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

PROTOCOL_RECEIVE_NET_BUFFER_LISTS ProtocolReceiveNetBufferLists;

void ProtocolReceiveNetBufferLists(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG NumberOfNetBufferLists,
  [in] ULONG ReceiveFlags
)
{...}

Parameter

[in] ProtocolBindingContext

Ein Handle für einen Kontextbereich, den der Protokolltreiber zugeordnet hat, um Zustandsinformationen für eine Bindung beizubehalten. Dieses Handle wurde in einem vorherigen Aufruf der NdisOpenAdapterEx--Funktion an NDIS übergeben.

[in] NetBufferLists

Eine verknüpfte Liste der NET_BUFFER_LIST Strukturen, die dem zugrunde liegenden Treiber zugeordnet wurden. Jede NET_BUFFER_LIST Struktur ist in der Regel einer NET_BUFFER Struktur zugeordnet.

[in] PortNumber

Eine Portnummer, die einen Miniportadapteranschluss identifiziert. Die Standardportnummer eines Miniportadapters ist Null. Protokolltreiber, die keine Miniportadapterport-Ports verwenden, sollten diesen Parameter ignorieren.

[in] NumberOfNetBufferLists

Die Anzahl der NET_BUFFER_LIST Strukturen, die sich in der verknüpften Liste der Strukturen in NetBufferLists befinden.

[in] ReceiveFlags

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 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 Kennzeichen finden Sie unter IRQL Tracking.

NDIS_RECEIVE_FLAGS_RESOURCES

Gibt an, dass NDIS den Besitz der NET_BUFFER_LIST Strukturen und aller angefügten NET_BUFFER Strukturen unmittelbar nach dem Aufruf von ProtocolReceiveNetBufferList s zurückgibt.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

Gibt an, dass alle NET_BUFFER_LIST Strukturen in der Liste bei NetBufferLists denselben Protokolltyp (EtherType) aufweisen.

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 Multicastliste übereinstimmen, die dem Miniportadapter zugewiesen sind.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

Gibt an, dass alle NET_BUFFER_LIST Strukturen in der Liste bei NetBufferLists derselben VM-Warteschlange angehören. Ein Miniporttreiber muss diese Kennzeichnung für alle Empfangsanzeigen in einer Warteschlange festlegen, wenn das NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION Flag im Flags Mitglied des NDIS_RECEIVE_QUEUE_PARAMETERS Struktur, als diese Warteschlange zugewiesen 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 Kennzeichen für eine empfangene NET_BUFFER_LISTfestgelegt wird, behandelt NDIS die freigegebenen Speicherinformationen als gültig. Wenn dieses Kennzeichen nicht festgelegt ist, ignorieren NDIS und Treiber die Informationen zum freigegebenen Speicher. Beispielsweise können Zwischentreiber, die Paketdaten ändern, dieses Flag verwenden, um festzustellen, ob Daten kopiert werden sollen. Miniport-Treiber können das Flag verwenden, um zu bestimmen, wie der Speicher freigegeben wird, der einer VM-Warteschlange zugeordnet ist, wenn eine Warteschlange gelöscht wird.

NDIS_RECEIVE_FLAGS_MORE_NBLS

Reserviert.

Rückgabewert

Nichts

Bemerkungen

ProtocolReceiveNetBufferLists ist eine erforderliche Funktion für Protokolltreiber. NDIS ruft ProtocolReceiveNetBufferLists auf, nachdem ein gebundener Miniporttreiber den NdisMIndicateReceiveNetBufferLists Funktion. Ein Aufruf von ProtocolReceiveNetBufferLists kann auch aufgrund eines Loopbacks auftreten.

Wenn das NDIS_RECEIVE_FLAGS_RESOURCES Flag im ReceiveFlags- Parameter nicht festgelegt ist, behält der Protokolltreiber den Besitz der NET_BUFFER_LIST-Strukturen bei, bis sie die NdisReturnNetBufferLists Funktion.

Wenn NDIS das NDIS_RECEIVE_FLAGS_RESOURCES Flag festlegt, kann der Protokolltreiber die NET_BUFFER_LIST Struktur und zugeordneten Ressourcen nicht beibehalten. Das set NDIS_RECEIVE_FLAGS_RESOURCES flag gibt an, dass ein zugrunde liegender Treiber nur wenig Ressourcen empfängt. In diesem Fall sollte die ProtocolReceiveNetBufferLists-funktion die empfangenen Daten so schnell wie möglich in protokollgeteilten Speicher kopieren und zurückgeben.

Hinweis Wenn das NDIS_RECEIVE_FLAGS_RESOURCES Flag festgelegt ist, muss der Protokolltreiber den ursprünglichen Satz von NET_BUFFER_LIST Strukturen in der verknüpften Liste beibehalten. Wenn dieses Kennzeichen beispielsweise festgelegt ist, verarbeitet der Treiber die Strukturen möglicherweise und gibt sie einzeln den Stapel an, aber bevor die Funktion zurückgibt, muss sie die ursprüngliche verknüpfte Liste wiederherstellen.
 
Auf einem Multiprozessorsystem kann diese Funktion gleichzeitig auf mehr als einem Prozessor ausgeführt werden. Wenden Sie schutz an (z. B. Spin locks) auf kritische Datenstrukturen, auf die von ProtocolReceiveNetBufferListszugegriffen wird.

NDIS ruft ProtocolReceiveNetBufferLists bei IRQL-<= DISPATCH_LEVEL auf.

beispiele für

Um eine ProtocolReceiveNetBufferLists--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 ProtocolReceiveNetBufferLists--Funktion zu definieren, die den Namen "MyReceiveNetBufferLists" hat, verwenden Sie den PROTOCOL_RECEIVE_NET_BUFFER_LISTS Typ, wie in diesem Codebeispiel gezeigt:

PROTOCOL_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyReceiveNetBufferLists(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  NumberOfNetBufferLists,
    ULONG ReceiveFlags
    )
  {...}

Der PROTOCOL_RECEIVE_NET_BUFFER_LISTS 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_RECEIVE_NET_BUFFER_LISTS 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

Siehe auch

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMIndicateReceiveNetBufferLists

NdisOpenAdapterEx

NdisReturnNetBufferLists