Библиотека 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 . Однако вызывать его не нужно, так как службы удаленных рабочих столов автоматически закрывают все каналы, когда клиент отключается от сервера.