Freigeben über


NDIS_TCP_OFFLOAD_SEND_COMPLETE Rückruffunktion (ndischimney.h)

[Das TCP-Chimney-Auslagerungsfeature ist veraltet und sollte nicht verwendet werden.]

Ein Auslagerungsziel ruft die NdisTcpOffloadSendComplete-Funktion auf, um eine oder mehrere Sendeanforderungen abzuschließen, die an die MiniportTcpOffloadSend-Funktion des Auslagerungsziels gesendet wurden.

Syntax

NDIS_TCP_OFFLOAD_SEND_COMPLETE NdisTcpOffloadSendComplete;

void NdisTcpOffloadSendComplete(
  [in] IN NDIS_HANDLE NdisMiniportHandle,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Parameter

[in] NdisMiniportHandle

Das Handle, das das Auslagerungsziel in einem vorherigen Aufruf des NdisMRegisterMiniportDriver-Funktion .

[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. Das Auslagerungsziel hat diese Strukturen in einem oder mehreren Aufrufen seiner MiniportTcpOffloadSend-Funktion .

Rückgabewert

Keine

Bemerkungen

Um die Systemleistung zu verbessern, kann ein Auslagerungsziel eine verknüpfte Liste erstellen, die NET_BUFFER_LIST Strukturen aus mehreren Aufrufen der MiniportTcpOffloadSend-Funktion enthält. Der Treiber kann dann eine solche verknüpfte Liste in einem einzigen Aufruf an die Funktion NdisTcpOffloadSendComplete übergeben.

Bevor Sie eine oder mehrere Sendeanforderungen abschließen, muss das Auslagerungsziel für jede NET_BUFFER_LIST Struktur, die es an die NdisTcpOffloadSendComplete-Funktion übergibt, Folgendes ausführen:

  • Schreiben Sie einen status Wert in das Statuselement:
    • NDIS_STATUS_SUCCESS gibt an, dass alle daten, die dem NET_BUFFER_LIST zugeordnet sind, erfolgreich vom Auslagerungsziel gesendet wurden und dass das Auslagerungsziel vom Remotehost eine Bestätigung für alle übertragenen Daten erhalten hat. Beachten Sie, dass sich dies von der Sendefunktion ohne Auslagerung unterscheidet. MiniportSendNetBufferLists, das keine Bestätigungen überwacht.
    • Ein anderer status Wert als NDIS_STATUS_SUCCESS – z. B. ein status Wert von NDIS_STATUS_REQUEST_ABORTED oder NDIS_STATUS_UPLOAD_IN_PROGRESS – gibt an, dass die Sendedaten nicht erfolgreich bestätigt wurden. Möglicherweise hat das Auslagerungsziel die Daten gesendet oder nicht. Das Auslagerungsziel sollte beim Sendevorgang für alle nachfolgenden NET_BUFFER_LIST-Strukturen in der verknüpften Liste fehlschlagen, ohne weitere Daten zu senden, die diesen Strukturen zugeordnet sind. Das Auslagerungsziel schreibt einen status Wert von NDIS_STATUS_UPLOAD_IN_PROGRESS, wenn die Auslagerung der TCP-Verbindung, über die die Daten gesendet werden sollen, beendet wird. In diesem Fall werden die TCP-Daten vom Host in warteschlangen und verarbeitet. Das Auslagerungsziel schreibt einen status Wert von NDIS_STATUS_REQUEST_ABORTED, wenn es ein RST-Segment für die TCP-Verbindung empfangen hat, über die die Daten gesendet werden sollen. In diesem Fall verarbeitet der Hoststapel die TCP-Daten nicht.
    • Das Auslagerungsziel sollte für höchstens eine NET_BUFFER_LIST Struktur in der verknüpften Liste einen teilweisen Sendevorgang durchführen. Das Auslagerungsziel schreibt einen anderen status Wert als NDIS_STATUS_SUCCESS , z. B. einen status Wert von NDIS_STATUS_ABORTED oder NDIS_STATUS_UPLOAD_IN_PROGRESS, in eine solche NET_BUFFER_LIST-Struktur.
    • Wenn ein Zwischentreiber keinen Arbeitsspeicher zuweisen kann, um den Sendevorgang an ein zugrunde liegendes Auslagerungsziel zu verteilen, schreibt er einen status Wert von NDIS_STATUS_REQUEST_UPLOAD in die erste NET_BUFFER_LIST Struktur in der verknüpften Liste und NDIS_STATUS_UPLOAD_REQUESTED an alle nachfolgenden NET_BUFFER_LIST Strukturen in der verknüpften Liste. Der Zwischentreiber darf die NET_BUFFER_LIST-Strukturen nicht an ein zugrunde liegendes Auslagerungsziel weitergeben. Der Hoststapel führt den Sendevorgang aus.
  • Geben Sie die Anzahl der gesendeten Datenbytes an. Dazu ruft das NET_BUFFER_LIST_INFO-Makro mit der IDTcpOffloadBytesTransferred auf.
  • Rufen Sie die folgenden NdisAdvanceNetBufferDataStart-Funktion für jede NET_BUFFER Struktur, die der NET_BUFFER_LIST-Struktur zugeordnet ist. Der an die NdisAdvanceNetBufferDataStart-Funktion übergebene NetBuffer-Parameter sollte auf die NET_BUFFER-Struktur verweisen. Der DataOffsetDelta-Parameter sollte die Anzahl der Datenbytes aus der NET_BUFFER-Struktur angeben, die vom Auslagerungsziel übertragen und vom Remotehost bestätigt wurden. Der FreeMdl-Parameter ist NULL.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ndischimney.h (include Ndischimney.h)
IRQL Beliebige Ebene

Weitere Informationen

MiniportSendNetBufferLists

MiniportTcpOffloadSend

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver