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结构执行以下操作:

  • 将状态值写入 状态 成员:
    • 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 为TcpOffloadBytesTransferredNET_BUFFER_LIST_INFO 宏来执行此操作。
  • 调用与NET_BUFFER_LIST结构关联的每个NET_BUFFER结构的 NdisAdvanceNetBufferDataStart 函数。 传递给 NdisAdvanceNetBufferDataStart 函数的 NetBuffer 参数应指向NET_BUFFER结构。 DataOffsetDelta 参数应指定由卸载目标传输且远程主机确认的NET_BUFFER结构中的数据字节数。 FreeMdl 参数为 NULL

要求

   
目标平台 通用
标头 ndischimney.h (包括 Ndischimney.h)
IRQL 任何级别

另请参阅

MiniportSendNetBufferLists

MiniportTcpOffloadSend

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver