Função WTSVirtualChannelQuery (wtsapi32.h)
Retorna informações sobre um canal virtual especificado.
Sintaxe
BOOL WTSVirtualChannelQuery(
[in] HANDLE hChannelHandle,
WTS_VIRTUAL_CLASS unnamedParam2,
[out] PVOID *ppBuffer,
[out] DWORD *pBytesReturned
);
Parâmetros
[in] hChannelHandle
Manipule para um canal virtual aberto pela função WTSVirtualChannelOpen .
unnamedParam2
[out] ppBuffer
Ponteiro para um buffer que recebe as informações solicitadas.
[out] pBytesReturned
Ponteiro para uma variável que recebe o número de bytes retornados no parâmetro ppBuffer .
Retornar valor
Se a função for bem-sucedida, o valor retornado será um valor diferente de zero. Chame a função WTSFreeMemory com o valor retornado no parâmetro ppBuffer para liberar a memória temporária alocada por WTSVirtualChannelQuery.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
O exemplo a seguir mostra como obter acesso a um identificador de arquivo de canal virtual que pode ser usado para E/S assíncrona. Primeiro, o código abre um canal virtual usando uma chamada para a função WTSVirtualChannelOpen . Em seguida, o código chama a função WTSVirtualChannelQuery , especificando o tipo de classe virtual WTSVirtualFileHandle. WTSVirtualChannelQuery retorna um identificador de arquivo que você pode usar para executar operações de leitura e gravação assíncronas (sobrepostas). Por fim, o código libera a memória alocada por WTSVirtualChannelQuery com uma chamada para a função WTSFreeMemory e fecha o canal virtual com uma chamada para a função WTSVirtualChannelClose .
Observe que você não deve fechar explicitamente o identificador de arquivo obtido chamando WTSVirtualChannelQuery. Isso ocorre porque o WTSVirtualChannelClose fecha o identificador de arquivo.
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;
}
Para obter mais informações sobre o modo sobreposto, consulte Sincronização e Entrada e Saída Sobrepostas.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Servidor mínimo com suporte | Windows Server 2008 |
Plataforma de Destino | Windows |
Cabeçalho | wtsapi32.h |
Biblioteca | Wtsapi32.lib |
DLL | Wtsapi32.dll |
Conjunto de APIs | ext-ms-win-session-wtsapi32-l1-1-0 (introduzido em Windows 8) |