共用方式為


W_TCP_OFFLOAD_RECEIVE_HANDLER回呼函式 (ndischimney.h)

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

NDIS 會呼叫 MiniportTcpOffloadReceive 函 式來張貼接收要求, (卸除 TCP 連線上的接收緩衝區) 。

語法

W_TCP_OFFLOAD_RECEIVE_HANDLER WTcpOffloadReceiveHandler;

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

參數

[in] MiniportAdapterContext

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

[in] MiniportOffloadContext

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

[in] NetBufferList

NET_BUFFER_LIST 結構的指標。 此結構可以是獨立結構,或NET_BUFFER_LIST結構連結清單中的第一個結構。 清單中的每個NET_BUFFER_LIST結構都會描述一 個NET_BUFFER 結構。 NET_BUFFER結構會對應至記憶體描述項鍊結, (MDL) 。 NET_BUFFER_LIST和相關聯的結構會鎖定,使其保留在物理記憶體中。 不過,它們不會對應至系統記憶體。

傳回值

NDIS_STATUS_PENDING是唯一允許的傳回值。 卸除目標一律會完成 (呼叫以異步方式傳回) 張貼的接收要求 NdisTcpOffloadReceiveComplete

備註

用戶端應用程式可以在卸除的 TCP 連線上張貼接收要求。 卸除目標會使用這些要求來傳送在用戶端應用程式連線時收到的數據。 如果在連線上張貼接收要求,卸除目標應該一律使用它們來傳輸在連線上收到的數據。 如需詳細資訊,請參閱 傳遞演算法

卸除目標會先排入中張貼NET_BUFFER_LIST結構,先排出 FIFO) 順序 (。 卸除目標會使用每個NET_BUFFER_LIST結構的 MiniportReserved 成員來將結構排入佇列。

傳遞至 MiniportTcpOffloadReceive 函式的每個NET_BUFFER_LIST結構只有一個與其相關聯的NET_BUFFER結構。

卸除目標應該以 FIFO 順序將接收數據放入張貼的接收要求中。 也就是說,第一次收到的數據應該放在第一個張貼的接收要求中,依此類故。

主機堆疊會根據每個連線,串行化 對 MiniportTcpOffloadReceive 函式的呼叫。 主機堆疊不會在連線上呼叫 MiniportTcpOffloadReceive 函 式,而該連線上的 MiniportTcpOffloadReceive 函式正在呼叫。 這可確保接收要求一律以正確的順序張貼到卸除目標的 MiniportTcpOffloadReceive函 式。

不過請注意,主機堆疊可以在連接上呼叫 MiniportTcpOffloadReceive 函式,然後卸除目標在該相同連線上完成一或多個 對 MiniportTcpOffloadReceive 函式的先前呼叫。 另請注意,主機堆疊可以在一個連線上呼叫卸除目標的 MiniportTcpOffloadReceive 函 式,而一或多個 MiniportTcpOffloadReceive 函式的呼叫正在進行另一個連線。

張貼的接收要求可以選擇性地採用下列兩種模式之一:

  • Push 模式
  • 非push模式
請注意,卸除目標必須同時支援推送模式和非推送模式。 .

若要判斷緩衝區所在的模式,卸除目標會呼叫 NET_BUFFER_LIST_INFO 宏,以取得 TcpReceiveNoPush 的值。 如果值為 TRUE,接收要求會處於非push模式。

如果接收要求處於推送模式,卸除目標會藉由呼叫 NET_BUFFER_LIST_INFO 宏來擷取 TcpReceiveBytesTransferred 的值。 如果此值不是零,卸除目標會立即啟動 連線的推播定時器 。 如果此值為零,卸除目標會在卸除目標將第一個接收數據位元組放入接收要求時,立即啟動連接的推播定時器。 卸除目標一律會立即完成已填滿的接收要求。 卸除目標會完成部分填滿的接收要求,如果發生下列其中一項,則會處於推送模式:

  • 推播定時器到期。
  • 卸除目標會在已設定 PSH 位的連線上接收 TCP 區段。
如果接收要求處於非push 模式,卸除目標就不會啟動推播定時器。 卸除目標只有在填滿接收要求時,才會完成接收要求。 卸除目標會忽略它在連線上收到的 TCP 區段中的 PSH 位。

如果在推送定時器執行時收到卸除連線上的數據,卸除目標必須重新啟動該連線的推送定時器。

規格需求

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

另請參閱

MiniportInitializeEx

NET_BUFFER

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadReceiveComplete