虛擬通道用戶端 DLL

虛擬通道應用程式的用戶端是在用戶端電腦上遠端桌面服務初始化期間載入的 DLL。 DLL 必須在用戶端電腦上註冊。 如需詳細資訊,請參閱 虛擬通道用戶端註冊

用戶端 DLL 必須匯出 VirtualChannelEntry 函式,遠端桌面服務會在初始化期間呼叫此函式。 VirtualChannelEntry進入點會接收CHANNEL_ENTRY_POINTS結構的指標。 此結構包含用戶端 DLL 呼叫以存取虛擬通道之函式的指標。

函式 描述
VirtualChannelInit
註冊用戶端要使用的虛擬通道名稱,並提供 VirtualChannelInitEvent 回呼函式,讓遠端桌面服務告知用戶端影響用戶端連線的事件。
VirtualChannelOpen
開啟指定虛擬通道的用戶端結尾,並提供 VirtualChannelOpenEvent 回呼函式,遠端桌面服務會透過此函式通知用戶端有關影響虛擬通道的事件。
VirtualChannelWrite
將資料寫入虛擬通道。 遠端桌面服務會將此資料傳送至虛擬通道的伺服器端。 伺服器端會呼叫 WTSVirtualChannelRead 函式來讀取資料。
VirtualChannelClose
關閉虛擬通道。

DLL 的 VirtualChannelEntry 函式必須呼叫 VirtualChannelInit 函式,以初始化對虛擬通道的存取。 當您呼叫 VirtualChannelInit時,必須傳遞 VirtualChannelInitEvent 回呼函式的指標。 當初始化完成時,遠端桌面服務會呼叫此回呼函式,並在與遠端桌面工作階段主機 (RD 工作階段主機) 伺服器建立連線時再次呼叫。

建立連線之後,您可以呼叫 VirtualChannelOpen 函式,以開啟 VirtualChannelInit 呼叫所註冊的虛擬通道。 VirtualChannelOpen呼叫會指定VirtualChannelOpenEvent回呼函式的指標。

在 VirtualChannelOpen呼叫傳回之後,您可以呼叫VirtualChannelWrite函式以寫入虛擬通道。 寫入作業是非同步,因此您不得釋放或重複使用傳遞至 VirtualChannelWrite 的緩衝區,直到遠端桌面服務呼叫 VirtualChannelOpenEvent 函式,以指出寫入作業已完成。 當您呼叫 VirtualChannelWrite時,可以傳遞識別寫入作業的使用者資料片段。 遠端桌面服務會在呼叫 VirtualChannelOpenEvent 時,將此使用者資料傳回,以通知您作業已完成。 在虛擬通道的伺服器端,伺服器增益集會呼叫 WTSVirtualChannelRead 函式來讀取資料。

當伺服器模組將資料寫入虛擬通道時,遠端桌面服務也會呼叫 VirtualChannelOpenEvent 函式。 伺服器模組會呼叫 WTSVirtualChannelWrite 函式,將資料寫入虛擬通道的伺服器端。

用戶端和伺服器模組可以將任何大小的資料區塊寫入虛擬通道。 不過,在傳送資料之前,遠端桌面服務會將資料分割成CHANNEL_CHUNK_LENGTH位元組的區塊。 遠端桌面服務會針對每個資料區塊呼叫 VirtualChannelOpenEvent 函式一次,而不是將資料重建成原始大小的區塊。 每個 對 VirtualChannelOpenEvent 的呼叫都會指出區塊大小、伺服器寫入的大小總計,以及資料是否構成伺服器所寫入區塊的開頭、中間或結尾。

您可以呼叫 VirtualChannelClose 函式來關閉通道。 不過,不需要呼叫它,因為當用戶端與伺服器中斷連線時,遠端桌面服務會自動關閉所有通道。