W_TCP_OFFLOAD_RECEIVE_HANDLER回调函数 (ndischimney.h)

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

NDIS 调用 MiniportTcpOffloadReceive 函数,以在卸载的 TCP 连接上) 接收 (接收缓冲区。

语法

W_TCP_OFFLOAD_RECEIVE_HANDLER WTcpOffloadReceiveHandler;

NDIS_STATUS WTcpOffloadReceiveHandler(
  [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 连接状态对象时提供了此 PVOID 值。

[in] NetBufferList

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

返回值

NDIS_STATUS_PENDING是唯一允许的返回值。 卸载目标始终完成, (通过调用异步返回) 发布的接收请求 NdisTcpOffloadReceiveComplete

注解

客户端应用程序可以在卸载的 TCP 连接上发布接收请求。 卸载目标使用这些请求将连接时收到的数据传输到客户端应用程序。 如果在连接上发布接收请求,则卸载目标应始终使用它们来传输在连接上收到的数据。 有关详细信息,请参阅 传递算法

卸载目标按先入先出 (FIFO) 顺序将已发布NET_BUFFER_LIST结构排队。 卸载目标使用每个NET_BUFFER_LIST结构的 MiniportReserved 成员对结构进行排队。

传递给 MiniportTcpOffloadReceive 函数的每个NET_BUFFER_LIST结构只有一个与之关联的NET_BUFFER结构。

卸载目标应按 FIFO 顺序将接收数据放入已发布的接收请求中。 也就是说,首先收到的数据应放入第一个发布的接收请求中,依此排列。

主机堆栈基于每个连接序列化对 MiniportTcpOffloadReceive 函数的调用。 在对连接上的 MiniportTcpOffloadReceive 函数的调用正在进行时,主机堆栈不会在该连接上调用 MiniportTcpOffloadReceive 函数。 这可确保接收请求始终以正确的顺序发布到卸载目标的 MiniportTcpOffloadReceive 函数。

但请注意,在卸载目标完成对同一连接上的 MiniportTcpOffloadReceive 函数的一个或多个先前调用之前,主机堆栈可以在连接上调用 MiniportTcpOffloadReceive 函数。 另请注意,主机堆栈可以在一个连接上调用卸载目标的 MiniportTcpOffloadReceive 函数,而在另一个连接上正在进行对 MiniportTcpOffloadReceive 函数的一个或多个调用。

已发布的接收请求可以选择采用以下两种模式之一:

  • 推送模式
  • 非推送模式
请注意,卸载目标必须同时支持推送模式和非推送模式。 .

为了确定缓冲区所在的模式,卸载目标调用 NET_BUFFER_LIST_INFO 宏以获取 TcpReceiveNoPush 的值。 如果值为 TRUE,则接收请求处于非推送模式。

如果接收请求处于推送模式,则卸载目标通过调用 NET_BUFFER_LIST_INFO 宏检索 TcpReceiveBytesTransferred 的值。 如果此值不为零,则卸载目标会立即启动连接的 推送计时器 。 如果此值为零,则卸载目标在卸载目标将接收数据的第一个字节放入接收请求后立即启动连接的推送计时器。 卸载目标始终会立即完成填充的接收请求。 如果发生以下任一情况,卸载目标将完成部分填充的接收请求,该请求处于推送模式:

  • 推送计时器过期。
  • 卸载目标在设置了 PSH 位的连接上接收 TCP 段。
如果接收请求处于非推送模式,则卸载目标不会启动推送计时器。 卸载目标仅在填充接收请求时完成接收请求。 卸载目标忽略它在连接上接收的 TCP 段中的 PSH 位。

如果在推送计时器运行时在卸载连接上收到数据,则卸载目标必须为该连接重启推送计时器。

要求

要求
目标平台 Windows
标头 ndischimney.h (包括 Ndischimney.h)
IRQL 任何级别

另请参阅

MiniportInitializeEx

NET_BUFFER

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadReceiveComplete