W_TCP_OFFLOAD_FORWARD_HANDLER回调函数 (ndischimney.h)
[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 段。 第一个 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 函数。 虽然它拥有这些资源,但卸载目标可以自由地将它们排队进行处理。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | ndischimney.h (包括 Ndischimney.h) |
IRQL | 任何级别 |