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
-
剪贴板
-
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 – 移动接收器虚拟通道
-
vdmtchn.dll - 多点触控支持
-
vdscardn.dll – 智能卡支持
-
vdsens.dll – 传感器虚拟通道
-
vdspl30n.dll – 客户端 UPD
-
vdsspin.dll - 刻耳柏洛斯
-
vdtuin.dll – 透明 UI
-
vdtw30n.dll – 客户端 Thinwire
-
vdtwin.dll – 无缝
-
vdtwn.dll – 特文
某些虚拟通道被编译到其他文件中。例如,剪贴板映射在 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
-
特文
-
剪贴板
-
多媒体
-
无缝会话共享
-
时区
有些以内核模式加载,例如:
-
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.dll 和 vidd.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 驱动程序轮询客户端虚拟通道。此图说明了虚拟通道客户端-服务器连接。
虚拟通道连接(/en-us/citrix-daas/media/virtual-channel-connection.png)
本概述包含使用虚拟通道的客户端-服务器数据交换。
-
客户端连接到 Citrix DaaS 服务器。客户端将其支持的虚拟通道信息传递给服务器。
-
服务器端应用程序启动,获取虚拟通道的句柄,并可选择查询有关该通道的附加信息。
-
客户端虚拟驱动程序和服务器端应用程序使用以下两种方法传递数据:
-
如果服务器应用程序有数据要发送到客户端,数据会立即发送到客户端。当客户端收到数据时,WinStation 驱动程序会从 ICA 流中解复用虚拟通道数据,并立即将其传递给客户端虚拟驱动程序。
-
如果客户端虚拟驱动程序有数据要发送到服务器,数据会在 WinStation 驱动程序下次轮询时发送。当服务器收到数据时,数据会排队,直到虚拟通道应用程序读取它。无法通知服务器虚拟通道应用程序已收到数据。
-
-
当服务器虚拟通道应用程序完成时,它会关闭虚拟通道并释放所有已分配的资源。
使用虚拟通道 SDK 创建您自己的虚拟通道
使用虚拟通道 SDK 创建虚拟通道需要中级编程知识。使用此方法可在客户端和服务器之间提供主要的通信路径。例如,如果您正在客户端实现设备(如扫描仪)的使用,以便在会话中与某个进程一起使用。
注意:
-
虚拟通道 SDK 需要 WFAPI SDK 来编写虚拟通道的服务器端。
-
由于 Citrix DaaS 的安全性增强,您必须指定允许在 ICA 会话中打开哪些虚拟通道。有关详细信息,请参阅虚拟通道允许列表策略设置。
使用 ICA 客户端对象 SDK 创建您自己的虚拟通道
使用 ICA 客户端对象 (ICO) 创建虚拟通道比使用虚拟通道 SDK 更容易。通过在程序中使用 CreateChannels 方法创建命名对象来使用 ICO。
重要提示:
由于从 10.00 版及更高版本的 Citrix Receiver for Windows(以及 Citrix Workspace apps for Windows)开始增强了安全性,因此在创建 ICO 虚拟通道时,您必须采取额外的步骤。
有关详细信息,请参阅客户端对象 API 规范程序员指南。
虚拟通道的直通功能
当您在 ICA 会话(也称为直通会话)中使用 Citrix Workspace app for Windows 时,Citrix 提供的大多数虚拟通道都可未经修改地运行。在额外跳数中使用客户端时,需要考虑一些因素。
以下功能在单跳或多跳中以相同方式运行:
-
客户端 COM 端口映射
-
客户端驱动器映射
-
客户端打印机映射
-
客户端 UPD
-
最终用户体验监控
-
通用 USB
-
科尔贝罗斯
-
多媒体支持
-
智能卡支持
-
透明密钥直通
-
特温
由于延迟的固有性质以及诸如在每个跃点执行的压缩、解压缩和渲染等因素,客户端每增加一个跃点,性能可能会受到影响。受影响的区域包括:
-
双向音频
-
文件传输
-
通用 USB 重定向
-
无缝
-
汀维
重要提示:
默认情况下,在直通会话中运行的客户端实例映射的客户端驱动器仅限于连接客户端的客户端驱动器。
Citrix Virtual Desktop 会话与 Citrix Virtual App 会话之间虚拟通道的直通功能
当您在 Citrix Virtual Desktops 服务器(也称为直通会话)上的 ICA 会话中使用适用于 Windows 的 Citrix Workspace 应用程序时,Citrix 提供的大多数虚拟通道都可保持不变地运行。
具体来说,在 Citrix Virtual Desktops 服务器上,有一个 VDA 挂钩运行 picaPassthruHook。此挂钩使客户端认为它正在 CPS 服务器上运行,并将客户端置于其传统的直通模式。
我们支持以下传统虚拟通道及其功能:
-
客户端
-
客户端 COM 端口映射
-
客户端驱动器映射
-
客户端打印机映射
-
通用 USB(受性能限制)
-
多媒体支持
-
智能卡支持
-
SSON
-
透明密钥直通
安全性和 ICA 虚拟通道
确保使用安全是规划、开发和实施虚拟通道的重要组成部分。本文档中有多处提及特定的安全领域。
最佳实践
在您连接和重新连接时打开虚拟通道。在您注销和断开连接时关闭虚拟通道。
创建使用虚拟通道功能的脚本时,请牢记以下准则。
虚拟通道命名:
您最多可以创建 32 个虚拟通道。其中 17 个通道保留用于特殊用途。
-
虚拟通道名称的长度不得超过七个字符。
-
前三个字符保留给供应商名称,后四个字符保留给通道类型。例如,CTXAUD 代表 Citrix 音频虚拟通道。
虚拟通道通过七个字符(或更短)的 ASCII 名称来引用。在 ICA 协议的某些早期版本中,虚拟通道是编号的。现在,这些编号根据 ASCII 名称动态分配,从而使实施更加容易。仅为内部使用开发虚拟通道代码的用户可以使用任何不与现有虚拟通道冲突的七个字符名称。仅使用数字以及大写和小写 ASCII 字符。添加自己的虚拟通道时,请遵循现有的命名约定。有几个预定义通道。预定义通道以 OEM 标识符 CTX 开头,仅供 Citrix 使用。
双跳支持:
| 虚拟通道 | 是否支持双跳? |
|---|---|
| 音频 | 否 |
| 浏览器内容重定向 | 否 |
| CDM | 是 |
| CEIP | 否 |
| 剪贴板 | 是 |
| 连续体 (MRVC) | 否 |
| 控制 VC | 是 |
| HTML5 视频重定向 (v1) | 是 |
| 键盘、鼠标 | 是 |
| 多点触控 | 否 |
| NSAPVC | 否 |
| 打印 | 是 |
| SensVC | 否 |
| 智能卡 | 是 |
| 特温 | 是 |
| USB VC | 是 |
| WAYCOM 设备 -K2M 使用 USB VC | 是 |
| 网络摄像头视频压缩 | 是 |
| Windows 媒体重定向 | 是 |
另请参阅
-
ICA 虚拟通道 SDK
-
Citrix 开发者网络 是所有涉及使用 Citrix SDK 的技术资源和讨论的中心。在此网络中,您可以找到 SDK、示例代码和脚本、扩展和插件以及 SDK 文档。此外,还包括 Citrix 开发者网络论坛,其中围绕每个 Citrix SDK 进行技术讨论。