主機堆疊會查詢 OID_TCP_TASK_OFFLOAD OID,以取得迷你埠驅動程式 NIC 或卸除目標的 TCP 卸除功能。 在判斷 NIC 或卸除目標支援的卸除功能之後,主機堆疊會將此 OID 設定為啟用一或多個回報的功能。 主機堆疊也可以藉由設定OID_TCP_TASK_OFFLOAD來停用所有 NIC 或卸除目標的 TCP 卸除功能。 一次只能有一個通訊協定啟用特定 NIC 的 TCP 卸除功能。
查詢卸除功能
當主機堆棧查詢OID_TCP_TASK_OFFLOAD時,它會在 InformationBufferNDIS_TASK_OFFLOAD_HEADER 結構中提供。 此結構會指定下列專案:
- 主機堆疊支援的卸除版本。
- 主機堆疊所處理之傳送和接收封包的封裝格式。
- 這類封包中的封裝標頭大小。
利用這項資訊,迷你埠驅動程式或其 NIC 可以在傳輸封包中找到第一個 IP 標頭的開頭,這是執行卸除工作的必要條件。 卸除目標必須知道封裝格式才能處理接收封包。 為了回應OID_TCP_TASK_OFFLOAD的查詢,迷你埠驅動程式或卸除目標會在 InformationBuffer中傳回 ,NDIS_TASK_OFFLOAD_HEADER 結構緊接著一或多個 NDIS_TASK_OFFLOAD 結構。 每個NDIS_TASK_OFFLOAD結構描述迷你埠驅動程式 NIC 或卸除目標所支援的卸載功能。 如果迷你埠驅動程式的 NIC 或卸除目標支援特定卸載功能的多個版本,它應該針對每個版本傳回一個NDIS_TASK_OFFLOAD結構。
每個NDIS_TASK_OFFLOAD結構都有一個 Task 成員,指定結構所套用的特定卸除功能。 每個NDIS_TASK_OFFLOAD結構也有一個 TaskBuffer,其中包含與指定卸除功能相關的資訊。 TaskBuffer 中的資訊會格式化為下列其中一個結構:
-
NDIS_TASK_TCP_IP_CHECKSUM
指定總和檢查碼卸除功能。 -
NDIS_TASK_IPSEC
指定因特網通訊協定安全性 (IPsec) 卸除功能。 -
NDIS_TASK_TCP_LARGE_SEND
指定大型 TCP 封包分割功能。 -
NDIS_TASK_TCP_CONNECTION_OFFLOAD
指定 TCP 煙囪卸除功能。 如需NDIS_TASK_TCP_CONNECTION_OFFLOAD的詳細資訊,請參閱 TCP Chimney Offload。
注意
如果中繼驅動程式修改其轉送至基礎迷你埠驅動程式的封包內容,讓 TCP 卸除函式無法在封包上執行,中繼驅動程式應該回應狀態為 NDIS_STATUS_NOT_SUPPORTED 的OID_TCP_TASK_OFFLOAD查詢,而不是將 OID 要求傳遞至基礎迷你埠驅動程式或卸除目標。
啟用卸除功能
查詢 NIC 或卸除目標的卸除功能之後,主機堆疊會藉由設定OID_TCP_TASK_OFFLOAD來啟用其中一或多個功能。 設定OID_TCP_TASK_OFFLOAD時,主機堆疊會在 InformationBuffer中提供 ,NDIS_TASK_OFFLOAD_HEADER 結構緊接著主機堆疊所啟用的每個卸除功能NDIS_TASK_OFFLOAD結構。
每個NDIS_TASK_OFFLOAD結構中的 工作 表示主機堆疊所啟用的卸除功能。 主機堆疊也會藉由在每個NDIS_TASK_OFFLOAD結構 TaskBuffer 中設定結構的成員,來啟用特定卸載功能的特定層面。
變更卸除功能
若要變更針對 NIC 或卸除目標啟用的卸除功能,主機堆疊會設定OID_TCP_TASK_OFFLOAD。 迷你埠驅動程式或卸除目標只能啟用最近一組OID_TCP_TASK_OFFLOAD所指定的卸除功能。 迷你埠驅動程式或卸除目標必須停用所有其他卸除功能。 請注意,停用特定 TCP 煙囪卸除功能之前,主機堆疊會終止使用該功能的任何卸除 TCP 連線卸除。
卸除目標可以使用暫停或繼續卸除指示來變更其報告的 TCP 卸除功能:
- 卸除目標會呼叫 NdisMIndicateStatusEx NDIS_STATUS_INDICATION 函式,並將 statusCode> 成員設為 NDIS_STATUS_OFFLOAD_PAUSE,藉此發出暫停指示。
- 卸除目標會藉由呼叫 NdisMIndicateStatusEx 函式,並將 NDIS_STATUS_INDICATION->StatusCode 成員設為 NDIS_STATUS_OFFLOAD_RESUME,來發出繼續指示。
卸除目標要求主機堆疊繼續卸除狀態對象之後,主機堆疊會再次查詢OID_TCP_TASK_OFFLOAD,以取得卸除目標的 TCP 卸除修訂功能。 如需詳細資訊,請參閱 NDIS_STATUS_OFFLOAD_RESUME。
停用卸除功能
若要停用 NIC 或卸除目標支援的所有卸除功能,主機堆疊會設定OID_TCP_TASK_OFFLOAD。 在 InformationBuffer中,主機堆疊會提供NDIS_TASK_OFFLOAD_HEADER結構,並將這個結構的 OffsetFirstTask 成員設為零。
要求
版本:Windows Vista 和更新版本 標頭:Ntddndis.h (包括 Ndis.h)