Freigeben über


NdisMIndicateReceiveNetBufferLists-Funktion (ndis.h)

Miniport-Treiber 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 Miniportziehpunkt, den NDIS an den MiniportInitializeEx Funktion.

NetBufferList

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

[in] PortNumber

Eine Portnummer, die einen Miniportadapteranschluss identifiziert. Rufen Sie zum Zuweisen einer Miniportadapternummer die funktion NdisMAllocatePort auf. Ein Nullwert identifiziert den Standardport eines Miniportadapters. 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 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 der Miniporttreiber den Besitz der NET_BUFFER_LIST Strukturen und alle angefügten NET_BUFFER Strukturen unmittelbar nach dem Aufruf von NdisMIndicateReceiveNetBufferLists zurückgibt, zurückgegeben wird.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

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

Miniport-Treiber

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE ist optional von Miniporttreibern festgelegt, die bestimmte NBLs in einer NBL-Kette haben den gleichen EtherType. Durch Festlegen dieser Kennzeichnung informiert der Miniporttreiber NDIS und die Protokolle der oberen Ebene darüber, dass sie nicht jedes Paket für seinen EtherType untersuchen müssen, was die Leistung erhöht. Miniporttreiber sind nie erforderlich, um dieses Kennzeichen festzulegen.

Leichtgewichtsfilter (LWFs)

Bei der Angabe neuer Empfänge kann ein Leichtgewichtsfilter (LWF) optional auch NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE festlegen, wenn es sicher ist, dass alle NBLs in einer NBL-Kette denselben EtherType haben. Wie Miniporttreiber sind LWFs jedoch nie erforderlich, um dieses Kennzeichen in diesem Fall festzulegen, und kann sich jederzeit dafür entscheiden, die Kennzeichnung zu löschen.

Wenn ein LWF den EtherType der NBLs ändert, muss die LWF-beim Durchgang von der unteren Ebene die Kennzeichnung löschen, wenn die NBLs nicht mehr über denselben EtherType verfügen.

Wenn ein LWF den EtherType der NBLs ändert, kann der LWF beim Durchgehen von der unteren Ebene optional dieses Kennzeichen festlegen, wenn es sicher ist, dass alle NBLs in einer NBL-Kette denselben EtherType aufweisen. In diesem Fall ist die LWF nie erforderlich, um dieses Kennzeichen festzulegen, und kann immer auswählen, ob sie gelöscht werden soll.

Wenn der Verbrauch von der unteren Ebene abnimmt, kann ein LWF davon ausgehen, dass jede NBL in der Kette den gleichen EtherType hat. Die LWF ist nie erforderlich, um diese Kennzeichnung zu lesen und kann stattdessen entscheiden, immer den EtherType aus jeder NBL zu lesen.

Bei der Kombination mehrerer NBL-Ketten muss ein LWF-diese Kennzeichnung, es sei denn, es ist sicher, dass die neue NBL-Kette einen homogenen EtherType hat.

Protokolltreiber

Wenn NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE von der unteren Ebene empfangen wird, kann das Protokoll davon ausgehen, dass jede NBL in der Kette den gleichen EtherType hat. Ein Protokoll ist nie erforderlich, um dieses Flag zu lesen und kann stattdessen auswählen, dass der EtherType immer aus jeder NBL gelesen wird.

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 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

Ein Miniporttreiber ruft in der Regel die NdisMIndicateReceiveNetBufferLists Funktion aus der MiniportInterruptDPC--Funktion auf. Wenn ein Miniporttreiber NdisMIndicateReceiveNetBufferListsaufruft, gibt er eine Liste der NET_BUFFER_LIST Strukturen im NetBufferLists Parameter an. NDIS übergibt die NET_BUFFER_LIST Strukturen an die ProtocolReceiveNetBufferLists Funktion gebundener Protokolltreiber.

Miniport-Treiber müssen den SourceHandle- Member 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 parameter ReceiveFlags 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 zurückfordern, wenn NDIS die NET_BUFFER_LIST Strukturen an die MiniportReturnNetBufferLists Funktion zurückgibt.

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

Durch Festlegen des NDIS_RECEIVE_FLAG_RESOURCES Flags im ReceiveFlags Parameter werden die Protokolltreiber gezwungen, die Netzwerkdaten zu kopieren und die NET_BUFFER_LIST Strukturen an den Miniporttreiber freizugeben. Treiberautoren sollten ihre Miniporttreiber mit ausreichend vorinstallierten NET_BUFFER_LIST Strukturen entwerfen, um unnötiges Kopieren zu vermeiden.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Unterstützt in NDIS 6.0 und höher.
Zielplattform- Universal
Header- ndis.h (include Ndis.h)
Library Ndis.lib
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_SendRcv_Function(ndis)

Siehe auch

MiniportInitializeEx-

MiniportInterruptDPC-

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists-