[TCP 烟囱卸载功能已弃用,不应使用。
NDIS 调用 MiniportTcpOffloadForward 函数,将未确认接收的 TCP 段转发到卸载目标。
语法
W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;
NDIS_STATUS WTcpOffloadForwardHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
参数
[in] MiniportAdapterContext
卸载目标分配的上下文区域的句柄,卸载目标在其中维护有关此适配器实例的状态信息。 微型端口驱动程序在调用 NDIS 时向 NDIS 提供了此句柄 NdisMSetMiniportAttributes MiniportInitializeEx 函数。
[in] MiniportOffloadContext
指向包含 PVOID 值的内存位置的指针。 此 PVOID 值引用微型端口卸载上下文,其中包含要为其转发 TCP 段的 TCP 连接的状态对象。 卸载目标卸载 TCP 连接状态对象时提供了此 PVOID 值。
[in] NetBufferList
指向 NET_BUFFER_LIST 结构的指针。 此结构可以是独立结构,也可以是NET_BUFFER_LIST结构链接列表中的第一个结构。 列表中的每个NET_BUFFER_LIST结构都描述了一个 NET_BUFFER 结构。 每个NET_BUFFER结构映射到内存描述符列表链(MDL)。 与NET_BUFFER结构关联的 MDL 包含一个 TCP 段,并且只有一个 TCP 段正转发到卸载目标。 第一个 MDL 的第一个字节是 TCP 标头的第一个字节。 NET_BUFFER_LIST和相关结构被锁定,以便它们仍驻留在物理内存中。 但是,它们不会映射到系统内存中。
返回值
NDIS_STATUS_PENDING是唯一允许的返回值。 卸载目标始终通过调用 NdisTcpOffloadForwardComplete 函数。
言论
主机堆栈转发已接收但未在以下情况下确认的一个或多个 TCP 段:
- 主机堆栈接收了正在卸载到卸载目标的 TCP 连接上的段。 由于连接未完全卸载,卸载目标当时无法处理 TCP 段。
- 主机堆栈位于多宿主系统中,它接收网络接口上的段,而不是 TCP 连接卸载的网段。
- 卸载目标之前指示已接收的数据包,这些数据包设置了 IP 选项,并且/或是需要重新组合的片段。 处理 IP 选项和/或成功重新组合数据包后,主机堆栈会将 TCP 段转发到卸载目标。
- 正在卸载该连接。 主机堆栈始终等待连接卸载完成,然后再转发该连接的任何数据包。 完成连接卸载后,主机堆栈会尽快转发 TCP 段。 但是,转发此类段没有时间限制。
- 正在终止该连接的卸载。 在这种情况下,主机堆栈会缓冲数据,直到卸载终止,然后处理段。
转发 TCP 段时,主机堆栈会为每个NET_BUFFER结构传输一个 TCP 段。 主机堆栈只关联一个NET_BUFFER结构,因此,一个转发的 TCP 段与链接列表中的每个NET_BUFFER_LIST结构相关联。
主机堆栈分配 NDIS 传递给 MiniportTcpOffloadForward 函数的NET_BUFFER_LIST和相关结构。 卸载目标拥有这些资源,直到将其传递给 NdisTcpOffloadForwardComplete 函数。 虽然它拥有这些资源,但卸载目标可以将其排队进行处理。
要求
| 要求 | 价值 |
|---|---|
| 目标平台 | 窗户 |
| 标头 | ndischimney.h (包括 Ndischimney.h) |
| IRQL | 任何级别 |