什么是终端?
terminal
是一个概念,描述一组输入/输出设备(键盘、鼠标、监视器等)和配置(设备上的设置)。 请考虑用于阅读本文档的设备;你使用的是具有鼠标、键盘和监视器的台式计算机? 还是具有触摸屏和蓝牙键盘的液晶屏的移动设备? 所有这些都可以视为终端;它们是相互通信的组设备。
终端在生活中的目的是附加到会话。
session
是终端和其他设备之间的活动通信。 它是保存用户进程、数据标识并在 csrss.exe(客户端服务器运行时子系统)下运行其自己的 win32k 实例的元素。 如果终端未附加到会话,它将很快附加,或者正在销毁。
有不同类型的终端,但最常见的两种终端是控制台和远程终端。
控制台与远程终端
console
终端是连接到控制台主机的终端会话,它始终处于活动状态,但很少例外。 给定计算机上只有一个活动控制台终端,所有本地输入/输出设备都附加到该终端。
另一个常见终端是 remote
终端。 远程终端是一个终端,其中所有输入/输出都位于远程系统上,而不是直接连接。 例如,与远程会话关联的键盘、鼠标和监视器在物理上位于具有远程桌面协议(RDP)远程终端的另一个系统上。 此终端由与 远程桌面服务 接口集成的协议提供程序(RDP、Citrix、VMware 等)创建。 与此关联的输入/输出设备被视为“远程”。
Win32k 和其他程序可以使用 WTS API(如 WTSQuerySessionInformation)来了解用户远程连接到计算机。 当设备重定向时,这非常有用;某些功能需要禁用,请考虑额外的延迟或采用不同的路径。
远程连接到计算机时会发生什么情况?
下面是常见远程桌面协议(RDP)方案中终端和会话如何相关的示例。
计算机前面的用户
用户 Bob 在计算机物理上,使用本地设备与会话交互。 控制台终端附加到会话。
使用另一台计算机远程登录
用户正在从其他位置(未显示)访问其计算机,因此控制台终端不再用于其活动会话。 而是附加到具有登录屏幕的空会话。 与远程终端不同,控制台终端永远不会终止,因此当设备上没有本地用户时,它将附加到空会话。 由于用户正在从另一个位置访问其计算机,因此远程终端将实例化并附加到会话。
用户返回到其计算机并重新登录到控制台终端
当用户返回到本地电脑时,他们使用本地输入和输出来与会话进行交互。 这意味着控制台终端已重新附加到会话,远程处理终止时使用的远程终端。
远程终端生存期
远程终端生存期类似于从 RDP 客户端到 RDP 服务器的连接生存期。 如果 RDP 连接因网络问题而断开,远程终端将断开连接,需要建立。
多个终端和会话
在安装了远程桌面会话主机(RDSH)角色的作系统(如 Windows 10 Multisession 和 Windows Server)上,可以登录多个用户,并具有连接终端,如下所示的设置。 在这种情况下,仍有一个控制台终端/会话,但多个远程终端/会话。
在此示例中,Bob 和 Abby 从远程位置访问会话,实例化远程终端以与会话进行交互。 Tom 在本地访问了附加到控制台终端的会话。 如果 Tom 太远程进入计算机,其会话将附加到远程终端,控制台终端将附加到显示登录屏幕的空会话。
WDDM 图形适配器和终端
若要从远程终端中获取图形,需要远程 Windows 显示驱动程序模型(WDDM)间接驱动程序来配置虚拟监视器设置并将桌面映像处理到客户端。 WDDM 远程间接显示驱动程序的每个远程终端都有一个实例,WDDM 远程驱动程序最多可向远程会话公开 16 个监视器。
WDDM 远程间接显示驱动程序 可以复制远程系统的显示功能。 例如,如果远程系统上的监视器为 1080p,则 WDDM 远程间接显示驱动程序可以将 1080p 60Hz 监视器公开到远程会话中;或者,如果远程客户端在 iPad 上运行,该远程终端的 WDDM 远程间接显示驱动程序将公开与 iPad 显示功能匹配的监视器。
WDDM GPU 的显示容量始终与控制台终端相关联。 这意味着通过完整的 WDDM 驱动程序、控制台 WDDM 间接显示驱动程序或 WDDM 仅显示驱动程序公开的本地监视器将仅显示控制台终端,因此当前控制台会话。 例如,附加了两个本地监视器的完整 WDDM GPU 将在控制台会话中公开。 不过,该适配器在远程会话中枚举,没有任何监视器附加。
在 WDDM 远程会话中,SKU 的默认策略(使用组策略替代)决定是否将 WARP(CPU 光栅器)或与远程 WDDM 间接显示适配器配对的渲染 GPU 呈现该远程会话的桌面和应用程序。