与桌面的线程连接

进程连接到窗口工作站后,系统将桌面分配给进行连接的线程。 系统根据以下规则确定要分配给线程的桌面:

  1. 如果线程已调用 SetThreadDesktop 函数,它将连接到指定的桌面。
  2. 如果线程未调用 setThreadDesktop,它将连接到从父进程继承的桌面。
  3. 如果线程未调用 SetThreadDesktop,并且未继承桌面,则系统会尝试打开MAXIMUM_ALLOWED访问并连接到桌面,如下所示:
    • 如果在创建进程时使用的 STARTUPINFO 结构的 lpDesktop 成员中指定了桌面名称,则线程将连接到指定的桌面。
    • 否则,线程将连接到进程连接到的窗口工作站的默认桌面。

在此连接过程中分配的桌面无法通过调用 CloseDesktop 函数来关闭。

当进程连接到桌面时,系统将搜索进程的句柄表以获取继承的句柄。 系统使用它找到的第一个桌面句柄。 如果希望子进程连接到特定的继承桌面,必须确保唯一的所需句柄被标记为可继承。 如果子进程继承多个桌面句柄,则未定义桌面连接的结果。

将进程连接到桌面时系统打开的桌面句柄不可继承。

进程连接到窗口工作站