W_TCP_OFFLOAD_SEND_HANDLER Rückruffunktion (ndischimney.h)
[Das TCP-Chimney-Auslagerungsfeature ist veraltet und sollte nicht verwendet werden.]
NDIS ruft die MiniportTcpOffloadSend-Funktion auf, um Daten über eine entladene TCP-Verbindung zu übertragen.
Syntax
W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;
NDIS_STATUS WTcpOffloadSendHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
Parameter
[in] MiniportAdapterContext
Das Handle für einen vom Auslagerungsziel zugeordneten Kontextbereich, in dem das Auslagerungsziel Zustandsinformationen zu diesem instance des Adapters verwaltet. Das Auslagerungsziel hat dieses Handle für NDIS bereitgestellt, wenn es aufgerufen hat. NdisMSetMiniportAttributes aus MiniportInitializeEx-Funktion .
[in] MiniportOffloadContext
Ein Zeiger auf einen Speicherspeicherort, der einen PVOID-Wert enthält. Dieser PVOID-Wert verweist auf den Miniport offload-Kontext, der das Zustandsobjekt für die TCP-Verbindung enthält, über die die Daten übertragen werden sollen. Das Auslagerungsziel hat diesen PVOID-Wert angegeben, als es das TCP-Verbindungszustandsobjekt ausgeladen hat.
[in] NetBufferList
Ein Zeiger auf eine NET_BUFFER_LIST Struktur. Diese Struktur kann eine eigenständige Struktur oder die erste Struktur in einer verknüpften Liste von NET_BUFFER_LIST Strukturen sein. Jede NET_BUFFER_LIST Struktur in der Liste beschreibt eine Liste von NET_BUFFER Strukturen. Jede NET_BUFFER Struktur in der Liste wird einer Kette von Speicherdeskriptorlisten (MDLs) zugeordnet. Die MDLs enthalten die zu übertragenden Daten. Die NET_BUFFER_LIST und zugeordneten Strukturen sind gesperrt, sodass sie sich im physischen Speicher befinden. Sie werden jedoch nicht dem Systemspeicher zugeordnet.
Rückgabewert
NDIS_STATUS_PENDING ist der einzige zulässige Rückgabewert. Ein Auslagerungsziel schließt eine Sendeanforderung immer asynchron ab, indem es aufruft NdisTcpOffloadSendComplete.
Hinweise
Ein Auslagerungsziel muss Daten in FIFO-Reihenfolge (First In, First Out) übertragen. Die Reihenfolge der verknüpften Liste der NET_BUFFER_LIST Strukturen, die NDIS bei NetBufferList übergibt, stellt die Reihenfolge dar, in der das Auslagerungsziel die Netzwerkdaten übertragen muss. Darüber hinaus sollte ein Auslagerungsziel die Daten, die es von mehreren Aufrufen empfängt, in der Reihenfolge, in der die Daten veröffentlicht wurden, an den MiniportTcpOffloadSend senden.
Ein Auslagerungsziel muss alle Sendeanforderungen an seine MiniportTcpOffloadSend-Funktion akzeptieren. Wenn ein Auslagerungsziel eine Sendeanforderung nicht sofort abschließen kann, muss das Auslagerungsziel die Anforderung in die Warteschlange stellen, bis sie abgeschlossen werden kann. Das Auslagerungsziel sollte den MiniportReserved-Member einer NET_BUFFER_LIST-Struktur verwenden, um Sendeanforderungen in die Warteschlange zu stellen. Während eine Sendeanforderung aussteht, behält das Auslagerungsziel den Besitz der NET_BUFFER_LIST-Strukturen und aller Ressourcen, die den NET_BUFFER_LIST-Strukturen zugeordnet sind.
Der Hoststapel serialisiert das Senden von Anforderungen pro Verbindung. Der Stapel stellt keine Sendeanforderung für eine Verbindung aus, während eine andere Sendeanforderung für diese Verbindung ausgeführt wird. Dadurch wird sichergestellt, dass das Auslagerungsziel die Sendeanforderungen immer in der richtigen Reihenfolge empfängt.
Beachten Sie jedoch, dass der Hoststapel die MiniportTcpOffloadSend-Funktion für eine Verbindung aufrufen kann, bevor das Auslagerungsziel einen oder mehrere vorherige Aufrufe der MiniportTcpOffloadSend-Funktion für dieselbe Verbindung abgeschlossen hat. Beachten Sie außerdem, dass der Hoststapel die MiniportTcpOffloadSend-Funktion eines Auslagerungsziels für eine Verbindung aufrufen kann, während mindestens ein Aufruf der MiniportTcpOffloadSend-Funktion in einer anderen Verbindung ausgeführt wird.
Die MiniportTcpOffloadSend-Funktion muss den Zugriff auf ihre internen Warteschlangen von Netzwerkdaten mit den anderen MiniportXxx-Funktionen des Ziels synchronisieren, die auf dieselben Warteschlangen zugreifen. Ein Auslagerungsziel kann Spinsperren verwenden, um den Zugriff auf die Warteschlangen zu synchronisieren.
Das Auslagerungsziel sollte (ist aber nicht erforderlich) das PSH-Bit für jede NET_BUFFER_LIST Grenze festlegen. Die empfohlene Vorgehensweise besteht darin, das PSH-Bit im letzten Segment festzulegen, das aus den Daten erstellt wurde, die jeder NET_BUFFER_LIST-Struktur zugeordnet sind (d. a. die Daten, die durch die NET_BUFFER Strukturen beschrieben werden, die der NET_BUFFER_LIST-Struktur zugeordnet sind). Alternativ kann das Auslagerungsziel das PSH-Bit im letzten verbleibenden Segment in der Sendewarteschlange festlegen, bevor die Sendewarteschlange geleert wird.
Der Hoststapel fordert das Auslagerungsziel nicht an, um dringende Daten zu senden.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | ndischimney.h (include Ndischimney.h) |
IRQL | Beliebige Ebene |