Compartilhar via


DLL do cliente do Canal Virtual

O cliente de um aplicativo de canais virtuais é uma DLL carregada durante a inicialização dos Serviços de Área de Trabalho Remota no computador cliente. A DLL deve ser registrada no computador cliente. Para obter mais informações, consulte Registro de cliente do Canal Virtual.

A DLL do cliente deve exportar uma função VirtualChannelEntry , que os Serviços de Área de Trabalho Remota chamam durante a inicialização. O ponto de entrada VirtualChannelEntry recebe um ponteiro para uma estrutura CHANNEL_ENTRY_POINTS . Essa estrutura contém ponteiros para as funções que a DLL do cliente chama para acessar canais virtuais.

Função Descrição
Virtualchannelinit
Registra os nomes dos canais virtuais a serem usados pelo cliente e fornece uma função de retorno de chamada VirtualChannelInitEvent por meio da qual os Serviços de Área de Trabalho Remota notificam o cliente sobre eventos que afetam a conexão do cliente.
VirtualChannelOpen
Abre o final do cliente de um canal virtual especificado e fornece uma função de retorno de chamada VirtualChannelOpenEvent por meio da qual os Serviços de Área de Trabalho Remota notificam o cliente sobre eventos que afetam o canal virtual.
VirtualChannelWrite
Grava dados em um canal virtual. Os Serviços de Área de Trabalho Remota enviam esses dados para o final do servidor do canal virtual. A extremidade do servidor chama a função WTSVirtualChannelRead para ler os dados.
VirtualChannelClose
Fecha um canal virtual.

A função VirtualChannelEntry da DLL deve chamar a função VirtualChannelInit para inicializar o acesso aos canais virtuais. Ao chamar VirtualChannelInit, você deve passar um ponteiro para a função de retorno de chamada VirtualChannelInitEvent . Os Serviços de Área de Trabalho Remota chamam essa função de retorno de chamada quando a inicialização é concluída e novamente quando uma conexão é estabelecida com um servidor Host da Sessão da Área de Trabalho Remota (Host da Sessão da Área de Trabalho Remota).

Depois que a conexão for estabelecida, você poderá chamar a função VirtualChannelOpen para abrir os canais virtuais registrados pela chamada VirtualChannelInit . A chamada VirtualChannelOpen especifica um ponteiro para a função de retorno de chamada VirtualChannelOpenEvent .

Depois que a chamada VirtualChannelOpen retornar, você poderá chamar a função VirtualChannelWrite para gravar no canal virtual. A operação de gravação é assíncrona, portanto, você não deve liberar ou reutilizar o buffer passado para VirtualChannelWrite até que os Serviços de Área de Trabalho Remota chamem sua função VirtualChannelOpenEvent para indicar que a operação de gravação foi concluída. Ao chamar VirtualChannelWrite, você pode passar uma parte dos dados do usuário que identifica a operação de gravação. Os Serviços de Área de Trabalho Remota transmitem esses dados de usuário de volta quando ele chama VirtualChannelOpenEvent para notificá-lo de que a operação foi concluída. No final do servidor do canal virtual, o suplemento do servidor chama a função WTSVirtualChannelRead para ler os dados.

Os Serviços de Área de Trabalho Remota também chamam sua função VirtualChannelOpenEvent quando os dados são gravados no canal virtual pelo módulo do servidor. O módulo de servidor chama a função WTSVirtualChannelWrite para gravar dados na extremidade do servidor do canal virtual.

Os módulos cliente e servidor podem gravar blocos de dados de qualquer tamanho no canal virtual. No entanto, antes de enviar os dados, os Serviços de Área de Trabalho Remota segmentam os dados em partes de CHANNEL_CHUNK_LENGTH bytes. Os Serviços de Área de Trabalho Remota chamam sua função VirtualChannelOpenEvent uma vez para cada parte dos dados, em vez de recompilar os dados em um bloco do tamanho original. Cada chamada para VirtualChannelOpenEvent indica o tamanho da parte, o tamanho total gravado pelo servidor e se os dados constituem o início, o meio ou o fim de um bloco gravado pelo servidor.

Você pode chamar a função VirtualChannelClose para fechar um canal. No entanto, não é necessário chamá-lo porque os Serviços de Área de Trabalho Remota fecham todos os canais automaticamente quando o cliente se desconecta do servidor.