与桌面的线程连接
进程连接到窗口工作站后,系统会将桌面分配给建立连接的线程。 系统根据以下规则确定要分配给线程的桌面:
- 如果线程已调用 SetThreadDesktop 函数,它将连接到指定的桌面。
- 如果线程未调用 SetThreadDesktop,它将连接到从父进程继承的桌面。
- 如果线程未调用 SetThreadDesktop 并且未继承桌面,系统会尝试打开以MAXIMUM_ALLOWED访问并连接到桌面,如下所示:
- 如果在创建进程时使用的 STARTUPINFO 结构的 lpDesktop 成员中指定了桌面名称,则线程将连接到指定的桌面。
- 否则,线程将连接到进程连接到的窗口工作站的默认桌面。
无法通过调用 CloseDesktop 函数关闭在此连接过程中分配的桌面。
当进程连接到桌面时,系统会在进程的句柄表中搜索继承的句柄。 系统使用找到的第一个桌面句柄。 如果希望子进程连接到特定继承的桌面,则必须确保仅将所需句柄标记为可继承。 如果子进程继承多个桌面句柄,则桌面连接的结果是未定义的。
系统在将进程连接到桌面时打开的桌面的句柄不可继承。
相关主题