W_TCP_OFFLOAD_FORWARD_HANDLER Rückruffunktion (ndischimney.h)
[Das TCP-Chimney-Auslagerungsfeature ist veraltet und sollte nicht verwendet werden.]
NDIS ruft die MiniportTcpOffloadForward-Funktion auf, um nicht erkannte empfangene TCP-Segmente an ein Auslagerungsziel weiterzuleiten.
W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;
NDIS_STATUS WTcpOffloadForwardHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
[in] MiniportAdapterContext
Das Handle für einen vom Auslagerungsziel zugeordneten Kontextbereich, in dem das Auslagerungsziel Zustandsinformationen zu diesem instance des Adapters verwaltet. Der Miniporttreiber hat dieses Handle für NDIS bereitgestellt, wenn er 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, für die die TCP-Segmente weitergeleitet werden. 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 NET_BUFFER Struktur. Jede NET_BUFFER-Struktur wird einer Kette von Speicherdeskriptorlisten (MDLs) zugeordnet. Die mdLs, die einer NET_BUFFER-Struktur zugeordnet sind, enthalten nur ein TCP-Segment, das an das Auslagerungsziel weitergeleitet wird. Das erste Byte der ersten MDL ist das erste Byte des TCP-Headers. Die NET_BUFFER_LIST und zugeordneten Strukturen sind gesperrt, sodass sie sich im physischen Speicher befinden. Sie werden jedoch nicht dem Systemspeicher zugeordnet.
NDIS_STATUS_PENDING ist der einzige zulässige Rückgabewert. Ein Auslagerungsziel schließt eine Weiterleitungsanforderung immer asynchron ab, indem die NdisTcpOffloadForwardComplete-Funktion .
Der Hoststapel leitet ein oder mehrere TCP-Segmente weiter, die er empfangen, aber in den folgenden Situationen nicht bestätigt hat:
- Der Hoststapel hat die Segmente bei einer TCP-Verbindung empfangen, die an das Auslagerungsziel abgeladen wurde. Da die Verbindung nicht vollständig entladen wurde, konnte das Auslagerungsziel die TCP-Segmente zu diesem Zeitpunkt nicht verarbeiten.
- Der Hoststapel befindet sich in einem mehrnetzigen System, das die Segmente auf einer anderen Netzwerkschnittstelle als der empfangen hat, für die die TCP-Verbindung abgeladen wird.
- Das Auslagerungsziel gab zuvor empfangene Pakete an, für die IP-Optionen festgelegt waren und/oder bei denen es sich um Fragmente handelte, die erneut zusammengesetzt werden mussten. Nach der Verarbeitung der IP-Optionen und/oder der erfolgreichen Neuassemierung der Pakete leitet der Hoststapel die TCP-Segmente an das Auslagerungsziel weiter.
- Diese Verbindung wird entladen. Der Hoststapel wartet immer, bis die Abladung der Verbindung abgeschlossen ist, bevor pakete für diese Verbindung weitergeleitet werden. Der Hoststapel leitet TCP-Segmente so schnell wie möglich weiter, nachdem die Auslagerung der Verbindung abgeschlossen ist. Es gibt jedoch kein Zeitliches Limit für die Weiterleitung solcher Segmente.
- Die Auslagerung dieser Verbindung wird beendet. In diesem Fall puffert der Hoststapel die Daten, bis die Beendigung der Auslagerung abgeschlossen ist, und verarbeitet dann die Segmente.
Beim Weiterleiten von TCP-Segmenten überträgt der Hoststapel ein TCP-Segment pro NET_BUFFER Struktur. Der Hoststapel ordnet jeder NET_BUFFER_LIST Struktur in der verknüpften Liste nur eine NET_BUFFER Struktur und somit ein weitergeleitetes TCP-Segment zu.
Der Hoststapel weist die NET_BUFFER_LIST und zugeordneten Strukturen zu, die NDIS an die Funktion MiniportTcpOffloadForward übergibt. Das Auslagerungsziel besitzt diese Ressourcen, bis sie an die NdisTcpOffloadForwardComplete-Funktion . Obwohl es diese Ressourcen besitzt, kann das Auslagerungsziel sie für die Verarbeitung in die Warteschlange stellen.
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | ndischimney.h (include Ndischimney.h) |
IRQL | Beliebige Ebene |