W_TCP_OFFLOAD_SEND_HANDLER回呼函式 (ndischimney.h)
[TCP chimney 卸除功能已被取代,不應使用。]
NDIS 會呼叫 MiniportTcpOffloadSend 函式,以在卸除的 TCP 連線上傳輸數據。
語法
W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;
NDIS_STATUS WTcpOffloadSendHandler(
[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是唯一允許的傳回值。 卸除目標一律會透過呼叫 以異步方式完成傳送要求 NdisTcpOffloadSendComplete。
備註
卸除目標必須先在 FIFO) 順序中先傳送數據,再 (FIFO。 NDIS 在 NetBufferList 傳遞之NET_BUFFER_LIST結構連結清單的順序,代表卸除目標必須傳輸網路數據的順序。 此外,卸除目標應該以張貼數據的順序,將接收的數據從多個呼叫傳送至 MiniportTcpOffloadSend 。
卸除目標必須接受對其 MiniportTcpOffloadSend 函式提出的所有傳送要求。 如果卸除目標無法立即完成傳送要求,卸除目標必須排入佇列,直到它完成為止。 卸除目標應該使用NET_BUFFER_LIST結構的 MiniportReserved 成員來排入傳送要求佇列。 當傳送要求擱置時,卸除目標會保留NET_BUFFER_LIST結構的擁有權,以及與NET_BUFFER_LIST結構相關聯的所有資源。
主機堆疊會根據每個連線串行化傳送要求。 堆疊不會在連線上發出傳送要求,而該連線上的另一個傳送要求正在進行中。 這可確保卸除目標一律會以正確的順序接收傳送要求。
不過請注意,主機堆疊可以在連接上呼叫 MiniportTcpOffloadSend 函式,然後卸除目標完成相同連線上一或多個 MiniportTcpOffloadSend 函式的先前呼叫。 另請注意,主機堆疊可以在一個連線上呼叫卸除目標的 MiniportTcpOffloadSend 函式,而 對 MiniportTcpOffloadSend 函式的一或多個呼叫正在進行另一個連線。
MiniportTcpOffloadSend 函式必須同步處理其網路數據內部佇列的存取權,以及卸除目標的其他 MiniportXxx 函式,以存取相同的佇列。 卸除目標可以使用微調鎖定來同步存取佇列。
卸除目標應該 (,但不需要) 在每個NET_BUFFER_LIST界限上設定 PSH 位。 建議的做法是設定最後一個區段中從與每個NET_BUFFER_LIST結構相關聯的數據所建立的 PSH 位,也就是與NET_BUFFER_LIST (結構相關聯之NET_BUFFER結構所描述的數據) 。 或者,卸除目標可以在傳送佇列的最後一個剩餘區段中設定 PSH 位,再清空傳送佇列。
主機堆疊不會要求卸除目標傳送緊急數據。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | ndischimney.h (包含 Ndischimney.h) |
IRQL | 任何層級 |