W_TCP_OFFLOAD_FORWARD_HANDLER回呼函式 (ndischimney.h)
[TCP chimney 卸除功能已被取代,不應使用。
NDIS 會呼叫 MiniportTcpOffloadForward 函式,將未接收的 TCP 區段轉送至卸除目標。
語法
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
卸除目標所配置內容區域的句柄,卸除目標會維護此配接器實例的狀態資訊。 迷你埠驅動程式在呼叫 NDIS 時提供此句柄 NdisMSetMiniportAttributes from its MiniportInitializeEx 函式。
[in] MiniportOffloadContext
包含 PVOID 值的記憶體位置指標。 這個 PVOID 值會參考迷你埠卸除內容,其中包含要轉送 TCP 區段之 TCP 連線的狀態物件。 卸除目標在卸除 TCP 連線狀態物件時,會提供這個 PVOID 值。
[in] NetBufferList
NET_BUFFER_LIST 結構的指標。 這個結構可以是獨立結構,或是NET_BUFFER_LIST結構連結清單中的第一個結構。 清單中的每個NET_BUFFER_LIST結構都會描述一個 NET_BUFFER 結構。 每個NET_BUFFER結構都會對應至記憶體描述元鏈結, (MDL) 。 與NET_BUFFER結構相關聯的 MDL 包含一個,而且只有一個轉送至卸除目標的 TCP 區段。 第一個 MDL 的第一個字節是 TCP 標頭的第一個字節。 NET_BUFFER_LIST和相關聯的結構會鎖定,使其保留在物理記憶體中。 不過,它們不會對應到系統記憶體中。
傳回值
NDIS_STATUS_PENDING是唯一允許的傳回值。 卸除目標一律會呼叫 以異步方式完成轉送要求 NdisTcpOffloadForwardComplete 函式 。
備註
主機堆疊會在下列情況下轉送一或多個已接收但未認可的 TCP 區段:
- 主機堆疊收到 TCP 連線上的區段,該區段已卸除至卸除目標。 因為連線未完全卸除,所以卸除目標目前無法處理 TCP 區段。
- 主機堆棧位於多路系統中,接收網路介面上的區段,而不是卸除 TCP 連線所在的區段。
- 卸除目標先前表示已接收的封包已設定IP選項,以及/或需要重新組譯的片段。 處理IP選項和/或成功重新組態封包之後,主機堆疊會將TCP區段轉送至卸除目標。
- 正在卸除該連線。 主機堆疊一律會等候連線的卸除完成,然後再轉送該聯機的任何封包。 主機堆疊會在連線卸除完成後儘快轉送 TCP 區段。 不過,轉送這類區段沒有時間限制。
- 正在終止該連線的卸除。 在此情況下,主機堆疊會緩衝處理數據,直到卸除終止完成,然後處理區段為止。
轉送 TCP 區段時,主機堆疊會為每個NET_BUFFER結構傳輸一個 TCP 區段。 主機堆疊只會建立一個NET_BUFFER結構,因此一個轉送的 TCP 區段與連結清單中的每個NET_BUFFER_LIST結構產生關聯。
主機堆疊會配置 NDIS 傳遞至 MiniportTcpOffloadForward 函式的NET_BUFFER_LIST和相關結構。 卸除目標會擁有這些資源,直到將資源傳遞至 NdisTcpOffloadForwardComplete 函式 。 雖然其擁有這些資源,但卸除目標可以排入佇列進行處理。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | ndischimney.h (包括 Ndischimney.h) |
IRQL | 任何層級 |