WTSVirtualChannelQuery 函数 (wtsapi32.h)

返回有关指定虚拟通道的信息。

语法

BOOL WTSVirtualChannelQuery(
  [in]  HANDLE            hChannelHandle,
        WTS_VIRTUAL_CLASS unnamedParam2,
  [out] PVOID             *ppBuffer,
  [out] DWORD             *pBytesReturned
);

参数

[in] hChannelHandle

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

unnamedParam2

[out] ppBuffer

指向接收所请求信息的缓冲区的指针。

[out] pBytesReturned

指向一个变量的指针,该变量接收 ppBuffer 参数中返回的字节数。

返回值

如果函数成功,则返回值为非零值。 使用 ppBuffer 参数中返回的值调用 WTSFreeMemory 函数,以释放 WTSVirtualChannelQuery 分配的临时内存。

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

注解

以下示例演示如何获取对可用于异步 I/O 的虚拟通道文件句柄的访问权限。 首先,代码使用对 WTSVirtualChannelOpen 函数的调用打开虚拟通道。 然后,代码调用 WTSVirtualChannelQuery 函数,指定 WTSVirtualFileHandle 虚拟类类型。 WTSVirtualChannelQuery 返回可用于执行异步 (重叠) 读取和写入操作的文件句柄。 最后,代码通过调用 WTSFreeMemory 函数释放 WTSVirtualChannelQuery 分配的内存,并通过调用 WTSVirtualChannelClose 函数关闭虚拟通道。

请注意,不应显式关闭通过调用 WTSVirtualChannelQuery 获取的文件句柄。 这是因为 WTSVirtualChannelClose 会关闭文件句柄。

    PVOID vcFileHandlePtr = NULL;
    DWORD len;
    DWORD result = ERROR_SUCCESS;
    HANDLE vcHandle = NULL;
    HANDLE vcFileHandle = NULL;

    //
    //  Open a virtual channel.
    //
    vcHandle = WTSVirtualChannelOpen(
                      WTS_CURRENT_SERVER_HANDLE, // Current TS Server
                      WTS_CURRENT_SESSION,       // Current TS Session
                      (LPSTR) "TSTCHNL"                 // Channel name
                      );

    if (vcHandle == NULL) 
    {
        result = GetLastError();
    }

    //
    //  Gain access to the underlying file handle for 
    //   asynchronous I/O. 
    //
    if (result == ERROR_SUCCESS) 
    {
        if (!WTSVirtualChannelQuery(
                            vcHandle,
                            WTSVirtualFileHandle,
                            &vcFileHandlePtr,
                            &len
                            )) 
        {
            result = GetLastError();
        }
    }

    //
    //  Copy the data and
    //   free the buffer allocated by WTSVirtualChannelQuery.
    //
    if (result == ERROR_SUCCESS) 
    {
        memcpy(&vcFileHandle, vcFileHandlePtr, sizeof(vcFileHandle));
        WTSFreeMemory(vcFileHandlePtr);

        //
        //  Use vcFileHandle for overlapped reads and writes here.
        //
        //.
        //.
        //.
    }

    //
    //  Call WTSVirtualChannelClose to close the virtual channel. 
    //   Note: do not close the file handle.
    //
    if (vcHandle != NULL) 
    {
        WTSVirtualChannelClose(vcHandle);
        vcFileHandle = NULL;
    }

有关重叠模式的详细信息,请参阅 同步和重叠输入和输出

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 wtsapi32.h
Library Wtsapi32.lib
DLL Wtsapi32.dll
API 集 在 Windows 8) 中引入的 ext-ms-win-session-wtsapi32-l1-1-0 (

另请参阅

WTSVirtualChannelOpen

WTS_VIRTUAL_CLASS