進程連接到視窗月臺之後,系統會將桌面指派給進行連線的線程。 系統會根據下列規則決定要指派給線程的桌面:
- 如果線程已呼叫 SetThreadDesktop 函式,它會連線到指定的桌面。
- 如果線程未呼叫 SetThreadDesktop,它會連線到繼承自父進程的桌面。
- 如果線程未呼叫 SetThreadDesktop 且未繼承桌面,系統會嘗試開啟以MAXIMUM_ALLOWED存取並連線到桌面,如下所示:
- 如果在建立進程時所使用的 STARTUPINFO 結構 lpDesktop 成員中指定桌面名稱,線程就會連線到指定的桌面。
- 否則,線程會連接到進程所連線之視窗月臺的預設桌面。
呼叫 closeDesktop 函式,無法關閉此連線程式期間指派的桌面。
當進程連線到桌面時,系統會搜尋進程的句柄數據表中是否有繼承的句柄。 系統會使用它找到的第一個桌面句柄。 如果您想要讓子進程連線到特定的繼承桌面,您必須確定唯一想要的句柄標示為可繼承。 如果子進程繼承多個桌面句柄,則未定義桌面連線的結果。
將進程連接到桌面時,系統開啟的桌面句柄無法繼承。
相關主題