Share via


DLL de cliente de canal virtual

El cliente de una aplicación de canales virtuales es un archivo DLL que se carga durante la inicialización de Servicios de Escritorio remoto en el equipo cliente. El archivo DLL debe estar registrado en el equipo cliente. Para obtener más información, consulte Registro de cliente de canal virtual.

El archivo DLL de cliente debe exportar una función VirtualChannelEntry , a la que los Servicios de Escritorio remoto llaman durante la inicialización. El punto de entrada VirtualChannelEntry recibe un puntero a una estructura de CHANNEL_ENTRY_POINTS . Esta estructura contiene punteros a las funciones a las que llama el archivo DLL de cliente para acceder a los canales virtuales.

Función Descripción
VirtualChannelInit
Registra los nombres de los canales virtuales que va a usar el cliente y proporciona una función de devolución de llamada VirtualChannelInitEvent a través de la cual servicios de Escritorio remoto notifica al cliente los eventos que afectan a la conexión de cliente.
VirtualChannelOpen
Abre el final del cliente de un canal virtual especificado y proporciona una función de devolución de llamada VirtualChannelOpenEvent a través de la cual servicios de Escritorio remoto notifica al cliente los eventos que afectan al canal virtual.
VirtualChannelWrite
Escribe datos en un canal virtual. Servicios de Escritorio remoto envía estos datos al final del servidor del canal virtual. El extremo del servidor llama a la función WTSVirtualChannelRead para leer los datos.
VirtualChannelClose
Cierra un canal virtual.

La función VirtualChannelEntry de la DLL debe llamar a la función VirtualChannelInit para inicializar el acceso a los canales virtuales. Al llamar a VirtualChannelInit, debe pasar un puntero a la función de devolución de llamada VirtualChannelInitEvent . Servicios de Escritorio remoto llama a esta función de devolución de llamada cuando se completa la inicialización y de nuevo cuando se ha establecido una conexión con un servidor host de sesión de Escritorio remoto (host de sesión de Escritorio remoto).

Una vez establecida la conexión, puede llamar a la función VirtualChannelOpen para abrir los canales virtuales registrados por la llamada a VirtualChannelInit . La llamada a VirtualChannelOpen especifica un puntero a la función de devolución de llamada VirtualChannelOpenEvent .

Una vez que se devuelva la llamada a VirtualChannelOpen , puede llamar a la función VirtualChannelWrite para escribir en el canal virtual. La operación de escritura es asincrónica, por lo que no debe liberar ni reutilizar el búfer pasado a VirtualChannelWrite hasta que servicios de Escritorio remoto llame a la función VirtualChannelOpenEvent para indicar que se ha completado la operación de escritura. Al llamar a VirtualChannelWrite, puede pasar un fragmento de datos de usuario que identifique la operación de escritura. Servicios de Escritorio remoto devuelve estos datos de usuario cuando llama a VirtualChannelOpenEvent para notificarle que la operación se ha completado. Al final del servidor del canal virtual, el complemento de servidor llama a la función WTSVirtualChannelRead para leer los datos.

Servicios de Escritorio remoto también llama a la función VirtualChannelOpenEvent cuando el módulo de servidor escribe los datos en el canal virtual. El módulo de servidor llama a la función WTSVirtualChannelWrite para escribir datos en el extremo del servidor del canal virtual.

Los módulos de cliente y servidor pueden escribir bloques de datos de cualquier tamaño en el canal virtual. Sin embargo, antes de enviar los datos, Servicios de Escritorio remoto segmenta los datos en fragmentos de CHANNEL_CHUNK_LENGTH bytes. Servicios de Escritorio remoto llama a la función VirtualChannelOpenEvent una vez para cada fragmento de datos, en lugar de volver a generar los datos en un bloque del tamaño original. Cada llamada a VirtualChannelOpenEvent indica el tamaño del fragmento, el tamaño total escrito por el servidor y si los datos constituyen el principio, el medio o el final de un bloque escrito por el servidor.

Puede llamar a la función VirtualChannelClose para cerrar un canal. Sin embargo, no es necesario llamarlo porque Servicios de Escritorio remoto cierra todos los canales automáticamente cuando el cliente se desconecta del servidor.