Partilhar via


DLL do cliente de canal virtual

O cliente de um aplicativo de canais virtuais é uma DLL que é 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 Virtual Channel Client Registration.

A DLL do cliente deve exportar uma funçãoVirtualChannelEntry, 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 através da qual os Serviços de Área de Trabalho Remota notificam o cliente sobre eventos que afetam a conexão do cliente.
VirtualChannelOpen
Abre a extremidade do cliente de um canal virtual especificado e fornece um VirtualChannelOpenEvent função de retorno de chamada através 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 a extremidade 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 deVirtualChannelEntryDLL deve chamar a funçãoVirtualChannelInit para inicializar o acesso aos canais virtuais. Quando você chama VirtualChannelInit, você deve passar um ponteiro para o VirtualChannelInitEvent função de retorno de chamada. 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 de Sessão de Área de Trabalho Remota (Host de Sessão RD).

Depois que a conexão for estabelecida, você pode chamar a função VirtualChannelOpen para abrir os canais virtuais registrados pelo chamada de VirtualChannelInit. A chamada VirtualChannelOpen especifica um ponteiro para sua 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 seu função de VirtualChannelOpenEvent para indicar que a operação de gravação foi concluída. Quando você chama 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 passam esses dados do usuário de volta quando ele chama VirtualChannelOpenEvent para notificá-lo de que a operação foi concluída. Na extremidade 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 de VirtualChannelOpenEvent quando os dados são gravados no canal virtual pelo módulo do servidor. O módulo de servidor chama o 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. Antes de enviar os dados, no entanto, 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 seu função VirtualChannelOpenEvent uma vez para cada bloco de dados, em vez de reconstruir os dados em um bloco do tamanho original. Cada chamada para VirtualChannelOpenEvent indica o tamanho do bloco, o tamanho total escrito pelo servidor e se os dados constituem o início, meio ou 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.