NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构 (ndischimney.h)
[TCP 烟囱卸载功能已弃用,不应使用。]
NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构。
语法
typedef struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST {
IN NDIS_OBJECT_HEADER Header;
IN _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
IN _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
#endif
OUT NDIS_STATUS Status;
IN PVOID NdisReserved[3];
IN OUT PNDIS_OFFLOAD_HANDLE OffloadHandle;
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_PROTOCOL_OFFLOAD_BLOCK_LIST, *PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
成员
Header
NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构的标头。 标头的格式设置为 NDIS_OBJECT_HEADER 结构。 NDIS_OBJECT_HEADER结构包含NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构的修订号、紧随内存中NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构的卸载状态的类型,以及NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构(包括标头)的大小(以字节为单位)。
NDIS_OBJECT_HEADER 结构的 Type 成员指示卸载状态的类型,这意味着,特定的卸载状态结构 (或紧跟在内存中NDIS_PROTOCOL_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_PROTOCOL_OFFLOAD_BLOCK_LIST结构的指针, (由标头成员的 Type 成员指示的邻居、路径或 TCP) 。 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST通过 NextBlock 指针链接的结构始终处于卸载状态的同一层。 如果 NextBlock 值为 NULL,则表示此级别没有其他下一个NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构。
_NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST
DependentBlockList
指向NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构的指针,该结构位于卸载状态的依赖层 (卸载状态树) 的更高层。
对于 TCP 烟囱卸载:
相邻层NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员只能指向路径层上的NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构。 路径层NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员只能指向 TCP 层上的NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构。 TCP 层中NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员始终为 NULL。
Null 的 DependentBlockList 值表示没有依赖NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构。
Status
卸载目标对与 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行的启动卸载、查询卸载、更新卸载、无效卸载或终止卸载操作的完成状态。 根据操作,NDIS 会将以下NDIS_STATUS值之一写入 Status 成员:
NDIS_STATUS_SUCCESS
启动卸载:基础卸载目标已成功卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态以及与所有直接依赖PROTOCOL_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。
查询、更新、失效或终止卸载:卸载目标已成功对与 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行操作。
NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS
启动卸载:基础卸载目标已成功卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,但未能卸载与一个或多个直接依赖NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态。
查询、更新、失效或终止卸载:不允许的状态值。
NDIS_STATUS_FAILURE
启动卸载:基础卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态。 无法对失败原因进行分类。
查询、更新、使卸载失效或终止卸载:卸载目标无法对与 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构关联的状态或所引用的状态执行操作。
NDIS_STATUS_RESOURCES
启动卸载:卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的主机内存。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_ENTRIES
启动卸载:卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配 TCP 连接状态对象。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_PATH_ENTRIES
启动卸载:卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配路径状态对象。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES
启动卸载:卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配相邻状态对象。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES
启动卸载:卸载目标无法卸载与 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构关联的状态,因为主机堆栈在 中指定了非 NULLDlSourceAddress 成员 NEIGHBOR_OFFLOAD_STATE_CONST 结构,卸载目标要么不支持可配置的源 MAC 地址,要么不能接受其他源 MAC 地址。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES
启动卸载:卸载目标无法卸载与 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构关联的状态,因为卸载目标无法为 中的 SourceAddress 指针引用的源 IP 地址分配数据结构 PATH_OFFLOAD_STATE_CONST 结构。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER
启动卸载:卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的 TCP 传输缓冲区。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER
启动卸载:卸载目标无法卸载与NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的 TCP 接收缓冲区。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW
启动卸载:卸载目标无法卸载与 NDIS_PROTOCOL_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[3]
保留供 NDIS 使用。
OffloadHandle
指向 NDIS_OFFLOAD_HANDLE 结构的指针。 NDIS_OFFLOAD_HANDLE 结构表示卸载状态对象的协议或中间驱动程序上下文。
ProtocolReserved[2]
保留供协议驱动程序使用,这些驱动程序可以将此区域用于自己的目的。
MiniportReserved[2]
保留供卸载目标或中间驱动程序的微型端口部分使用。
ImReserved[2]
保留供中间驱动程序使用,中间驱动程序可以将此区域用于自己的目的。
Scratch[2]
协议驱动程序或中间驱动程序可以使用此区域进行内部跟踪。 仅当驱动程序拥有 的所有权时,此区域中的信息才有效 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIS T.
SourceHandle
此成员对于协议或中间驱动程序来说并不重要。 协议或中间驱动程序不得修改此成员。
在传播状态操作完成时,中间驱动程序会复制
SourceHandle ,它存储在对 的 SourceHandle 成员的 IM 调用条目中 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 传递给 NdisMXxxComplete 函数的结构。
PortNumber
标识微型端口适配器端口的端口号。 若要分配微型端口适配器端口号,请调用 NdisMAllocatePort 函数。 零值标识微型端口适配器的默认端口。 如果微型端口驱动程序尚未为指定的适配器分配端口,请使用默认端口。
NetBufferListChain
当协议或中间驱动程序指定 NULL 值时, NetBufferListChain 并不重要,基础驱动程序或卸载目标可以忽略它。
当协议或中间驱动程序指定非 NULL 值时, NetBufferListChain 指向 NET_BUFFER_LIST 结构,该结构可以是独立结构,也可以是此类结构链接列表中的第一个结构。 链接列表中的每个NET_BUFFER_LIST结构都描述了一个 NET_BUFFER 结构。 NET_BUFFER结构映射到内存描述符链 (MDL) 。 NET_BUFFER_LIST和关联的结构被锁定,以便它们保留在物理内存中。 但是,它们不会映射到系统内存中。
与NET_BUFFER结构关联的 MDL 包含作为状态操作或此类操作完成的一部分传输的数据。 目前,链接列表只能包含一种类型的数据:未完成的发送数据。 有关发送数据的详细信息,请参阅 处理卸载操作期间和之后的未完成发送数据。
在终止 TCP 连接的卸载时,卸载目标或中间驱动程序可以将未完成的发送数据传递给超载驱动程序或主机堆栈。 在这种情况下,卸载目标在调用 时为 NetBufferListChain 成员指定非 NULL 值 NdisMTerminateOffloadComplete 函数。 如果卸载目标未为正在终止的 TCP 连接传递发送数据,它将为 NetBufferListChain 成员指定 NULL 值。
注解
中间驱动程序从 创建NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构传播状态操作时NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。 When 在传播此类操作的完成时,中间驱动程序使用NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构来构造NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构可以紧跟在内存中的 卸载状态结构 后,该结构包含要 (或已) 卸载、查询、更新、失效或终止的状态。 NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST 结构的标头的 Type 成员指定卸载状态的类型,并隐含地指定内存中NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST结构后面的特定卸载状态结构 (或结构) 。
要求
要求 | 值 |
---|---|
Header | ndischimney.h (包括 Ndischimney.h) |