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


функция обратного вызова CHANNEL_OPEN_EVENT_FN (cchannel.h)

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

Тип PCHANNEL_OPEN_EVENT_FN определяет указатель на эту функцию обратного вызова. VirtualChannelOpenEvent — это заполнитель для имени функции, определяемой приложением или библиотекой.

Синтаксис

CHANNEL_OPEN_EVENT_FN ChannelOpenEventFn;

VOID VCAPITYPE ChannelOpenEventFn(
  [in] DWORD openHandle,
  [in] UINT event,
  [in] LPVOID pData,
  [in] UINT32 dataLength,
  [in] UINT32 totalLength,
  [in] UINT32 dataFlags
)
{...}

Параметры

[in] openHandle

Дескриптор виртуального канала. Это дескриптор, возвращаемый в параметре pOpenHandle функции VirtualChannelOpen .

[in] event

Указывает событие, вызвавшее уведомление. Этот параметр может принимать одно из указанных ниже значений.

CHANNEL_EVENT_DATA_RECEIVED

Виртуальный канал получил данные от серверной части. pData — это указатель на блок данных. dataLength указывает размер этого блока. totalLength указывает общий размер данных, записанных сервером.

CHANNEL_EVENT_WRITE_CANCELLED

Операция записи, запущенная вызовом VirtualChannelWrite , отменена. pData — это значение, указанное в параметре pUserDataобъекта VirtualChannelWrite.

Операция записи отменяется при отключении сеанса клиента. Это уведомление позволяет освободить любую память, связанную с операцией записи.

CHANNEL_EVENT_WRITE_COMPLETE

Операция записи, запущенная вызовом VirtualChannelWrite , завершена. pData — это значение, указанное в параметре pUserDataобъекта VirtualChannelWrite.

[in] pData

Указатель на дополнительные данные для события. Тип данных зависит от события, как описано ранее в описаниях событий.

Если событиеCHANNEL_EVENT_DATA_RECEIVED, данные, записанные сервером, разбиваются на блоки размером не более CHANNEL_CHUNK_LENGTH байтов. Параметр dataFlags указывает, находится ли текущий блок в начале, середине или конце блока данных, записанного сервером.

Обратите внимание, что размер этого параметра может быть больше значения, заданного параметром dataLength . Приложение должно считывать только количество байтов, указанное параметром dataLength.

[in] dataLength

Указывает размер данных в байтах в буфере pData .

[in] totalLength

Указывает общий размер (в байтах) данных, записанных одной операцией записи на серверную часть виртуального канала.

[in] dataFlags

Предоставляет сведения о фрагменте данных, получаемых в событии CHANNEL_EVENT_DATA_RECEIVED . Будут установлены следующие битовые флаги.

Обратите внимание, что не следует выполнять прямые сравнения с помощью оператора "==" при сравнении значений из следующего списка. Вместо этого используйте описанные методы сравнения.

CHANNEL_FLAG_FIRST

Блок — это начало данных, записанных одной операцией записи.

При сравнении этого флага используйте побитовые сравнения.

CHANNEL_FLAG_LAST

Блок — это конец данных, записанных одной операцией записи.

При сравнении этого флага используйте побитовые сравнения.

CHANNEL_FLAG_MIDDLE

Это значение по умолчанию. Блок находится в середине блока данных, записанных одной операцией записи.

Не используйте побитовые сравнения для непосредственного сравнения этого флага. Вместо этого используйте побитовые сравнения, чтобы определить, что значение флага не является CHANNEL_FLAG_FIRST или CHANNEL_FLAG_LAST. Для этого используется следующее сравнение: Result = !(flags & CHANNEL_FLAG_FIRST) && !(flags & CHANNEL_FLAG_LAST).

CHANNEL_FLAG_ONLY

Объединяет значения CHANNEL_FLAG_FIRST и CHANNEL_FLAG_LAST . Блок содержит все данные из одной операции записи.

При сравнении этого флага используйте побитовые сравнения.

Возвращаемое значение

Эта функция не имеет возвращаемых значений.

Комментарии

Библиотека DLL клиента использует функцию VirtualChannelOpen для регистрации функции VirtualChannelOpenEvent для определенного виртуального канала.

Одну и ту же функцию VirtualChannelOpenEvent можно использовать для нескольких вызовов VirtualChannelOpen.

Эту функцию можно вызывать с другим типом события во время ее выполнения. Например, его можно вызвать с CHANNEL_EVENT_WRITE_COMPLETE или CHANNEL_EVENT_WRITE_CANCELLED при обработке события CHANNEL_EVENT_DATA_RECEIVED . Обратите внимание, что эта функция не будет вызываться с тем же типом событий, который она обрабатывает в настоящее время.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header cchannel.h

См. также раздел

VirtualChannelOpen