与桌面的线程连接
进程连接到窗口工作站后,系统会将桌面分配给建立连接的线程。 系统根据以下规则确定要分配给线程的桌面:
- 如果线程已调用 SetThreadDesktop 函数,它将连接到指定的桌面。
- 如果线程未调用 SetThreadDesktop,它将连接到从父进程继承的桌面。
- 如果线程未调用 SetThreadDesktop 并且未继承桌面,系统会尝试打开以MAXIMUM_ALLOWED访问并连接到桌面,如下所示:
- 如果在创建进程时使用的 STARTUPINFO 结构的 lpDesktop 成员中指定了桌面名称,则线程将连接到指定的桌面。
- 否则,线程将连接到进程连接到的窗口工作站的默认桌面。
无法通过调用 CloseDesktop 函数关闭在此连接过程中分配的桌面。
当进程连接到桌面时,系统会在进程的句柄表中搜索继承的句柄。 系统使用找到的第一个桌面句柄。 如果希望子进程连接到特定继承的桌面,则必须确保仅将所需句柄标记为可继承。 如果子进程继承多个桌面句柄,则桌面连接的结果是未定义的。
系统在将进程连接到桌面时打开的桌面的句柄不可继承。
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈