Freigeben über


MINIPORT_SEND_NET_BUFFER_LISTS Rückruffunktion (ndis.h)

NDIS ruft die MiniportSendNetBufferLists Funktion auf, um Netzwerkdaten zu übertragen, die in einer verknüpften Liste von NET_BUFFER_LIST Strukturen enthalten sind.

Note You must declare the function by using the MINIPORT_SEND_NET_BUFFER_LISTS type. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;

void MiniportSendNetBufferLists(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Parameter

[in] MiniportAdapterContext

Ein Handle zu einem Kontextbereich, den der Miniporttreiber in seiner MiniportInitializeEx--Funktion zugewiesen hat. Der Miniporttreiber verwendet diesen Kontextbereich, um Zustandsinformationen zu einem Adapter beizubehalten.

[in] NetBufferList

Ein Zeiger auf die erste NET_BUFFER_LIST Struktur in einer verknüpften Liste mit NET_BUFFER_LIST Strukturen. Jede NET_BUFFER_LIST Struktur in der Liste beschreibt eine Liste der NET_BUFFER Strukturen. Jede NET_BUFFER Struktur in der Liste ist einer Kette von MDLs zugeordnet. Die MDLs enthalten die Netzwerkdaten.

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

[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 dieses Element auf Null 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 Kennzeichen finden Sie unter IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Gibt an, dass NDIS auf Loopback überprüfen soll. Standardmäßig werden von NDIS keine Daten in einer Schleife an den Treiber übergeben, der die Sendeanforderung übermittelt hat. Ein übermäßiger Treiber kann dieses Verhalten überschreiben, indem dieses Kennzeichen festgelegt wird. Wenn dieses Kennzeichen 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 den Kriterien des übermäßigen Treibers entsprechen. Dieses Flag hat keine Auswirkungen auf die Überprüfung auf Loopback oder Schleifenrücklauf auf andere Bindungen.

Rückgabewert

Nichts

Bemerkungen

MiniportSendNetBufferLists ist eine erforderliche Funktion für Miniporttreiber. Wenn ein übersteigender Treiber die NdisSendNetBufferLists--Funktion aufruft, ruft NDIS die MiniportSendNetBufferLists Funktion des gebundenen Miniporttreibers auf.

Beim Übertragen der Netzwerkdaten, die NDIS in den NetBufferLists Parameter übergibt, muss der Miniporttreiber die folgenden Richtlinien verwenden:

  1. Die Reihenfolge der NET_BUFFER Strukturen in jeder NET_BUFFER_LIST Struktur muss beibehalten werden.
  2. Die Reihenfolge der NET_BUFFER_LIST Strukturen sollte beibehalten werden, wenn sie auf derselben Verbindung übertragen werden sollen.
  3. Wenn die NET_BUFFER_LIST Strukturen auf unterschiedlichen Verbindungen übertragen werden sollen, können sie in mehrere Übertragungswarteschlangen aufgeteilt werden, wenn die folgenden Features verwendet werden. In diesem Fall sollte die Reihenfolge der NET_BUFFER_LIST Strukturen für jede Verbindung beibehalten werden.
    • Empfangen von Seitenskalierung (RSS) (Der RSS-Hashwert in der NET_BUFFER_LIST-Struktur kann als Index in der RSS-Dereferenzierungstabelle verwendet werden.)
    • Virtual Machine Queue (VMQ) (Der Warteschlangenbezeichner der ausgehenden Warteschlange wird in der NetBufferListFilteringInfo OOB-Informationen festgelegt. Weitere Informationen finden Sie unter VMQ-Übertragungspfad.)
    • IEEE 802.1 Data Center Bridging (DCB) (You can key off the Traffic Class (TC).)
    • IEEE 802.1p (Sie können 802.1p-Tags ohne DCB entschlüsseln.)

Miniport-Treiber akzeptieren alle Sendeanforderungen, die NDIS durch Aufrufen der funktion MiniportSendNetBufferLists. Wenn ein Miniporttreiber eine Sendeanforderung nicht sofort abschließen kann, muss der Treiber die Anforderung in einer Warteschlange halten, bis die Anforderung abgeschlossen werden kann. Während eine Sendeanforderung aussteht, behält der Miniporttreiber den Besitz der NET_BUFFER_LIST Strukturen und alle protokollgeteilten Ressourcen, die den NET_BUFFER_LIST Strukturen zugeordnet sind.

Der Miniporttreiber muss die NdisMSendNetBufferListsComplete Funktion, um die Sendeanforderungen für alle NET_BUFFER_LIST Strukturen abzuschließen. Um die Systemleistung zu verbessern, kann der Treiber eine verknüpfte Liste erstellen, die die NET_BUFFER_LIST Strukturen aus mehreren Sendeanforderungen enthält. Der Treiber kann dann eine solche verknüpfte Liste in einem einzigen Aufruf an NdisMSendNetBufferListsComplete.NET_BUFFER_LIST Strukturen und andere zugeordnete Ressourcen übergeben werden, sobald der Treiber NdisMSendNetBufferListsCompleteaufgerufen wird.

Die MiniportSendNetBufferLists--Funktion muss den Zugriff auf die internen Warteschlangen von Netzwerkdaten mit den anderen MiniportXxx- Funktionen des Treibers synchronisieren, die auf dieselben Warteschlangen zugreifen. Ein Miniporttreiber kann Drehsperren verwenden, um den Zugriff auf die Warteschlangen zu synchronisieren.

Protokolltreiber sind dafür verantwortlich, zu bestimmen, welche Netzwerkdaten erforderlich sind, basierend auf dem mittleren Typ, den der gebundene Miniporttreiber ausgewählt hat. Ein Protokolltreiber kann jedoch Netzwerkdaten bereitstellen, die Pakete angeben, die kürzer als die mindeste Paketgröße für das ausgewählte Medium sind. In diesem Fall muss MiniportSendNetBufferLists die Pakete mit Nullen auffüllen, wenn das ausgewählte Medium eine Mindestlängenanforderung für die Übertragungspaketgröße angibt.

Wenn der Miniporttreiber das NDIS_MAC_OPTION_NO_LOOPBACK Flag festgelegt hat, wenn NDIS den OID_GEN_MAC_OPTIONS OID abgefragt hat, darf der Miniporttreiber nicht versuchen, Netzwerkdaten zurückzuschleifen. NDIS bietet Software-Loopbackunterstützung für einen solchen Treiber.

NDIS ruft MiniportSendNetBufferLists bei IRQL<= DISPATCH_LEVEL auf.

beispiele für

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

MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  MiniportAdapterContext,
    PNET_BUFFER_LIST  NetBufferList,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Der MINIPORT_SEND_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 MINIPORT_SEND_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
DDI-Complianceregeln NdisTimedDataHang, NdisTimedDataSend

Siehe auch

MiniportInitializeEx-

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisSendNetBufferLists

OID_GEN_MAC_OPTIONS