Condividi tramite


DLL del client del canale virtuale

Il client di un'applicazione di canali virtuali è una DLL caricata durante l'inizializzazione di Servizi Desktop remoto nel computer client. La DLL deve essere registrata nel computer client. Per altre informazioni, vedere Registrazione client del canale virtuale.

La DLL client deve esportare una funzione VirtualChannelEntry , che Servizi Desktop remoto chiama durante l'inizializzazione. Il punto di ingresso VirtualChannelEntry riceve un puntatore a una struttura CHANNEL_ENTRY_POINTS . Questa struttura contiene puntatori alle funzioni chiamate dalla DLL client per accedere ai canali virtuali.

Funzione Descrizione
VirtualChannelInit
Registra i nomi dei canali virtuali da usare dal client e fornisce una funzione di callback VirtualChannelInitEvent tramite cui Servizi Desktop remoto notifica al client gli eventi che influiscono sulla connessione client.
VirtualChannelOpen
Apre la fine client di un canale virtuale specificato e fornisce una funzione di callback VirtualChannelOpenEvent tramite cui Servizi Desktop remoto invia una notifica al client sugli eventi che influiscono sul canale virtuale.
VirtualChannelWrite
Scrive i dati in un canale virtuale. Servizi Desktop remoto invia questi dati alla fine del server del canale virtuale. Il server end chiama la funzione WTSVirtualChannelRead per leggere i dati.
VirtualChannelClose
Chiude un canale virtuale.

La funzione VirtualChannelEntry della DLL deve chiamare la funzione VirtualChannelInit per inizializzare l'accesso ai canali virtuali. Quando si chiama VirtualChannelInit, è necessario passare un puntatore alla funzione di callback VirtualChannelInitEvent . Servizi Desktop remoto chiama questa funzione di callback al termine dell'inizializzazione e di nuovo quando viene stabilita una connessione con un server Host sessione Desktop remoto (Host sessione Desktop remoto).

Dopo aver stabilito la connessione, è possibile chiamare la funzione VirtualChannelOpen per aprire i canali virtuali registrati dalla chiamata VirtualChannelInit . La chiamata VirtualChannelOpen specifica un puntatore alla funzione di callback VirtualChannelOpenEvent .

Al termine della chiamata VirtualChannelOpen , è possibile chiamare la funzione VirtualChannelWrite per scrivere nel canale virtuale. L'operazione di scrittura è asincrona, pertanto non è necessario liberare o riutilizzare il buffer passato a VirtualChannelWrite finché Servizi Desktop remoto non chiama la funzione VirtualChannelOpenEvent per indicare che l'operazione di scrittura è stata completata. Quando si chiama VirtualChannelWrite, è possibile passare una parte di dati utente che identifica l'operazione di scrittura. Servizi Desktop remoto passa nuovamente questi dati utente quando chiama VirtualChannelOpenEvent per notificare che l'operazione è stata completata. Al termine del server del canale virtuale, il componente aggiuntivo server chiama la funzione WTSVirtualChannelRead per leggere i dati.

Servizi Desktop remoto chiama anche la funzione VirtualChannelOpenEvent quando i dati vengono scritti nel canale virtuale dal modulo server. Il modulo server chiama la funzione WTSVirtualChannelWrite per scrivere dati alla fine del server del canale virtuale.

I moduli client e server possono scrivere blocchi di dati di qualsiasi dimensione nel canale virtuale. Prima di inviare i dati, tuttavia, Servizi Desktop remoto segmenta i dati in blocchi di CHANNEL_CHUNK_LENGTH byte. Servizi Desktop remoto chiama la funzione VirtualChannelOpenEvent una volta per ogni blocco di dati, invece di ricompilare i dati in un blocco delle dimensioni originali. Ogni chiamata a VirtualChannelOpenEvent indica le dimensioni del blocco, le dimensioni totali scritte dal server e se i dati costituiscono l'inizio, il centro o la fine di un blocco scritto dal server.

È possibile chiamare la funzione VirtualChannelClose per chiudere un canale. Tuttavia, non è necessario chiamarlo perché Servizi Desktop remoto chiude automaticamente tutti i canali quando il client si disconnette dal server.