Citrix DaaS™

Citrix ICA® 虚拟通道

警告:

不正确地编辑注册表可能会导致严重问题,可能需要重新安装操作系统。Citrix 无法保证可以解决因不正确使用注册表编辑器而导致的问题。请自行承担使用注册表编辑器的风险。在编辑注册表之前,请务必备份注册表。

什么是 ICA 虚拟通道

Citrix Workspace™ 应用程序与 Citrix DaaS(以前称为 Citrix Virtual Apps and Desktops™ 服务)服务器之间的大部分功能和通信都通过虚拟通道进行。虚拟通道是 Citrix DaaS 服务器远程计算体验的必要组成部分。虚拟通道用于:

  • 音频
  • COM 端口
  • 磁盘
  • 图形
  • LPT 端口
  • 打印机
  • 智能卡
  • 第三方自定义虚拟通道
  • 视频

Citrix DaaS™ 和 Citrix Workspace 应用程序产品有时会发布新的虚拟通道,以提供更多功能。

虚拟通道

虚拟通道由与服务器端应用程序通信的客户端虚拟驱动程序组成。Citrix DaaS 附带了各种虚拟通道。它们旨在允许客户和第三方供应商通过使用提供的软件开发工具包 (SDK) 之一来创建自己的虚拟通道。

虚拟通道提供了一种安全的方式来完成各种任务。例如,在 Citrix Virtual Apps™ 服务器上运行的应用程序与客户端设备通信,或者应用程序与客户端环境通信。

在客户端,虚拟通道对应于虚拟驱动程序。每个虚拟驱动程序都提供特定功能。有些是正常运行所必需的,有些是可选的。虚拟驱动程序在表示层协议级别运行。通过多路复用 Windows Station (WinStation) 协议层提供的通道,可以同时激活多个协议。

以下功能包含在此注册表路径下的 VirtualDriver 注册表值中:

HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\ICA Client\Engine\Configuration\Advanced\Modules\ICA 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules\ICA 3.0 (适用于 64 位)

  • Thinwire3.0(必需)
  • ClientDrive
  • ClentPrinterQueue
  • ClentPrinterPort
  • Clipboard
  • ClientComm
  • ClientAudio
  • LicenseHandler(必需)
  • TWI(必需)
  • SmartCard
  • ICACTL(必需)
  • SSPI
  • TwainRdr
  • UserEXperience
  • Vd3d

注意:

可以通过从注册表项中删除一个或多个这些值来禁用特定的客户端功能。例如,如果想删除客户端剪贴板,请删除单词 Clipboard

此列表包含客户端虚拟驱动程序文件及其各自的功能。Citrix Virtual Apps 和适用于 Windows 的 Citrix Workspace 应用程序使用这些文件。它们以动态链接库(用户模式)的形式存在,而不是 Windows 驱动程序(内核模式),通用 USB 虚拟通道中描述的通用 USB 除外。

  • vd3dn.dll – 用于桌面合成重定向的 Direct3D 虚拟通道
  • vdcamN.dll – 双向音频
  • vdcdm30n.dll – 客户端驱动器映射
  • vdcom30N.dll - 客户端 COM 端口映射
  • vdcpm30N.dll – 客户端打印机映射
  • vdctln.dll – ICA 控制通道
  • vddvc0n.dll – 动态虚拟通道
  • vdeuemn.dll - 最终用户体验监控
  • vdgusbn.dll – 通用 USB 虚拟通道
  • vdkbhook.dll – 透明按键直通
  • vdlfpn.dll – 基于 UDP 类传输的 Framehawk 显示通道
  • vdmmn.dll – 多媒体支持
  • vdmrvc.dll – Mobile Receiver 虚拟通道
  • vdmtchn.dll - 多点触控支持
  • vdscardn.dll – 智能卡支持
  • vdsens.dll – 传感器虚拟通道
  • vdspl30n.dll – 客户端 UPD
  • vdsspin.dll – Kerberos
  • vdtuin.dll – 透明 UI
  • vdtw30n.dll – 客户端 Thinwire
  • vdtwin.dll – 无缝
  • vdtwn.dll – Twain

某些虚拟通道被编译到其他文件中。例如,剪贴板映射在 wfica32.exe 中可用。

64 位兼容性

适用于 Windows 的 Citrix Workspace 应用程序与 64 位兼容。与大多数为 32 位编译的二进制文件一样,这些客户端文件具有 64 位编译的等效文件:

  • brapi64.dll
  • confmgr.dll
  • ctxlogging.dll
  • ctxmui.dll
  • icaconf.exe
  • icaconfs.dll
  • icafile.dll
  • pnipcn64.dll
  • pnsson.dll
  • ssoncom.exe
  • ssonstub.dll
  • vdkbhook64.dll

通用 USB 虚拟通道

通用 USB 虚拟通道实现使用两个内核模式驱动程序以及虚拟通道驱动程序 vdgusbn.dll:

  • ctxusbm.sys
  • ctxusbr.sys

ICA 虚拟通道的工作原理

虚拟通道以多种方式加载。Shell(服务器的 WfShell 和工作站的 PicaShell)加载一些虚拟通道。一些虚拟通道作为 Windows 服务托管。

由 Shell 加载的虚拟通道模块,例如:

  • EUEM
  • Twain
  • Clipboard
  • Multimedia
  • 无缝会话共享
  • 时区

一些作为内核模式加载,例如:

  • CtxDvcs.sys – 动态虚拟通道
  • Icausbb.sys – 通用 USB 重定向
  • Picadm.sys – 客户端驱动器映射
  • Picaser.sys – COM 端口重定向
  • Picapar.sys – LPT 端口重定向

服务器端的图形虚拟通道

从 XenApp 7.0 和 XenDesktop 7.0 开始,ctxgfx.exe 为工作站和基于终端服务器的会话托管图形虚拟通道。Ctxgfx 托管与相应驱动程序(RDSH 的 Icardd.dll 以及工作站的 vdod.dllvidd.dll)交互的平台特定模块。

对于 XenDesktop® 3D Pro 部署,VDA 上会为相应的 GPU 安装 OEM 图形驱动程序。Ctxgfx 加载专门的适配器模块以与 OEM 图形驱动程序交互。

在 Windows 服务中托管专用通道

在 Citrix DaaS 服务器上,各种通道作为 Windows 服务托管。这种托管为会话中的多个应用程序和服务器上的多个会话提供了多对一语义。此类服务的示例包括:

  • Citrix 设备重定向器服务
  • Citrix 动态虚拟通道服务
  • Citrix 最终用户体验监控服务
  • Citrix 位置和传感器虚拟通道服务
  • Citrix 多点触控重定向服务
  • Citrix 打印管理器服务
  • Citrix 智能卡服务
  • Citrix 音频重定向服务(仅限 Citrix Virtual Desktops™)
  • Citrix ICA 状态通道服务

Citrix Virtual Apps 上的音频虚拟通道使用 Windows 音频服务托管。

在服务器端,所有客户端虚拟通道都通过 WinStation 驱动程序 Wdica.sys 路由。在客户端,内置于 wfica32.exe 中的相应 WinStation 驱动程序轮询客户端虚拟通道。此图说明了虚拟通道客户端-服务器连接。

虚拟通道连接

此概述包含使用虚拟通道的客户端-服务器数据交换。

  1. 客户端连接到 Citrix DaaS 服务器。客户端将有关其支持的虚拟通道的信息传递给服务器。
  2. 服务器端应用程序启动,获取虚拟通道的句柄,并可选择查询有关通道的附加信息。
  3. 客户端虚拟驱动程序和服务器端应用程序使用以下两种方法传递数据:

    • 如果服务器应用程序有数据要发送到客户端,则数据会立即发送到客户端。当客户端收到数据时,WinStation 驱动程序会从 ICA 流中解复用虚拟通道数据,并立即将其传递给客户端虚拟驱动程序。
    • 如果客户端虚拟驱动程序有数据要发送到服务器,则数据会在 WinStation 驱动程序下次轮询时发送。当服务器收到数据时,数据会排队,直到虚拟通道应用程序读取它。无法提醒服务器虚拟通道应用程序已收到数据。
  4. 当服务器虚拟通道应用程序完成时,它会关闭虚拟通道并释放所有已分配的资源。

使用虚拟通道 SDK 创建自己的虚拟通道

使用虚拟通道 SDK 创建虚拟通道需要中级编程知识。使用此方法可在客户端和服务器之间提供主要的通信路径。例如,如果正在实现客户端设备(如扫描仪)的使用,以便在会话中的进程中使用。

注意:

  • 虚拟通道 SDK 需要 WFAPI SDK 来编写虚拟通道的服务器端。

  • 由于 Citrix DaaS 的增强安全性,必须指定允许在 ICA 会话中打开哪些虚拟通道。有关详细信息,请参阅虚拟通道允许列表策略设置

使用 ICA 客户端对象 SDK 创建自己的虚拟通道

使用 ICA 客户端对象 (ICO) 创建虚拟通道比使用虚拟通道 SDK 更容易。通过在程序中使用 CreateChannels 方法创建命名对象来使用 ICO。

重要:

由于从 Citrix Receiver for Windows 10.00 版及更高版本(以及适用于 Windows 的 Citrix Workspace 应用程序)开始增强了安全性,因此在创建 ICO 虚拟通道时必须执行额外的步骤。

有关详细信息,请参阅客户端对象 API 规范程序员指南

虚拟通道的直通功能

Citrix 提供的大多数虚拟通道在使用适用于 Windows 的 Citrix Workspace 应用程序在 ICA 会话中(也称为直通会话)运行时,无需修改即可运行。在使用客户端进行额外跳数时,需要考虑一些事项。

以下功能在单跳或多跳中以相同方式运行:

  • 客户端 COM 端口映射
  • 客户端驱动器映射
  • 客户端打印机映射
  • 客户端 UPD
  • 最终用户体验监控
  • 通用 USB
  • Kerberos
  • 多媒体支持
  • 智能卡支持
  • 透明按键直通
  • Twain

由于固有的延迟性质以及压缩和解压缩以及在每个跳数处执行渲染等因素,性能可能会随着客户端经历的每个额外跳数而受到影响。受影响的区域是:

  • 双向音频
  • 文件传输
  • 通用 USB 重定向
  • 无缝
  • Thinwire

重要:

默认情况下,在直通会话中运行的客户端实例映射的客户端驱动器仅限于连接客户端的客户端驱动器。

Citrix Virtual Desktop 会话和 Citrix Virtual App 会话之间虚拟通道的直通功能

Citrix 提供的大多数虚拟通道在使用适用于 Windows 的 Citrix Workspace 应用程序在 Citrix Virtual Desktops 服务器上的 ICA 会话中(也称为直通会话)运行时,无需修改即可运行。

具体来说,在 Citrix Virtual Desktops 服务器上,有一个 VDA 挂钩运行 picaPassthruHook。此挂钩使客户端认为它正在 CPS 服务器上运行,并将客户端置于其传统的直通模式。

我们支持以下传统虚拟通道及其功能:

  • 客户端
  • 客户端 COM 端口映射
  • 客户端驱动器映射
  • 客户端打印机映射
  • 通用 USB(由于性能限制)
  • 多媒体支持
  • 智能卡支持
  • SSON
  • 透明按键直通

安全性和 ICA 虚拟通道

确保使用安全是规划、开发和实施虚拟通道的重要组成部分。本文档中有多处提及特定的安全领域。

最佳实践

连接重新连接时打开虚拟通道。在注销和断开连接时关闭虚拟通道。

在创建使用虚拟通道功能的脚本时,请牢记以下准则。

虚拟通道命名:

最多可以创建 32 个虚拟通道。其中 17 个通道保留用于特殊用途。

  • 虚拟通道名称的长度不得超过七个字符。

  • 前三个字符保留给供应商名称,接下来的四个字符保留给通道类型。例如,CTXAUD 表示 Citrix 音频虚拟通道。

虚拟通道通过七个字符(或更短)的 ASCII 名称引用。在 ICA 协议的一些早期版本中,虚拟通道是编号的。现在根据 ASCII 名称动态分配编号,使实现更容易。仅为内部使用开发虚拟通道代码的用户可以使用任何不与现有虚拟通道冲突的七个字符名称。仅使用数字和大小写 ASCII。添加自己的虚拟通道时,请遵循现有的命名约定。有几个预定义通道。预定义通道以 OEM 标识符 CTX 开头,仅供 Citrix 使用。

双跳支持:

虚拟通道 是否支持双跳?
音频
浏览器内容重定向
CDM
CEIP
剪贴板
Continuum (MRVC)
控制 VC
HTML5 视频重定向 (v1)
键盘、鼠标
多点触控
NSAPVC
打印
SensVC
智能卡
Twain
USB VC
WAYCOM 设备 - 使用 USB VC 的 K2M
网络摄像头视频压缩
Windows Media 重定向

另请参阅

  • ICA 虚拟通道 SDK
  • Citrix Developer Network 是涉及使用 Citrix SDK 的所有技术资源和讨论的中心。在此网络中,可以访问 SDK、示例代码和脚本、扩展和插件以及 SDK 文档。还包括 Citrix Developer Network 论坛,其中围绕每个 Citrix SDK 进行技术讨论。