窗口工作站和桌面创建
系统会自动创建交互式窗口工作站。 当交互式用户登录时,系统会将交互式窗口工作站与用户登录会话相关联。 系统还会为交互式窗口工作站创建默认输入桌面, (Winsta0\default) 。 登录用户启动的进程与 Winsta0\default 桌面相关联。
进程可以使用 CreateWindowStation 函数创建新的窗口工作站,并使用 CreateDesktop 或 CreateDesktopEx 函数创建新桌面。 可创建的桌面数量受系统桌面堆大小的限制。 有关详细信息,请参阅 CreateDesktop。
当非交互进程(如服务应用程序)尝试连接到窗口工作站,而进程登录会话不存在窗口工作站时,系统会尝试为会话创建窗口工作站和桌面。 创建的窗口工作站的名称基于登录会话标识符,桌面命名为 default,如下所述:
- 如果某个服务在 LocalSystem 帐户的安全上下文中运行,但不包含 SERVICE_INTERACTIVE_PROCESS 属性,它将使用以下窗口工作站和桌面:Service-0x0-3e7$\default。 此窗口工作站不是交互式的,因此服务无法显示用户界面。 此外,服务创建的进程无法显示用户界面。
- 如果服务在用户帐户的安全上下文中运行,则窗口工作站的名称基于用户 SID Service-0xZ1-Z2$,其中 Z1 是登录 SID 的高部分, Z2 是登录 SID 的低部分。 由于 SID 对登录会话是唯一的,因此在同一安全上下文中运行的两个服务会收到唯一的窗口工作站。 这些窗口站不是交互式的。
窗口工作站和桌面 (DACL) 的任意访问控制列表包括服务的用户帐户的以下访问权限:
窗口工作站:
- WINSTA\_ACCESSCLIPBOARD WINSTA\_ACCESSGLOBALATOMS WINSTA\_CREATEDESKTOP WINSTA\_EXITWINDOWS WINSTA\_READATTRIBUTES STANDARD\_RIGHTS\_REQUIRED
桌面设备:
- DESKTOP\_CREATEMENU DESKTOP\_CREATEWINDOW DESKTOP\_ENUMERATE DESKTOP\_HOOKCONTROL DESKTOP\_READOBJECTS DESKTOP\_WRITEOBJECTS STANDARD\_RIGHTS\_REQUIRED