Client-DLL für virtuellen Kanal

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 sein. Weitere Informationen finden Sie unter Clientregistrierung für virtuelle Kanäle.

Die Client-DLL muss eine VirtualChannelEntry-Funktion exportieren, die von Remotedesktopdiensten während der Initialisierung aufgerufen wird. 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 sendet diese Daten an das Serverende des virtuellen Kanals. Das Serverende ruft die Funktion WTSVirtualChannelRead 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 VirtualChannelInit aufrufen, müssen Sie einen Zeiger an die Rückruffunktion VirtualChannelInitEvent übergeben. Remotedesktopdienste ruft 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 durch den VirtualChannelInit-Aufruf registrierten virtuellen Kanäle zu öffnen. Der VirtualChannelOpen-Aufruf gibt einen Zeiger auf Ihre VirtualChannelOpenEvent-Rückruffunktion an.

Nachdem der VirtualChannelOpen-Aufruf zurückgegeben wurde, können Sie die 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 aufruft , um anzugeben, dass der Schreibvorgang abgeschlossen wurde. Wenn Sie VirtualChannelWrite aufrufen, können Sie einen Teil von Benutzerdaten übergeben, der den Schreibvorgang identifiziert. Remotedesktopdienste übergeben diese Benutzerdaten zurück, wenn VirtualChannelOpenEvent aufgerufen wird, 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 Funktion WTSVirtualChannelWrite 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. Vor dem Senden der Daten 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 ursprünglichen Größe neu zu erstellen. Jeder Aufruf von VirtualChannelOpenEvent gibt die Größe des Blocks, die vom Server geschriebene Gesamtgröße an und gibt an, 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.