W_TCP_OFFLOAD_DISCONNECT_HANDLER回呼函式 (ndischimney.h)

[TCP chimney 卸除功能已被取代,不應使用。]

MiniportTcpOffloadDisconnect 函式會關閉卸除 TCP 連線的傳送一半。 此外,如果要執行的中斷連線是正常中斷連線,NDIS 可以將應用程式數據提供給 MiniportTcpOffloadDisconnect 函式,函式必須在傳送 FIN 區段之前傳輸。

語法

W_TCP_OFFLOAD_DISCONNECT_HANDLER WTcpOffloadDisconnectHandler;

NDIS_STATUS WTcpOffloadDisconnectHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList,
  [in] IN ULONG Flags
)
{...}

參數

[in] MiniportAdapterContext

卸除目標配置之內容區域的句柄,卸除目標會維護此配接器實例的狀態資訊。 卸除目標會在呼叫 NDIS 時將此句柄提供給 NDIS NdisMSetMiniportAttributes 從其 MiniportInitializeEx 函 式。

[in] MiniportOffloadContext

包含 PVOID 值的記憶體位置指標。 這個 PVOID 值會參考迷你埠卸除內容,其中包含要中斷連線之 TCP 連線的狀態物件。 卸除目標卸除 TCP 連線狀態物件時,提供這個 PVOID 值。

[in] NetBufferList

單一 NET_BUFFER_LIST 結構的指標。 只有一個 NET_BUFFER 結構與此NET_BUFFER_LIST結構相關聯。

[in] Flags

作為下列其中一個值,卸除目標必須執行的中斷連線類型:

TCP_DISCONNECT_ABORTIVE_CLOSE

卸除目標必須藉由傳送 RST 區段來執行中止中斷連線。

TCP_DISCONNECT_GRACEFUL_CLOSE

卸除目標必須藉由傳送 FIN 區段來執行正常中斷連線。

傳回值

MiniportTcpOffloadDisconnect 函式一律會傳回NDIS_STATUS_PENDING。 卸除目標會呼叫 以異步方式完成中斷連線要求 NdisTcpOffloadDisconnectComplete.

備註

旗標 設定而定, MiniportTcpOffloadDisconnect 函式會在指定的 TCP 連線上執行中止中斷連線或正常中斷連線。

中止中斷連線

如果 Flags 設定為 TCP_DISCONNECT_ABORTIVE_CLOSE,卸除目標會在指定的 TCP 連線上傳送 RST 區段來執行中止中斷連線。

注意 這是卸除目標可以傳送 RST 區段的唯一實例。
 
呼叫 之前 NdisTcpOffloadDisconnectComplete 函式以完成中止中斷連線,卸除目標必須在連線上完成所有未處理的傳送要求,且狀態值為 NDIS_STATUS_REQUEST_ABORTED。 卸除目標會將此狀態值寫入連結清單中每個NET_BUFFER_LIST結構 的狀態成員, 並傳遞給 NdisTcpOffloadSendComplete 函 式。

卸除目標在傳送 RST 區段之前或之後終止未處理的傳送要求並不重要。

如果連線上有未完成的接收指示或事件指示,卸除目標不得等待這些指示完成,再傳送 RST 區段。 卸除目標必須立即停止處理連線上的接收區段,且不認可任何接收區段,包括用戶端應用程式尚未取用的指示接收數據。

Flags = TCP_DISCONNECT_ABORTIVE_CLOSE時, 與 NetBufferList 指標所參考NET_BUFFER_LIST結構相關聯的NET_BUFFER結構不包含任何數據。 也就是說,NET_BUFFER 結構 NetBufferHeaderNET_BUFFER_DATA結構的 DataLength 成員是零。

正常中斷連線

如果 Flags 設定為 TCP_DISCONNECT_GRACEFUL_CLOSE,卸除目標會在指定的 TCP 連線上傳送 FIN 區段,以執行正常中斷連線。

如果未在 FIN 區段之前傳送任何用戶數據,則與 NetBufferList 指標所參考之NET_BUFFER_LIST結構相關聯的NET_BUFFER結構不包含任何數據。 如果有要傳送的用戶數據,記憶體描述項會列出與NET_BUFFER結構相關聯的 (MDL) 包含要傳送的用戶數據。

卸除目標不應該在傳送 FIN 區段之前等待已傳輸用戶數據的通知。 卸除目標可以在傳輸用戶數據之後傳送個別的 FIN 區段,或者卸除目標可以在傳送之用戶數據最後一個區段的 TCP 標頭中設定 FIN 位。

從卸除目標的觀點來看,傳送 FIN 區段會關閉連線的傳送一半。 不過,傳送 FIN 區段並不會關閉連線的接收一半。 遠端主機會藉由將下列任一項傳送至卸除目標,終止聯機的接收一半:

  • FIN 區段,要求正常中斷連線。
  • RST 區段,要求中止中斷連線。
傳送 FIN 區段之後,卸除目標可以接收連線上的區段,直到遠端主機起始正常或中止的中斷連線,或直到本機主機終止連線卸除或起始中止中斷連線為止。

卸除目標呼叫之前 NdisTcpOffloadDisconnectComplete,它必須以傳遞至卸除目標的順序,完成連線上所有未處理傳送的要求。

中斷連線要求的必要回應

卸除目標不得失敗中斷連線要求,除非上傳指定的 TCP 連線或 (中止,例如,因為遠端主機在連線上傳送了 RST 區段) 。 如果卸除目標失敗中斷連線要求,主機堆疊將不會稍後重新發出中斷連線要求。

釋放線上資源

卸除目標不得釋放其發出中止或正常中斷連線之連線的資源,直到主機堆疊終止連線的卸除為止。

規格需求

需求
目標平台 Windows
標頭 ndischimney.h (包含 Ndischimney.h)
IRQL 任何層級

另請參閱

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete