NdisMIndicateReceiveNetBufferLists-Funktion (ndis.h)

Miniporttreiber rufen die NdisMIndicateReceiveNetBufferLists-Funktion auf, um den Empfang von Daten aus dem Netzwerk anzugeben.

Syntax

void NdisMIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      MiniportAdapterHandle,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

Parameter

[in] MiniportAdapterHandle

Der Miniporthandle, den NDIS an den übergeben hat MiniportInitializeEx-Funktion .

NetBufferList

Eine verknüpfte Liste von NET_BUFFER_LIST Strukturen, die der Miniporttreiber zugewiesen hat.

[in] PortNumber

Eine Portnummer, die einen Miniportadapterportport identifiziert. Um eine Miniportadapterportnummer zuzuweisen, rufen Sie die Funktion NdisMAllocatePort auf. Ein Nullwert gibt den Standardport eines Miniportadapters an. Verwenden Sie den Standardport, wenn der Miniporttreiber keine Ports für den angegebenen Adapter zugewiesen hat.

[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 diesen Member auf 0 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.

NDIS_RECEIVE_FLAGS_RESOURCES

Gibt an, dass der Miniporttreiber den Besitz der NET_BUFFER_LIST-Strukturen und aller angefügten NET_BUFFER Strukturen sofort nach dem Aufruf von NdisMIndicateReceiveNetBufferLists zurückerobert .

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

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

Miniporttreiber

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE optional von Miniporttreibern festgelegt wird, die sicher sind, dass alle NBLs in einer NBL-Kette denselben EtherType aufweisen. Durch Festlegen dieses Flags informiert der Miniporttreiber NDIS und Protokolle der oberen Ebene darüber, dass sie nicht jedes Paket auf seinen EtherType untersuchen müssen, was die Leistung erhöht. Miniporttreiber sind nie erforderlich, um dieses Flag festzulegen.

Leichte Filter (LWFs)

Beim Angeben von neuartigen Empfangsvorgängen kann ein Leichtgewichtsfilter (LWF) optional auch NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE festlegen, wenn sicher ist, dass alle NBLs in einer NBL-Kette den gleichen EtherType aufweisen. Wie Miniporttreiber sind LWFs in diesem Fall jedoch nie erforderlich, um dieses Flag festzulegen, und sie können das Flag immer löschen.

Wenn ein LWF den EtherType der NBLs ändert, muss das LWF das Flag löschen, wenn die NBLs nicht mehr denselben EtherType aufweisen.

Wenn ein LWF den EtherType der NBLs beim Durchlaufen von Empfängen von der unteren Ebene ändert, kann das LWF optional dieses Flag festlegen, wenn sicher ist, dass alle NBLs in einer NBL-Kette denselben EtherType aufweisen. In diesem Fall ist der LWF nie erforderlich, um dieses Flag festzulegen, und kann es immer löschen.

Wenn dieses Flag festgelegt ist, kann ein LWF beim Verbrauch von Empfängen aus der unteren Ebene davon ausgehen, dass jede NBL in der Kette denselben EtherType aufweist. Das LWF ist nie erforderlich, um dieses Flag zu lesen und kann stattdessen auswählen, dass der EtherType immer aus jeder NBL gelesen wird.

Bei der Kombination mehrerer NBL-Ketten muss ein LWF dieses Flag löschen, es sei denn, es ist sicher, dass die neue NBL-Kette einen homogenen EtherType aufweist.

Protokolltreiber

Wenn beim Verwenden von Empfängen von der unteren Schicht NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE festgelegt ist, kann das Protokoll davon ausgehen, dass jede NBL in der Kette denselben EtherType aufweist. Ein Protokoll ist nie erforderlich, um dieses Flag zu lesen, und kann stattdessen auswählen, dass der EtherType immer von jeder NBL gelesen werden soll.

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 der Paketfilter- und Multicastadressenliste entsprechen, die dem Miniportadapter zugewiesen sind.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste von 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 zugewiesen wurde.

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

Gibt an, dass alle NET_BUFFER_LIST-Strukturen in der Liste unter NetBufferLists gültige Shared Memory-Informationen enthalten. Wenn dieses Flag für eine empfangene NET_BUFFER_LIST festgelegt wird, behandelt NDIS die Informationen des freigegebenen Speichers als gültig. Wenn dieses Flag nicht festgelegt ist, ignorieren NDIS und Treiber die Informationen zum freigegebenen Speicher. 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 Arbeitsspeicher freigegeben werden soll, der einer VM-Warteschlange zugeordnet ist, wenn eine Warteschlange gelöscht wird.

NDIS_RECEIVE_FLAGS_MORE_NBLS

Reserviert.

Rückgabewert

Keine

Bemerkungen

Ein Miniporttreiber ruft in der Regel die Funktion NdisMIndicateReceiveNetBufferLists über seine MiniportInterruptDPC-Funktion auf. Wenn ein Miniporttreiber NdisMIndicateReceiveNetBufferLists aufruft, gibt er eine Liste NET_BUFFER_LIST Strukturen im NetBufferLists-Parameter an. NDIS übergibt die NET_BUFFER_LIST Strukturen an die ProtocolReceiveNetBufferLists-Funktion von gebundenen Protokolltreibern.

Miniporttreiber müssen das SourceHandle-Element jeder NET_BUFFER_LIST Struktur auf denselben Wert wie der MiniportAdapterHandle-Parameter festlegen.

Wenn ein Miniporttreiber NdisMIndicateReceiveNetBufferLists aufruft und das NDIS_RECEIVE_FLAG_RESOURCES-Flag im ReceiveFlags-Parameter löscht, gibt NDIS die angegebenen NET_BUFFER_LIST Strukturen an den Miniporttreiber zurück. MiniportReturnNetBufferLists-Funktion . In diesem Fall darf der Miniporttreiber die NET_BUFFER_LIST-Strukturen erst wieder abrufen, wenn NDIS die NET_BUFFER_LIST Strukturen an die MiniportReturnNetBufferLists-Funktion des Miniporttreibers zurückgibt.

Wenn ein Miniporttreiber NdisMIndicateReceiveNetBufferLists aufruft und das NDIS_RECEIVE_FLAG_RESOURCES-Flag im ReceiveFlags-Parameter festlegt, gibt dies an, dass der Miniporttreiber den Besitz der NET_BUFFER_LIST Strukturen sofort wieder erlangen muss. In diesem Fall ruft NDIS die MiniportReturnNetBufferLists-Funktion des Miniporttreibers nicht auf, um die NET_BUFFER_LIST Strukturen zurückzugeben. Stattdessen gibt NDIS die NET_BUFFER_LIST-Strukturen an den Miniporttreiber zurück, wenn sie von NdisMIndicateReceiveNetBufferLists zurückgegeben wird. Der Miniporttreiber sollte die NET_BUFFER_LIST-Strukturen sofort nach der Rückgabe von NdisMIndicateReceiveNetBufferLists zurückfordern. Um die NET_BUFFER_LIST-Strukturen wiederzuerobern, kann ein Miniporttreiber seinen eigenen Aufrufen MiniportReturnNetBufferLists-Funktion .

Das Festlegen des NDIS_RECEIVE_FLAG_RESOURCES-Flags im ReceiveFlags-Parameter zwingt die Protokolltreiber, die Netzwerkdaten zu kopieren und die NET_BUFFER_LIST Strukturen an den Miniporttreiber freizugeben. Treiberautoren sollten ihre Miniporttreiber mit genügend vorab zugewiesenen NET_BUFFER_LIST-Strukturen entwerfen, um unnötiges Kopieren zu vermeiden.

Der Aufrufer von NdisMIndicateReceiveNetBufferLists muss die NET_BUFFER_LIST Strukturen, die angefügten NET_BUFFER Strukturen und alle angefügten MDLs ordnungsgemäß initialisieren.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Zielplattform Universell
Header ndis.h (einschließlich Ndis.h)
Bibliothek Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_SendRcv_Function(ndis)

Weitere Informationen

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists