OID_TCP_TASK_OFFLOAD

主机堆栈查询OID_TCP_TASK_OFFLOAD OID 以获取微型端口驱动程序的 NIC 或卸载目标的 TCP 卸载功能。 确定 NIC 或卸载目标支持的卸载功能后,主机堆栈会将此 OID 设置为启用一个或多个报告的功能。 主机堆栈还可以通过设置OID_TCP_TASK_OFFLOAD来禁用所有 NIC 或卸载目标的 TCP 卸载功能。 一次只能有一个协议启用特定 NIC 的 TCP 卸载功能。

查询卸载功能

当主机堆栈查询OID_TCP_TASK_OFFLOAD时,它会在 InformationBuffer 中提供 一个NDIS_TASK_OFFLOAD_HEADER 结构。 此结构指定以下内容:

  • 主机堆栈支持的卸载版本。
  • 主机堆栈处理的发送和接收数据包的封装格式。
  • 此类数据包中封装标头的大小。

利用此信息,微型端口驱动程序或其 NIC 可以在传输数据包中找到第一个 IP 标头的开头,这是执行卸载任务的先决条件。 卸载目标需要知道封装格式才能处理接收数据包。 在响应OID_TCP_TASK_OFFLOAD查询时,微型端口驱动程序或卸载目标在 InformationBuffer 中返回紧跟一个或多个 NDIS_TASK_OFFLOAD 结构的NDIS_TASK_OFFLOAD_HEADER结构。 每个NDIS_TASK_OFFLOAD结构都描述了微型端口驱动程序的 NIC 或卸载目标支持的卸载功能。 如果微型端口驱动程序的 NIC 或卸载目标支持特定卸载功能的多个版本,则它应为每个版本返回一个NDIS_TASK_OFFLOAD结构。

每个NDIS_TASK_OFFLOAD结构都有一个 Task 成员,该成员指定该结构所应用的特定卸载功能。 每个NDIS_TASK_OFFLOAD结构还有一个 TaskBuffer ,其中包含与指定的卸载功能相关的信息。 TaskBuffer 中的信息的格式设置为以下结构之一:

注意

如果中间驱动程序修改了它转发到基础微型端口驱动程序的数据包的内容,使得无法对数据包执行 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结构中的 Task 指示主机堆栈正在启用的卸载功能。 主机堆栈还通过在每个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 中,主机堆栈提供此结构的 OffsetFirstTask 成员设置为零的NDIS_TASK_OFFLOAD_HEADER结构。

要求

版本:Windows Vista 和更高 版本的标头:Ntddndis.h (包括 Ndis.h)