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 매개 변수에 반환된 바이트 수를 수신하는 변수에 대한 포인터입니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다. WTSVirtualChannelQuery에서 할당한 임시 메모리를 해제하려면 ppBuffer 매개 변수에 반환된 값으로 WTSFreeMemory 함수를 호출합니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 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
라이브러리 Wtsapi32.lib
DLL Wtsapi32.dll
API 세트 ext-ms-win-session-wtsapi32-l1-1-0(Windows 8 도입)

추가 정보

WTSVirtualChannelOpen

WTS_VIRTUAL_CLASS