NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构 (ndischimney.h)

[TCP 烟囱卸载功能已弃用,不应使用。]

NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构是 TCP 烟囱卸载状态树的基本构建基块。 卸载状态树可以包含一个或多个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。

语法

typedef struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST {
  IN NDIS_OBJECT_HEADER                Header;
  IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
  struct                               _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
  IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
  struct                               _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
#endif
  OUT NDIS_STATUS                      Status;
  IN PVOID                             NdisReserved[2];
  IN OUT PVOID                         *MiniportOffloadContext;
  IN NDIS_HANDLE                       NdisOffloadHandle;
  IN PVOID                             ProtocolReserved[2];
  IN PVOID                             MiniportReserved[2];
  IN PVOID                             ImReserved[2];
  IN PVOID                             Scratch[2];
  IN PVOID                             SourceHandle;
  IN NDIS_PORT_NUMBER                  PortNumber;
  IN OUT PNET_BUFFER_LIST              NetBufferListChain;
} NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, *PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST;

成员

Header

NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构的标头。 标头的格式设置为 NDIS_OBJECT_HEADER 结构。 NDIS_OBJECT_HEADER 结构包含NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的修订号、紧跟在内存中NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的卸载状态的类型,以及NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构(包括 标头)的大小(以字节为单位)。

NDIS_OBJECT_HEADER结构的 Type 成员指示卸载状态的类型,并暗示,特定的卸载状态结构 (或紧跟在内存中NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构) 的结构。

支持以下OFFLOAD_STATE_TYPE值:

NeighborOffloadConstState

指定常量邻居状态。 此状态的格式设置为 NEIGHBOR_OFFLOAD_STATE_CONST 结构。

NeighborOffloadCachedState

指定缓存的邻居状态。 此状态的格式设置为 NEIGHBOR_OFFLOAD_STATE_CACHED 结构。

NeighborOffloadDelegatedState

指定委托的邻居状态。 此状态的格式设置为 NEIGHBOR_OFFLOAD_STATE_DELEGATED 结构。

NeighborOffloadState

指定所有邻居状态信息,包括常量、缓存和委托的邻居状态。 此状态的格式设置为NEIGHBOR_OFFLOAD_STATE_CONST结构,后跟NEIGHBOR_OFFLOAD_STATE_CACHED结构,后跟NEIGHBOR_OFFLOAD_STATE_DELEGATED结构。

Ip4OffloadConstState

指定 IPv4) (常量路径状态。 此状态的格式设置为 PATH_OFFLOAD_STATE_CONST 结构。

Ip4OffloadCachedState

指定 IPv4) (缓存路径状态。 此状态的格式设置为 PATH_OFFLOAD_STATE_CACHED 结构。

Ip4OffloadDelegatedState

指定 IPv4) (委托的路径状态。 此状态的格式设置为 PATH_OFFLOAD_STATE_DELEGATED 结构。 当前没有委托的路径状态。 PATH_OFFLOAD_STATE_DELEGATED 结构不包含任何变量。

Ip4OffloadState

指定 IPv4) (所有路径状态,包括常量、缓存和委托的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CONST结构,后跟PATH_OFFLOAD_STATE_CACHED结构,后跟PATH_OFFLOAD_STATE_DELEGATED结构。

Ip6OffloadConstState

指定 IPv6) (常量路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CONST结构。

Ip6OffloadCachedState

指定 IPv6) (缓存的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CACHED结构。

Ip6OffloadDelegatedState

指定 IPv6) (委托的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_DELEGATED结构。 目前没有委托的路径状态。 PATH_OFFLOAD_STATE_DELEGATED 结构不包含任何变量。

Ip6OffloadState

指定 IPv6) (所有路径状态信息,包括常量、缓存和委托的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CONST结构,后跟PATH_OFFLOAD_STATE_CACHED结构,后跟PATH_OFFLOAD_STATE_DELEGATED结构。

TcpOffloadConstState

指定常量 TCP 状态。 此状态的格式设置为 TCP_OFFLOAD_STATE_CONST 结构。

TcpOffloadCachedState

指定缓存的 TCP 状态。 此状态的格式设置为 TCP_OFFLOAD_STATE_CACHED 结构。

TcpOffloadDelegatedState

指定委托的 TCP 状态。 此状态的格式设置为 TCP_OFFLOAD_STATE_DELEGATED 结构。

TcpOffloadResourceState

保留。 当前未使用此OFFLOAD_STATE_TYPE值以及TCP_OFFLOAD_RESOURCE_STATE结构。

TcpOffloadState

指定所有 TCP 状态信息,包括常量、缓存和委托的 TCP 状态。 此状态的格式设置为TCP_OFFLOAD_STATE_CONST结构,后跟TCP_OFFLOAD_STATE_CACHED结构,后跟TCP_OFFLOAD_STATE_DELEGATED结构。

FilterReservedOffloadState

为筛选器驱动程序保留。

NextBlock

指向卸载状态层的下一个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的指针, (标头成员的 Type 成员指示的邻居、路径或 TCP) 。 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST通过 NextBlock 指针链接的结构始终处于卸载状态的同一层。 如果 NextBlock 值为 NULL,则表示此级别没有其他下一个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。

_NDIS_MINIPORT_OFFLOAD_BLOCK_LIST

DependentBlockList

指向NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的指针,该结构位于卸载状态的依赖层 (卸载状态树中较高层) 。 对于 TCP 烟囱卸载:

  • 相邻层NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员只能指向路径层上的NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
  • 路径层NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员只能指向 TCP 层上的NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
  • TCP 层NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员始终为 NULL
DependentBlockList 值为 NULL 表示不存在依赖NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。

Status

卸载目标对与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行的启动卸载、查询卸载、更新卸载、使卸载失效或终止卸载操作的完成状态。 根据操作,卸载目标会将以下NDIS_STATUS值之一写入 Status 成员:

NDIS_STATUS_SUCCESS

启动卸载:卸载目标已成功卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态以及与所有直接依赖NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。

查询、更新、失效或终止卸载:卸载目标已成功对与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行操作。

NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS

启动卸载:卸载目标已成功卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,但未能卸载与一个或多个直接依赖NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_FAILURE

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。 无法对失败原因进行分类。

查询、更新、失效或终止卸载:卸载目标无法对与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行操作。

NDIS_STATUS_RESOURCES

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的主机内存。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_TCP_ENTRIES

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配 TCP 连接状态对象。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_PATH_ENTRIES

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配路径状态对象。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配相邻状态对象。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES

启动卸载:卸载目标无法卸载与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联的状态,因为主机堆栈在 中指定了非 NULLDlSourceAddress 成员 NEIGHBOR_OFFLOAD_STATE_CONST 结构,卸载目标要么不支持可配置的源 MAC 地址,要么不能接受其他源 MAC 地址。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES

启动卸载:卸载目标无法卸载与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联的状态,因为卸载目标无法为 中的 SourceAddress 指针引用的源 IP 地址分配数据结构 PATH_OFFLOAD_STATE_CONST 结构。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的 TCP 传输缓冲区。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER

启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的 TCP 接收缓冲区。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW

启动卸载:卸载目标无法卸载与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联的状态,因为在 中指定的 InitialRcvWnd 成员 TCP_OFFLOAD_STATE_CACHED 结构大于卸载目标可以支持的结构。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_VLAN_ENTRIES

启动卸载:卸载目标已用完用于跟踪其他 VLAN ID 的资源。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_VLAN_MISMATCH

启动卸载:邻居 VlanId 不为零,与其中一个接口 VLAN ID 不匹配。

查询、更新、失效或终止卸载:不是允许的状态值。

NDIS_STATUS_OFFLOAD_PATH_MTU

TCP 连接的路径 MTU 大于卸载目标支持的路径。

查询、更新、失效或终止卸载:不是允许的状态值。

NdisReserved[2]

保留供 NDIS 使用。

MiniportOffloadContext

指向卸载目标在其中写入 PVOID 值的内存位置的指针。 PVOID 值引用卸载上下文区域,卸载目标在其中存储与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。 如果状态是卸载目标要卸载的新状态, 则 MiniportOffloadContext 指向的内存位置包含 NULL 值。 卸载状态后,卸载目标会将 PVOID 值写入此内存位置。 卸载目标提供的 PVOID 值引用卸载状态所在的卸载上下文区域。 如果 MiniportOffloadContext 成员本身为 NULL,则NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构是卸载状态树中的占位符。

NdisOffloadHandle

卸载目标在后续调用中提供的句柄 NdisTcpOffloadEventHandler 函数或指示与此NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的卸载状态时,NdisTcpOffloadReceiveHandler 函数。

ProtocolReserved[2]

保留供协议驱动程序使用,这些驱动程序可以将此区域用于自己的目的。 卸载目标不得修改此值。

MiniportReserved[2]

保留供卸载目标使用,这些目标可以将此区域用于自己的目的,例如排队与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的卸载状态。

ImReserved[2]

保留供中间驱动程序使用,中间驱动程序可以将此区域用于自己的目的。 卸载目标不得修改此值。

Scratch[2]

卸载目标可以使用此区域进行内部跟踪。 仅当卸载目标拥有NDIS_MINIPORT_OFFLOAD_BLOCK_LIST的所有权时,此区域中的信息才有效。

SourceHandle

此成员对于卸载目标并不重要。 卸载目标不得修改此成员。

PortNumber

标识微型端口适配器端口的端口号。 若要分配微型端口适配器端口号,请调用 NdisMAllocatePort 函数。 零值标识微型端口适配器的默认端口。 如果微型端口驱动程序尚未为指定的适配器分配端口,请使用默认端口。

NetBufferListChain

当主机堆栈指定 NULL 值时, NetBufferListChain 并不重要,可以由卸载目标忽略。

当主机堆栈指定非 NULL 值时, NetBufferListChain 指向 NET_BUFFER_LIST 结构,该结构可以是独立结构,也可以是此类结构链接列表中的第一个结构。 链接列表中的每个NET_BUFFER_LIST结构都描述了一个 NET_BUFFER 结构。 NET_BUFFER结构映射到内存描述符链 (MDL) 。 NET_BUFFER_LIST和关联的结构被锁定,以便它们保留在物理内存中。 但是,它们不会映射到系统内存中。

与NET_BUFFER结构关联的 MDL 包含主机堆栈作为卸载操作的一部分传递给卸载目标的数据。 卸载目标通过调用相应的 NdisTcpOffloadXxxComplete 函数以异步方式将此类数据完成回主机堆栈。 目前,链接列表只能包含一种类型的数据:未完成的发送数据。 有关详细信息,请参阅 在卸载操作期间和之后处理未完成的发送数据

卸载目标可以在终止 TCP 连接的卸载时将未完成的发送数据传递到主机堆栈。 在这种情况下,卸载目标在调用 时为 NetBufferListChain 成员指定非 NULL NdisMTerminateOffloadComplete 函数。 如果卸载目标未为正在终止的 TCP 连接传递发送数据,则必须为 NetBufferListChain 成员指定 NULL 值。

注解

NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构可以链接在一起,以构建 TCP 烟囱 卸载状态树的框架。

通过 NDIS,主机堆栈传递 OffloadBlockList 指针,该指针将卸载状态树引用到卸载目标的以下函数之一:

卸载目标通过将相同的指针传递给相应的完成函数,将树返回到主机堆栈: NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构可以紧跟在内存中的 卸载状态结构 后,该结构包含要卸载、查询、更新、失效或终止的状态。 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构的 HeaderType 成员指定卸载状态的类型,并隐含地指定内存中NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构之后的特定卸载状态结构 (或结构) 。

主机堆栈和卸载目标使用 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构的 *MiniportOffloadContextNdisOffloadHandle 成员来引用卸载状态。 有关详细信息,请参阅 存储和引用卸载状态

NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构可以在卸载状态树中执行多个函数之一。 它可以充当占位符、链接器,也可以传达要由卸载目标卸载的新状态。 有关详细信息,请参阅 占位符、链接器和新的卸载

在完成启动卸载、查询卸载、更新卸载、使卸载失效或终止卸载操作之前,卸载目标必须将完成状态写入状态树中每个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 Status 成员。

要求

要求
Header ndischimney.h (包括 Ndischimney.h)

另请参阅

MiniportInitiateOffload

MiniportInvalidateOffload

MiniportQueryOffload

MiniportTerminateOffload

MiniportUpdateOffload

NDIS_OBJECT_HEADER

NEIGHBOR_OFFLOAD_STATE_CACHED

NEIGHBOR_OFFLOAD_STATE_DELEGATED

NdisMAllocatePort

NdisMInitiateOffloadComplete

NdisMInvalidateOffloadComplete NdisMQueryOffloadStateComplete NdisMTerminateOffloadComplete

NdisMUpdateOffloadComplete

NdisTcpOffloadEventHandler

NdisTcpOffloadReceiveHandler

PATH_OFFLOAD_STATE_CACHED

PATH_OFFLOAD_STATE_CONST

PATH_OFFLOAD_STATE_DELEGATED

TCP_OFFLOAD_STATE_CACHED

TCP_OFFLOAD_STATE_CONST

TCP_OFFLOAD_STATE_DELEGATED