NDIS_TCP_OFFLOAD_SEND_COMPLETE回调函数 (ndischimney.h)
[TCP 烟囱卸载功能已弃用,不应使用。]
卸载目标调用 NdisTcpOffloadSendComplete 函数,以完成对卸载目标的 MiniportTcpOffloadSend 函数发出的一个或多个发送请求。
语法
NDIS_TCP_OFFLOAD_SEND_COMPLETE NdisTcpOffloadSendComplete;
void NdisTcpOffloadSendComplete(
[in] IN NDIS_HANDLE NdisMiniportHandle,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
参数
[in] NdisMiniportHandle
卸载目标在上一次调用中获取的句柄 NdisMRegisterMiniportDriver 函数。
[in] NetBufferList
指向 NET_BUFFER_LIST 结构的指针。 此结构可以是独立结构,也可以是NET_BUFFER_LIST结构链接列表中的第一个结构。 卸载目标在对其的一个或多个调用中获取了这些结构 MiniportTcpOffloadSend 函数。
返回值
无
备注
为了提高系统性能,卸载目标可以创建一个链接列表,其中包含对 MiniportTcpOffloadSend 函数的多个调用NET_BUFFER_LIST结构。 然后,驱动程序可以在对 NdisTcpOffloadSendComplete 函数的单个调用中传递此类链接列表。
在完成一个或多个发送请求之前,卸载目标必须为传递给 NdisTcpOffloadSendComplete 函数的每个NET_BUFFER_LIST结构执行以下操作:
-
将状态值写入 Status 成员:
- NDIS_STATUS_SUCCESS指示与NET_BUFFER_LIST关联的所有数据都由卸载目标成功发送,并且卸载目标从远程主机接收了所有传输数据的确认。 请注意,这与非卸载发送函数不同, MiniportSendNetBufferLists,它不监视确认。
- NDIS_STATUS_SUCCESS以外的状态值(例如,状态值NDIS_STATUS_REQUEST_ABORTED或NDIS_STATUS_UPLOAD_IN_PROGRESS)指示未成功确认发送数据。 卸载目标可能已发送数据,也可能未发送数据。 卸载目标应使链接列表中所有后续NET_BUFFER_LIST结构的发送操作失败,而不会发送与这些结构关联的更多数据。 当要发送数据的 TCP 连接的卸载终止时,卸载目标写入状态值 NDIS_STATUS_UPLOAD_IN_PROGRESS。 在这种情况下,主机堆栈将排队并处理 TCP 数据。 如果卸载目标在要发送数据的 TCP 连接上收到了 RST 段,则卸载目标会写入状态值 NDIS_STATUS_REQUEST_ABORTED。 在这种情况下,主机堆栈不会处理 TCP 数据。
- 卸载目标应完成链接列表中最多一个NET_BUFFER_LIST结构的部分发送。 卸载目标将NDIS_STATUS_SUCCESS之外的状态值(例如,状态值NDIS_STATUS_ABORTED或NDIS_STATUS_UPLOAD_IN_PROGRESS)写入此类NET_BUFFER_LIST结构。
- 如果中间驱动程序无法分配内存以将发送操作传播到基础卸载目标,则会将状态值 NDIS_STATUS_REQUEST_UPLOAD 写入链接列表中的第一个NET_BUFFER_LIST结构,并将NDIS_STATUS_UPLOAD_REQUESTED到链接列表中的所有后续NET_BUFFER_LIST结构。 中间驱动程序不得将NET_BUFFER_LIST结构传播到基础卸载目标。 主机堆栈将执行发送操作。
- 指定发送的数据字节数。 卸载目标通过调用 id 为 TcpOffloadBytesTransferred 的 NET_BUFFER_LIST_INFO 宏来执行此操作。
- 调用与NET_BUFFER_LIST结构关联的每个NET_BUFFER结构的 NdisAdvanceNetBufferDataStart 函数。 传递给 NdisAdvanceNetBufferDataStart 函数的 NetBuffer 参数应指向 NET_BUFFER 结构。 DataOffsetDelta 参数应指定NET_BUFFER结构中由卸载目标传输并由远程主机确认的数据字节数。 FreeMdl 参数为 NULL。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | ndischimney.h (包括 Ndischimney.h) |
IRQL | 任何级别 |