与桌面的线程连接

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

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

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

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

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

处理与窗口工作站的连接