NdisSendNetBufferLists-Funktion (ndis.h)
Protokolltreiber rufen die NdisSendNetBufferLists Funktion auf, um Netzwerkdaten zu senden, die in einer Liste von 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. Ein vorheriger Aufruf von NdisOpenAdapterEx dieses Handle zurückgegeben.
[in] NetBufferLists
Ein Zeiger auf eine verknüpfte Liste von NET_BUFFER_LIST Strukturen. Jede NET_BUFFER_LIST Struktur beschreibt eine Liste der NET_BUFFER Strukturen.
[in] PortNumber
Eine Portnummer, die einen Miniportadapteranschluss identifiziert. Die Standardportnummer eines Miniportadapters ist Null. 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 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 Kennzeichen hat keine Auswirkungen auf die Überprüfung auf Loopback oder Schleife zurück auf andere Bindungen.
Rückgabewert
Nichts
Bemerkungen
Nachdem ein Protokolltreiber NdisSendNetBufferListsaufgerufen hat, übermittelt NDIS die NET_BUFFER_LIST Strukturen an die 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 z. B. NET_BUFFER_LIST Strukturen präallocatieren – z. B. in seiner DriverEntry- Routine. Alternativ kann der Treiber die Strukturen direkt vor dem Aufrufen von NdisSendNetBufferLists zuordnen und diese dann freigeben, wenn der Sendevorgang abgeschlossen ist. Wenn NDIS eine NET_BUFFER_LIST Struktur zurückgibt ProtocolSendNetBufferListsCompletekann der Miniporttreiber die NET_BUFFER_LIST Struktur und alle zugehörigen Ressourcen für die Wiederverwendung vorbereiten. Durch die Wiederverwendung der NET_BUFFER_LIST Strukturen kann eine bessere Leistung erzielt werden, als die Strukturen in einen Pool zurückzugeben und diese dann für einen anderen Sendevorgang neu zuzuordnen.Ein Protokolltreiber muss das SourceHandle Member 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 nach aufrufen des zugrunde liegenden Miniporttreibers an den Protokolltreiber zurückzugeben. NdisMSendNetBufferListsComplete.
Vor dem Aufrufen NdisSendNetBufferListskann ein Protokolltreiber Informationen festlegen, die die Sendeanforderung mit dem NET_BUFFER_LIST_INFO-Makro begleiten. Der zugrunde liegende Treiber kann diese Informationen mit dem NET_BUFFER_LIST_INFO Makro 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 werden, in der die Netzwerkdaten über das Netzwerk gesendet werden sollen.
Sobald ein Protokolltreiber NdisSendNetBufferListsaufruft, gibt er den Besitz der NET_BUFFER_LIST Strukturen und aller zugehörigen Ressourcen zurück. NDIS ruft die ProtocolSendNetBufferListsComplete--Funktion 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 mit NET_BUFFER_LIST Strukturen sammeln, bevor sie die Liste an ProtocolSendNetBufferListsComplete übergibt.
Bis NDIS ProtocolSendNetBufferListsCompleteaufruft, ist der 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 NdisSendNetBufferListsaufruft. Ein Protokolltreiber sollte niemals versuchen, die NET_BUFFER_LIST Strukturen oder zugeordneten Daten nach dem Aufruf NdisSendNetBufferListszu untersuchen.
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) |