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 允许此行为,则此选项请求传输允许发送作传输部分数据。
RXCE_SEND_SYNCHRONOUS
表示发送作是否同步传输数据。 设置此选项后,请求将提交到基础传输和控制,在请求完成之前不会返回到调用方。 请注意,设置此位时,将忽略 pCompletionContext 参数。
[in] pMdl
指向要发送的缓冲区的指针。
[in] SendLength
要发送的数据的长度。
[in] pCompletionContext
在 SendCompletion 异步作期间,上下文传回调用方。 如果 SendOptions 参数请求同步发送作,则不会忽略此参数。
返回值
RxCeSend 在成功或失败时返回以下错误代码之一STATUS_SUCCESS:
返回代码 | 描述 |
---|---|
|
指定了无效或断开连接的虚拟线路或连接 |
|
此例程所需的非分页池内存分配失败。 |
|
根据指定的 SendOption s 参数,在 sendLength 参数中传递了无效的长度。 |
言论
RxCeSend 例程将分配 IRP,生成基础传输驱动程序的发送请求,并将请求提交到 TDI。 对于同步发送作,此例程还将在例程完成时分配的免费 IRP 和资源。
SendOptions 参数中使用的异步和同步选项 RxCeSend 区分两种情况。 在异步情况下,成功将请求提交到基础传输后,控件将返回到调用方。 使用 SendCompletion 回调例程将任何给定请求的结果传回。 RxCeSend 中的 pCompletionContext 参数在回调例程中传递回,以帮助调用方消除请求的歧义。
在同步情况下,请求将提交到基础传输,并且该控件不会返回到调用方,直到请求完成。 请注意,在同步情况下,将忽略 pCompletionContext 参数,返回的状态对应于作的完成状态。
异步和同步选项的优点取决于基础传输。 例如,在虚拟线路环境中(例如,TCP),同步选项意味着该控件在数据到达服务器之前不会返回。 另一方面,对于面向数据报的传输(例如 UDP),这两个选项之间几乎没有区别。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | rxce.h (包括 Rxce.h、Tdi.h) |
IRQL | <= APC_LEVEL |