Поделиться через


Библиотека DLL клиента виртуального канала

Клиент приложения виртуальных каналов — это библиотека DLL, загружаемая во время инициализации служб удаленных рабочих столов на клиентском компьютере. Библиотека DLL должна быть зарегистрирована на клиентском компьютере. Дополнительные сведения см. в разделе Регистрация клиента виртуального канала.

Клиентская библиотека DLL должна экспортировать функцию VirtualChannelEntry , которую службы удаленных рабочих столов вызывают во время инициализации. Точка входа VirtualChannelEntry получает указатель на структуру CHANNEL_ENTRY_POINTS . Эта структура содержит указатели на функции, которые клиентская библиотека DLL вызывает для доступа к виртуальным каналам.

Функция Описание
VirtualChannelInit
Регистрирует имена виртуальных каналов, которые будут использоваться клиентом, и предоставляет функцию обратного вызова VirtualChannelInitEvent , с помощью которой службы удаленных рабочих столов уведомляют клиента о событиях, влияющих на подключение клиента.
VirtualChannelOpen
Открывает клиентский конец указанного виртуального канала и предоставляет функцию обратного вызова VirtualChannelOpenEvent , с помощью которой службы удаленных рабочих столов уведомляют клиента о событиях, влияющих на виртуальный канал.
VirtualChannelWrite
Записывает данные в виртуальный канал. Службы удаленных рабочих столов отправляют эти данные на серверную часть виртуального канала. Серверная служба вызывает функцию WTSVirtualChannelRead для чтения данных.
VirtualChannelClose
Закрывает виртуальный канал.

Функция VirtualChannelEntry библиотеки DLL должна вызывать функцию VirtualChannelInit для инициализации доступа к виртуальным каналам. При вызове VirtualChannelInit необходимо передать указатель на функцию обратного вызова VirtualChannelInitEvent . Службы удаленных рабочих столов вызывают эту функцию обратного вызова после завершения инициализации и повторного подключения к серверу узла сеансов удаленных рабочих столов (узел сеансов удаленных рабочих столов).

После установки подключения можно вызвать функцию VirtualChannelOpen , чтобы открыть виртуальные каналы, зарегистрированные вызовом VirtualChannelInit . Вызов VirtualChannelOpen указывает указатель на функцию обратного вызова VirtualChannelOpenEvent .

После возврата вызова VirtualChannelOpen можно вызвать функцию VirtualChannelWrite для записи в виртуальный канал. Операция записи является асинхронной, поэтому не следует освобождать или повторно использовать буфер, передаваемый в VirtualChannelWrite , пока службы удаленных рабочих столов не вызовет функцию VirtualChannelOpenEvent , чтобы указать, что операция записи завершена. При вызове VirtualChannelWrite можно передать часть пользовательских данных, которая идентифицирует операцию записи. Службы удаленных рабочих столов передают эти данные пользователя обратно при вызове VirtualChannelOpenEvent , чтобы уведомить вас о завершении операции. На серверной части виртуального канала серверная надстройка вызывает функцию WTSVirtualChannelRead для чтения данных.

Службы удаленных рабочих столов также вызывают функцию VirtualChannelOpenEvent при записи данных в виртуальный канал серверным модулем. Серверный модуль вызывает функцию WTSVirtualChannelWrite для записи данных на серверную часть виртуального канала.

Клиентский и серверный модули могут записывать блоки данных любого размера в виртуальный канал. Однако перед отправкой данных службы удаленных рабочих столов сегментируют данные на блоки CHANNEL_CHUNK_LENGTH байтов. Службы удаленных рабочих столов вызывают функцию VirtualChannelOpenEvent один раз для каждого блока данных, а не перестраивают данные в блок исходного размера. Каждый вызов VirtualChannelOpenEvent указывает размер блока, общий размер, записанный сервером, а также то, являются ли данные началом, серединой или концом блока, записанного сервером.

Чтобы закрыть канал, можно вызвать функцию VirtualChannelClose . Однако вызывать его не нужно, так как службы удаленных рабочих столов автоматически закрывают все каналы, когда клиент отключается от сервера.