Citrix ICA 虚拟通道
警告:
注册表编辑不当会导致严重问题,可能需要重新安装操作系统。Citrix 无法保证因注册表编辑器使用不当导致出现的问题能够得以解决。使用注册表编辑器需自担风险。在编辑注册表之前,请务必进行备份。
ICA 虚拟频道是什么
Citrix Workspace 应用程序与 Citrix Virtual Apps and Desktops 服务器之间的大部分功能和通信通过虚拟通道进行。虚拟通道是使用 Citrix Virtual Apps and Desktops 服务器进行远程计算体验的必要组成部分。虚拟通道用于:
- 音频
- COM 端口
- 磁盘
- 图形
- LPT 端口
- 打印机
- 智能卡
- 第三方自定义虚拟通道
- 视频
新虚拟通道有时会随新版本的 Citrix Virtual Apps and Desktops 服务器以及 Citrix Workspace 应用程序产品一起发布,以提供更多功能。
虚拟通道由与服务器端应用程序进行通信的客户端虚拟驱动程序组成。Citrix Virtual Apps and Desktops 随附各种虚拟通道。这些虚拟通道旨在允许客户和第三方供应商通过使用提供的软件开发工具包 (SDK) 之一创建自己的虚拟通道。
虚拟通道提供了一种安全的方式来完成各种任务。例如,正在与客户端设备通信的 Citrix Virtual Apps 服务器上运行的应用程序或与客户端环境通信的应用程序。
在客户端,虚拟通道与虚拟驱动程序相对应。每个虚拟驱动程序都提供一项特定的功能。有些功能是正常操作所必需的,有些功能是可选的。虚拟驱动程序在表示层协议级别运行。通过 Windows 工作站 (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
- 剪贴板
- ClientComm
- ClientAudio
- LicenseHandler(必需)
- TWI(必需)
- 智能卡
- ICACTL(必需)
- SSPI
- TwainRdr
- UserEXperience
- Vd3d
注意:
可以通过从注册表项中删除其中一个或多个值来禁用特定的客户端功能。例如,如果要删除客户端剪贴板,请删除单词剪贴板。
此列表包含客户端虚拟驱动程序文件及其各自的功能。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 – 移动 Receiver 虚拟通道
- vdmtchn.dll - 多点触控支持
- vdscardn.dll – 智能卡支持
- vdsens.dll – 传感器虚拟通道
- vdspl30n.dll – 客户端 UPD
- vdsspin.dll – Kerberos
- vdtuin.dll – 透明用户界面
- 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
- 剪贴板
- 多媒体
- 无缝会话共享
- 时区
某些通道作为内核模式加载,例如:
- CtxDvcs.sys – 动态虚拟通道
- Icausbb.sys – 通用 USB 重定向
- Picadm.sys – 客户端驱动器映射
- Picaser.sys – COM 端口重定向
- Picapar.sys – LPT 端口重定向
位于服务器端的图形虚拟通道
自 XenApp 7.0 和 XenDesktop7.0 起,ctxgfx.exe
将为基于工作站和端点服务器的会话托管图形虚拟通道。Ctxgfx
托管与相应驱动程序(Icardd.dll
,适用于 RDSH,vdod.dll
和 vidd.dll
,适用于工作站)交互的平台特定模块。
对于 XenDesktop 3D Pro 部署,将为 VDA 上的相应 GPU 安装 OEM 图形驱动程序。Ctxgfx
加载专用适配器模块以与 OEM 图形驱动程序进行交互。
在 Windows 服务中托管专业通道
在 Citrix Virtual Apps and Desktops 服务器上,各种通道都将作为 Windows 服务进行托管。此类托管为会话中的多个应用程序和服务器上的多个会话提供一对多语义。此类服务的示例包括:
- Citrix Device Redirector Service
- Citrix Dynamic Virtual Channel Service
- Citrix End User Experience Monitoring Service
- Citrix Location and Sensor Virtual Channel Service
- Citrix MultiTouch 重定向服务
- Citrix Print Manager Service
- Citrix Smartcard Service
- Citrix 音频重定向服务(仅限 Citrix Virtual Desktops)
Citrix Virtual Apps 上的音频虚拟通道是使用 Windows 音频服务托管的。
在服务器端,所有客户端虚拟通道都通过 WinStation 驱动程序 Wdica.sys 路由。在客户端,内置于 wfica32.exe 中的相应 WinStation 驱动程序轮询客户端虚拟通道。此示意图说明了虚拟通道客户端与服务器之间的连接。
此概述包含使用虚拟通道的客户端与服务器之间的数据交换。
- 客户端连接到 Citrix Virtual Apps and Desktops 服务器。客户端将与其支持的虚拟通道的信息传递给服务器。
- 服务器端应用程序启动,获取虚拟通道的句柄,并有选择地查询与通道有关的其他信息。
-
客户端虚拟驱动程序和服务器端应用程序使用以下两种方法传递数据:
- 如果服务器应用程序有要发送到客户端的数据,数据将立即发送到客户端。客户端接收到数据时,WinStation 驱动程序将从 ICA 流中对虚拟通道数据解多路复用,并立即将其传递给客户端虚拟驱动程序。
- 如果客户端虚拟驱动程序有要发送到服务器的数据,则在下次 WinStation 驱动程序轮询时将发送数据。服务器接收到数据时,则会排队,直至虚拟通道应用程序读取数据。无法提醒服务器虚拟通道应用程序已收到数据。
- 当服务器虚拟通道应用程序完成后,将关闭虚拟通道并释放所有分配的资源。
使用虚拟通道 SDK 创建您自己的虚拟通道
使用虚拟通道 SDK 创建虚拟通道需要中间编程知识。使用此方法可提供客户端与服务器之间的主要通信路径。例如,如果要在客户端实现设备(例如扫描仪)的使用,以便与会话中的进程一起使用。
注意:
虚拟通道 SDK 需要 WFAPI SDK 才能编写虚拟通道的服务器端。
由于 Citrix Virtual Apps and Desktops 的安全性增强,必须指定允许在 ICA 会话中打开哪些虚拟通道。有关详细信息,请参阅虚拟通道允许列表策略设置。
使用 ICA 客户端对象 SDK 创建您自己的虚拟通道
与使用虚拟通道 SDK 相比,使用 ICA 客户端对象 (ICO) 创建虚拟通道更加容易。通过使用 CreateChannels 方法在程序中创建一个命名对象来使用 ICO。
重要:
由于自 Citrix Receiver for Windows 10.00 及更高版本(以及适用于 Windows 的 Citrix Workspace 应用程序)起提高了安全性,因此在创建 ICO 虚拟通道时必须执行额外的步骤。
有关详细信息,请参阅客户端对象 API 规范程序员指南。
虚拟通道的直通功能
当您在 ICA 会话中使用适用于 Windows 的 Citrix Workspace 应用程序(又称为直通会话)时,Citrix 提供的大多数虚拟通道均以未修改的方式运行。在附加跃点中使用客户端时有一些注意事项。
以下功能在单跃点或多跃点中以相同的方式运行:
- 客户端 COM 端口映射
- 客户端驱动器映射
- 客户端打印机映射
- 客户端 UPD
- 最终用户体验监视
- 通用 USB
- Kerberos
- 多媒体支持
- 智能卡支持
- 透明键直通
- Twain
由于固有的延迟特性以及在每个跃点上执行的压缩、解压缩和渲染等因素,性能可能会受客户端经历的每个附加跃点影响。受影响区域如下:
- 双向音频
- 文件传输
- 通用 USB 重定向
- 无缝
- Thinwire
重要:
默认情况下,由在直通会话中运行的客户端的实例映射的客户端驱动器仅限于连接客户端的客户端驱动器。
Citrix Virtual Desktops 会话与 Citrix Virtual Apps 会话之间的虚拟通道的直通功能
当您在 Citrix Virtual Desktops 服务器上的 ICA 会话中使用适用于 Windows 的 Citrix Workspace 应用程序(又称为直通会话)时,Citrix 提供的大多数虚拟通道均以未修改的方式运行。
具体来说,在 Citrix Virtual Desktops 服务器上,有一个运行 picaPassthruHook 的 VDA 挂钩。此挂钩使客户端认为自己在 CPS 服务器上运行,并将客户端置于其传统的直通模式。
我们支持以下传统虚拟通道及其功能:
- 客户端
- 客户端 COM 端口映射
- 客户端驱动器映射
- 客户端打印机映射
- 通用 USB(因性能而受到限制)
- 多媒体支持
- 智能卡支持
- SSON
- 透明键直通
安全和 ICA 虚拟通道
确保使用安全是规划、开发和实现虚拟通道的重要组成部分。本文档中多次提及特定的安全区域。
最佳做法
连接和重新连接时打开虚拟通道。注销并断开连接时关闭虚拟通道。
创建使用虚拟通道功能的脚本时,请紧急以下准则。
命名虚拟通道:
最多可以创建 32 个虚拟通道。32 个通道中的 17 个被预留用于特殊目的。
-
虚拟通道名称的长度不得超过 7 个字符。
-
前三个字符为供应商名称预留,后四个字符为通道类型。例如,CTXAUD 表示 Citrix 音频虚拟通道。
虚拟通道由七字符(或更短)ASCII 名称引用。在 ICA 协议的一些早期版本中,虚拟通道被编号。这些数字现在根据 ASCII 名称动态分配,使实现更加容易。开发仅供内部使用的虚拟通道代码的用户可以使用任何与现有虚拟通道不冲突的七字符名称。仅使用数字和大小写 ASCII 字符。添加自己的虚拟通道时,请遵循现有的命名约定。有多个预定义的通道。预定义的通道以 OEM 标识符 CTX 开头,仅供 Citrix 使用。
双跃点支持:
虚拟通道 | 是否支持双跃点? |
---|---|
音频 | 否 |
浏览器内容重定向 | 否 |
CDM | 是 |
CEIP | 否 |
剪贴板 | 是 |
Continuum (MRVC) | 否 |
Control VC | 是 |
HTML5 视频重定向 (v1) | 是 |
键盘、鼠标 | 是 |
多点触控 | 否 |
NSAPVC | 否 |
打印 | 是 |
SensVC | 否 |
智能卡 | 是 |
Twain | 是 |
USB VC | 是 |
使用 USB VC 的 WAYCOM 设备 -K2M | 是 |
网络摄像机视频压缩 | 是 |
Windows Media 重定向 | 是 |
另请参阅
- ICA 虚拟通道 SDK
- Citrix Developer Network 是涉及使用 Citrix SDK 的所有技术资源和论坛的主页。在此网络中,您可以找到 SDK、示例代码和脚本、扩展程序和插件以及 SDK 文档的访问权限。此外,还包括 Citrix Developer Network 论坛,在该论坛中将围绕每个 Citrix SDK 进行技术讨论。