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时,它会在 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 中的信息的格式为以下结构之一:

注意

如果中间驱动程序修改了它转发到基础微型端口驱动程序的数据包的内容,以便无法对数据包执行 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)