處理視窗月臺的連線

程式會在第一次呼叫 USER32 或 GDI32 函式時,自動建立視窗月臺和桌面的連線 (,而不是視窗月臺和桌面函式) 。 系統會根據下列規則決定進程所連線到的視窗月臺:

  1. 如果進程已呼叫 SetProcessWindowStation 函式,它會連接到該呼叫中指定的視窗月臺。
  2. 如果進程未呼叫 SetProcessWindowStation,它會連接到繼承自父進程的視窗月臺。
  3. 如果進程未呼叫 SetProcessWindowStation 且未繼承視窗月臺,系統會嘗試開啟以進行MAXIMUM_ALLOWED存取,並聯機到視窗月臺,如下所示:
    • 如果在建立進程時所使用的STARTUPINFO結構的lpDesktop成員中指定了視窗月臺名稱,進程就會連接到指定的視窗月臺。
    • 否則,如果進程是在互動式使用者的登入會話中執行,進程就會連線到互動式視窗月臺。
    • 如果進程是在非互動式登入會話中執行,則會根據登入會話識別碼形成視窗月臺名稱,並嘗試開啟該視窗月臺。 如果開啟作業失敗,因為此視窗月臺不存在,系統會嘗試建立視窗月臺和預設桌面。

呼叫 CloseWindowStation 函式,無法關閉在此連線過程中指派的視窗月臺。

當進程連接到視窗月臺時,系統會搜尋進程的控制碼資料表中是否有繼承的控制碼。 系統會使用它找到的第一個視窗月臺控制碼。 如果您想要子進程連接到特定繼承的視窗月臺,您必須確定只有所需的控制碼標示為可繼承。 如果子進程繼承多個視窗月臺控制碼,則未定義視窗月臺連線的結果。

將進程連接到視窗月臺時,系統開啟的視窗月臺控制碼不可繼承。

桌面的執行緒連線