WTSVirtualChannelRead 函数 (wtsapi32.h)

从虚拟通道的服务器端读取数据。

WTSVirtualChannelRead 读取虚拟通道客户端端的 VirtualChannelWrite 调用写入的数据。

语法

BOOL WTSVirtualChannelRead(
  [in]  HANDLE hChannelHandle,
  [in]  ULONG  TimeOut,
  [out] PCHAR  Buffer,
  [in]  ULONG  BufferSize,
  [out] PULONG pBytesRead
);

参数

[in] hChannelHandle

由 WTSVirtualChannelOpen 函数打开的虚拟通道的句柄。

[in] TimeOut

指定超时(以毫秒为单位)。 如果 TimeOut 为零,则如果没有要读取的数据, WTSVirtualChannelRead 将立即返回。 如果 TimeOut 是 Winbase.h) 中定义的 INFINITE (,则函数将无限期等待,直到有数据要读取。

[out] Buffer

指向一个缓冲区的指针,该缓冲区接收从虚拟通道的服务器端读取的数据块。 服务器在单个 WTSVirtualChannelRead 调用中可以接收的最大数据量 为 CHANNEL_CHUNK_LENGTH 个字节。 如果客户端的 VirtualChannelWrite 调用写入更大的数据块,则服务器必须进行多个 WTSVirtualChannelRead 调用。

在某些情况下,远程桌面服务在 WTSVirtualChannelRead 函数读取的每个数据区块的开头放置CHANNEL_PDU_HEADER结构。 如果客户端 DLL 在调用 VirtualChannelInit 函数来初始化虚拟通道时设置CHANNEL_OPTION_SHOW_PROTOCOL选项,则会发生此情况。 如果通道是使用 IWTSVirtualChannel::Write 方法写入的动态虚拟通道,也会发生这种情况。 否则,缓冲区仅接收 VirtualChannelWrite 调用中写入的数据。

[in] BufferSize

指定 Buffer 的大小(以字节为单位)。 如果 Buffer 中的数据区块前面是 CHANNEL_PDU_HEADER 结构,则此参数的值应至少 CHANNEL_PDU_LENGTH。 否则,此参数的值应至少 CHANNEL_CHUNK_LENGTH

[out] pBytesRead

指向接收读取的字节数的变量的指针。

返回值

如果函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

注意WTSVirtualChannelRead 不是线程安全的。 若要从多个线程访问虚拟通道,或通过虚拟通道执行异步 IO,请将 WTSVirtualChannelQueryWTSVirtualFileHandle 配合使用。
 

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 wtsapi32.h
Library Wtsapi32.lib
DLL Wtsapi32.Dll

另请参阅

CHANNEL_PDU_HEADER

IWTSVirtualChannel::Write

VirtualChannelWrite

WTSVirtualChannelQuery

WTSVirtualChannelWrite