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 區段之前或之後終止未處理的傳送要求並不重要。
如果連線上有未完成的接收指示或事件指示,卸除目標不得等待這些指示完成,再傳送 RST 區段。 卸除目標必須立即停止處理連線上的接收區段,且不認可任何接收區段,包括用戶端應用程式尚未取用的指示接收數據。
當 Flags = TCP_DISCONNECT_ABORTIVE_CLOSE時, 與 NetBufferList 指標所參考NET_BUFFER_LIST結構相關聯的NET_BUFFER結構不包含任何數據。 也就是說,NET_BUFFER 結構 NetBufferHeader 中NET_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 區段,要求中止中斷連線。
卸除目標呼叫之前 NdisTcpOffloadDisconnectComplete,它必須以傳遞至卸除目標的順序,完成連線上所有未處理傳送的要求。
中斷連線要求的必要回應
卸除目標不得失敗中斷連線要求,除非上傳指定的 TCP 連線或 (中止,例如,因為遠端主機在連線上傳送了 RST 區段) 。 如果卸除目標失敗中斷連線要求,主機堆疊將不會稍後重新發出中斷連線要求。
釋放線上資源
卸除目標不得釋放其發出中止或正常中斷連線之連線的資源,直到主機堆疊終止連線的卸除為止。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | ndischimney.h (包含 Ndischimney.h) |
IRQL | 任何層級 |