NdisSendNetBufferLists-Funktion (ndis.h)

Protokolltreiber rufen die NdisSendNetBufferLists-Funktion auf, um Netzwerkdaten zu senden, die in einer Liste mit NET_BUFFER_LIST Strukturen enthalten sind.

Syntax

void NdisSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisBindingHandle,
  [in] __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

Parameter

[in] NdisBindingHandle

Ein Handle, das den Zieladapter identifiziert. Dieses Handle wurde von einem vorherigen Aufruf von NdisOpenAdapterEx zurückgegeben.

[in] NetBufferLists

Ein Zeiger auf eine verknüpfte Liste von NET_BUFFER_LIST Strukturen. Jede NET_BUFFER_LIST Struktur beschreibt eine Liste NET_BUFFER Strukturen.

[in] PortNumber

Eine Portnummer, die einen Miniportadapterportport identifiziert. Die Standardportnummer eines Miniportadapters ist 0. Protokolltreiber, die keine Miniportadapterports verwenden, sollten den Standardport angeben.

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

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Gibt an, dass NDIS auf Loopback überprüfen soll. Standardmäßig stellt NDIS keine Daten an den Treiber zurück, der die Sendeanforderung übermittelt hat. Ein überlastender Treiber kann dieses Verhalten überschreiben, indem er dieses Flag festlegt. 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 die Kriterien dem überlastenden Treiber entsprechen. Dieses Flag hat keine Auswirkungen auf die Überprüfung auf Loopback oder Zurückschleifen auf andere Bindungen.

Rückgabewert

Keine

Bemerkungen

Nachdem ein Protokolltreiber NdisSendNetBufferLists aufgerufen hat, übermittelt NDIS die NET_BUFFER_LIST Strukturen an den zugrunde liegenden Treiber. MiniportSendNetBufferLists-Funktion .

Der Protokolltreiber muss jede NET_BUFFER_LIST Struktur aus einem Pool zuordnen, indem eine der folgenden Funktionen aufgerufen wird:

Der Protokolltreiber kann NET_BUFFER_LIST Strukturen vorab zuordnen, z. B. in seiner DriverEntry-Routine . Alternativ kann der Treiber die Strukturen direkt vor dem Aufrufen von NdisSendNetBufferLists zuordnen und sie dann freigeben, wenn der Sendevorgang abgeschlossen ist. Wenn NDIS eine NET_BUFFER_LIST-Struktur an zurückgibt ProtocolSendNetBufferListsComplete, der Miniporttreiber kann die NET_BUFFER_LIST Struktur und alle zugehörigen Ressourcen für die Wiederverwendung vorbereiten. Die Wiederverwendung der NET_BUFFER_LIST Strukturen kann zu einer besseren Leistung führen, als die Strukturen an einen Pool zurückzugeben und sie dann für einen anderen Sendevorgang neu zuzuordnen.

Ein Protokolltreiber muss das SourceHandle-Element jeder NET_BUFFER_LIST-Struktur auf denselben Wert festlegen, den er an den NdisBindingHandle-Parameter übergibt. Das Bindungshandle stellt die Informationen bereit, die NDIS benötigt, um die NET_BUFFER_LIST-Struktur an den Protokolltreiber zurückzugeben, nachdem der zugrunde liegende Miniporttreiber aufgerufen hat. NdisMSendNetBufferListsComplete.

Vor dem Aufrufen von NdisSendNetBufferLists kann ein Protokolltreiber Informationen festlegen, die die Sendeanforderung mit dem NET_BUFFER_LIST_INFO Makro begleitet. Der zugrunde liegende Treiber kann diese Informationen mit dem makro NET_BUFFER_LIST_INFO abrufen.

Bevor ein Protokolltreiber NdisSendNetBufferLists mit einer Liste von NET_BUFFER_LIST Strukturen aufruft, muss der Protokolltreiber sicherstellen, dass die NET_BUFFER_LIST Strukturen in der Reihenfolge eingerichtet sind, in der die Netzwerkdaten über das Kabel gesendet werden sollen.

Sobald ein Protokolltreiber NdisSendNetBufferLists aufruft, gibt er den Besitz der NET_BUFFER_LIST-Strukturen und aller zugehörigen Ressourcen auf. NDIS ruft die Funktion ProtocolSendNetBufferListsComplete auf, um die Strukturen und Daten an den Protokolltreiber zurückzugeben. NDIS kann die Strukturen und Daten aus mehreren Sendeanforderungen in einer einzigen verknüpften Liste von NET_BUFFER_LIST Strukturen sammeln, bevor die Liste an ProtocolSendNetBufferListsComplete übergeben wird.

Bis NDIS ProtocolSendNetBufferListsComplete aufruft, ist die aktuelle status eines vom Protokolltreiber initiierten Sendens für den Protokolltreiber nicht verfügbar. Ein Protokolltreiber gibt vorübergehend den Besitz aller Ressourcen frei, die er für eine Sendeanforderung zugewiesen hat, wenn er NdisSendNetBufferLists aufruft. Ein Protokolltreiber sollte niemals versuchen, die NET_BUFFER_LIST Strukturen oder zugehörigen Daten nach dem Aufruf von NdisSendNetBufferLists zu untersuchen.

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

DriverEntry

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAllocateCloneNetBufferList NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisOpenAdapterEx

ProtocolSendNetBufferListsComplete