Función WTSVirtualChannelQuery (wtsapi32.h)
Devuelve información sobre un canal virtual especificado.
Sintaxis
BOOL WTSVirtualChannelQuery(
[in] HANDLE hChannelHandle,
WTS_VIRTUAL_CLASS unnamedParam2,
[out] PVOID *ppBuffer,
[out] DWORD *pBytesReturned
);
Parámetros
[in] hChannelHandle
Controle a un canal virtual abierto por la función WTSVirtualChannelOpen .
unnamedParam2
[out] ppBuffer
Puntero a un búfer que recibe la información solicitada.
[out] pBytesReturned
Puntero a una variable que recibe el número de bytes devueltos en el parámetro ppBuffer .
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es un valor distinto de cero. Llame a la función WTSFreeMemory con el valor devuelto en el parámetro ppBuffer para liberar la memoria temporal asignada por WTSVirtualChannelQuery.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
En el ejemplo siguiente se muestra cómo obtener acceso a un identificador de archivo de canal virtual que se puede usar para E/S asincrónica. En primer lugar, el código abre un canal virtual mediante una llamada a la función WTSVirtualChannelOpen . A continuación, el código llama a la función WTSVirtualChannelQuery , especificando el tipo de clase virtual WTSVirtualFileHandle. WTSVirtualChannelQuery devuelve un identificador de archivo que puede usar para realizar operaciones asincrónicas (superpuestas) de lectura y escritura. Por último, el código libera la memoria asignada por WTSVirtualChannelQuery con una llamada a la función WTSFreeMemory y cierra el canal virtual con una llamada a la función WTSVirtualChannelClose .
Tenga en cuenta que no debe cerrar explícitamente el identificador de archivo obtenido llamando a WTSVirtualChannelQuery. Esto se debe a que WTSVirtualChannelClose cierra el identificador de archivo.
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 obtener más información sobre el modo superpuesto, vea Sincronización y entrada y salida superpuestas.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Servidor mínimo compatible | Windows Server 2008 |
Plataforma de destino | Windows |
Encabezado | wtsapi32.h |
Library | Wtsapi32.lib |
Archivo DLL | Wtsapi32.dll |
Conjunto de API | ext-ms-win-session-wtsapi32-l1-1-0 (introducido en Windows 8) |