Freigeben über


Virtual Channel Client DLL

Der Client einer Anwendung für virtuelle Kanäle ist eine DLL, die während der Initialisierung der Remotedesktopdienste auf dem Clientcomputer geladen wird. Die DLL muss auf dem Clientcomputer registriert werden. Weitere Informationen finden Sie unter Virtual Channel Client Registration.

Die Client-DLL muss eine VirtualChannelEntry--Funktion exportieren, die Remotedesktopdienste während der Initialisierung aufrufen. Der VirtualChannelEntry Einstiegspunkt empfängt einen Zeiger auf eine CHANNEL_ENTRY_POINTS Struktur. Diese Struktur enthält Zeiger auf die Funktionen, die die Client-DLL aufruft, um auf virtuelle Kanäle zuzugreifen.

Funktion Beschreibung
VirtualChannelInit
Registriert die Namen der virtuellen Kanäle, die vom Client verwendet werden sollen, und stellt eine VirtualChannelInitEvent Rückruffunktion bereit, über die Remotedesktopdienste den Client über Ereignisse benachrichtigt, die sich auf die Clientverbindung auswirken.
VirtualChannelOpen
Öffnet das Clientende eines angegebenen virtuellen Kanals und stellt eine VirtualChannelOpenEvent- Rückruffunktion bereit, über die Remotedesktopdienste den Client über Ereignisse benachrichtigt, die sich auf den virtuellen Kanal auswirken.
VirtualChannelWrite
Schreibt Daten in einen virtuellen Kanal. Remotedesktopdienste senden diese Daten an das Serverende des virtuellen Kanals. Der Server ruft die WTSVirtualChannelRead--Funktion auf, um die Daten zu lesen.
VirtualChannelClose
Schließt einen virtuellen Kanal.

Die VirtualChannelEntry-funktion Ihrer DLL muss die VirtualChannelInit-funktion aufrufen, um den Zugriff auf virtuelle Kanäle zu initialisieren. Wenn Sie VirtualChannelInitaufrufen, müssen Sie einen Zeiger an die VirtualChannelInitEvent Rückruffunktion übergeben. Remotedesktopdienste rufen diese Rückruffunktion auf, wenn die Initialisierung abgeschlossen ist und erneut, wenn eine Verbindung mit einem Remotedesktopsitzungshostserver (RD-Sitzungshost) hergestellt wurde.

Nachdem die Verbindung hergestellt wurde, können Sie die VirtualChannelOpen--Funktion aufrufen, um die virtuellen Kanäle zu öffnen, die vom VirtualChannelInit Aufruf registriert sind. Der VirtualChannelOpen-aufruf gibt einen Zeiger auf Ihre VirtualChannelOpenEvent- Rückruffunktion an.

Nachdem der VirtualChannelOpen Aufruf zurückgegeben wurde, können Sie den VirtualChannelWrite-Funktion aufrufen, um in den virtuellen Kanal zu schreiben. Der Schreibvorgang ist asynchron, sodass Sie den an VirtualChannelWrite übergebenen Puffer nicht freigeben oder wiederverwenden dürfen, bis Remotedesktopdienste Ihre VirtualChannelOpenEvent-Funktion aufrufen, um anzugeben, dass der Schreibvorgang abgeschlossen wurde. Wenn Sie VirtualChannelWriteaufrufen, können Sie einen Teil der Benutzerdaten übergeben, die den Schreibvorgang identifizieren. Remotedesktopdienste übergeben diese Benutzerdaten zurück, wenn sie VirtualChannelOpenEvent- aufruft, um Sie darüber zu informieren, dass der Vorgang abgeschlossen wurde. Am Serverende des virtuellen Kanals ruft das Server-Add-In die funktion WTSVirtualChannelRead auf, um die Daten zu lesen.

Remotedesktopdienste rufen auch Ihre VirtualChannelOpenEvent--Funktion auf, wenn Daten vom Servermodul in den virtuellen Kanal geschrieben werden. Das Servermodul ruft die WTSVirtualChannelWrite-Funktion auf, um Daten an das Serverende des virtuellen Kanals zu schreiben.

Die Client- und Servermodule können Datenblöcke beliebiger Größe in den virtuellen Kanal schreiben. Bevor Sie die Daten senden, segmentieren Remotedesktopdienste die Daten jedoch in Blöcke von CHANNEL_CHUNK_LENGTH Bytes. Remotedesktopdienste rufen Ihre VirtualChannelOpenEvent--Funktion einmal für jeden Datenabschnitt auf, anstatt die Daten in einen Block der Originalgröße neu zu erstellen. Jeder Aufruf von VirtualChannelOpenEvent gibt die Größe des Datenblocks, die Gesamtgröße, die vom Server geschriebene Gesamtgröße an und ob die Daten den Anfang, die Mitte oder das Ende eines vom Server geschriebenen Blocks darstellen.

Sie können die VirtualChannelClose--Funktion aufrufen, um einen Kanal zu schließen. Es ist jedoch nicht erforderlich, sie aufzurufen, da Remotedesktopdienste alle Kanäle automatisch schließen, wenn der Client die Verbindung mit dem Server trennt.