RxCeSend 函数 (rxce.h)

RxCeSend 沿着虚拟线路上的指定连接发送传输服务数据单元 (TSDU) 。

语法

NTSTATUS RxCeSend(
  [in] IN PRXCE_VC pVc,
  [in] IN ULONG    SendOptions,
  [in] IN PMDL     pMdl,
  [in] IN ULONG    SendLength,
  [in] IN PVOID    pCompletionContext
);

参数

[in] pVc

指向要沿其发送 TSDU 的虚拟线路的指针。

[in] SendOptions

用于通过传输在此发送操作上传输数据的所需选项。 请注意,这只是发送到传输的请求。 传输可能仅支持有限数量的指定选项,而忽略不支持的选项。 SendOptions 参数由 rxce.h 中定义的一组位组成。 SendOptions 参数可以是以下位的组合:

RXCE_SEND_EXPEDITED

给定数据应在传输当前持有的任何正常发送请求之前发送,以便在此终结点到终结点连接上进行传输。 如果传输不支持加速传输,它可以忽略此标志。 请注意,RXCE_SEND_EXPEDITED等效于 TDI TDI_SEND_EXPEDITED标志。

RXCE_SEND_NO_RESPONSE_EXPECTED

调用方向基础传输提供一个提示,指示它不希望从其远程节点对等节点对此发送做出响应。 此标志应禁用远程节点传输对 TSDU 确认的托管。 请注意,RXCE_SEND_NO_RESPONSE_EXPECTED等效于 TDI_SEND_NO_RESPONSE_EXPECTED 标志。

RXCE_SEND_NON_BLOCKING

如果基础传输当前没有可用于给定数据的内部缓冲区空间,则它应仅使用STATUS_DEVICE_NOT_READY完成 IRP。 如果传输具有一些可用缓冲区空间,则它应尽可能多地从客户端提供的缓冲区复制数据,将 IoStatus.Information 成员设置为它复制的字节数,并使用STATUS_SUCCESS完成 IRP。

此标志与不在内部发送缓冲区的传输无关。 请注意,RXCE_SEND_NON_BLOCKING等效于 TDI_SEND_NON_BLOCKING 标志。

RXCE_SEND_PARTIAL

表示是否要完整发送RX_MEM_DESC (MDL) ,或者仅发送部分 MDL。 此选项请求传输允许发送操作传输部分数据(如果传输和 MDL 允许此行为)。

RXCE_SEND_SYNCHRONOUS

表示发送操作是否要同步传输数据。 设置此选项后,请求将提交到基础传输,在请求完成之前,控件不会返回到调用方。 请注意,设置此位时,将忽略 pCompletionContext 参数。

[in] pMdl

指向要发送的缓冲区的指针。

[in] SendLength

要发送的数据的长度。

[in] pCompletionContext

SendCompletion 期间传递回调用方进行异步操作的上下文。 不是说,如果 SendOptions 参数请求同步发送操作,则忽略此参数。

返回值

RxCeSend 在成功时返回STATUS_SUCCESS或失败时返回以下错误代码之一:

返回代码 说明
STATUS_CONNECTION_DISCONNECTED
指定了无效或断开连接的虚拟线路或连接
STATUS_INSUFFICIENT_RESOURCES
此例程所需的非分页池内存分配失败。
STATUS_INVALID_PARAMETER
基于指定的 SendOptionsSendLength 参数中传递了无效的长度。

注解

RxCeSend 例程将分配 IRP,生成基础传输驱动程序的发送请求,并将请求提交到 TDI。 对于同步发送操作,此例程还将在例程完成时分配的可用 IRP 和资源。

RxCeSend 中使用的 SendOptions 参数中指示的异步和同步选项区分两种情况。 在异步情况下,将请求成功提交到基础传输后,控制将返回到调用方。 任何给定请求的结果都使用 SendCompletion 回调例程传回。 RxCeSend 中的 pCompletionContext 参数在回调例程中传递回,以帮助调用方消除请求的歧义。

在同步情况下,请求提交到基础传输,并且控件不会返回到调用方,直到请求完成。 请注意,在同步情况下,将忽略 pCompletionContext 参数,并且返回的状态对应于操作的完成状态。

异步和同步选项的优点取决于基础传输。 在 (TCP 的虚拟线路环境中(例如,) ),同步选项意味着控件在数据到达服务器之前不会返回。 另一方面,对于面向数据报的传输 (UDP,例如) ,这两个选项之间差别很小。

要求

要求
目标平台 桌面
标头 rxce.h (包括 Rxce.h、Tdi.h)
IRQL <= APC_LEVEL

另请参阅

MDL

RxCeSendDatagram