處理視窗月臺的連線
程式會在第一次呼叫 USER32 或 GDI32 函式時,自動建立與視窗月臺和桌上型電腦連線的連線, (視窗月臺和桌面函式) 。 系統會根據下列規則決定進程所連線到的視窗月臺:
- 如果進程已呼叫 SetProcessWindowStation 函式,它會連接到該呼叫中指定的視窗月臺。
- 如果進程未呼叫 SetProcessWindowStation,它會連接到繼承自父進程的視窗月臺。
- 如果進程未呼叫 SetProcessWindowStation 且未繼承視窗月臺,系統會嘗試開啟以進行MAXIMUM_ALLOWED存取,並聯機到視窗月臺,如下所示:
- 如果在建立進程時所使用的STARTUPINFO結構的lpDesktop成員中指定了視窗月臺名稱,進程就會連接到指定的視窗月臺。
- 否則,如果進程正在互動式使用者的登入會話中執行,進程就會連線到互動式視窗月臺。
- 如果進程在非互動式登入會話中執行,則會根據登入會話識別碼形成視窗月臺名稱,並嘗試開啟該視窗月臺。 如果開啟作業失敗,因為此視窗月臺不存在,系統會嘗試建立視窗月臺和預設桌面。
呼叫 CloseWindowStation 函式,無法關閉此連線程式期間指派的視窗月臺。
當進程連接到視窗月臺時,系統會搜尋進程的控制碼資料表中是否有繼承的控制碼。 系統會使用找到的第一個視窗月臺控制碼。 如果您想要讓子進程連接到特定的繼承視窗月臺,您必須確定只有所需的控制碼標示為可繼承。 如果子進程繼承多個視窗月臺控制碼,則未定義視窗月臺連接的結果。
將進程連接到視窗月臺時,系統開啟的視窗月臺控制碼無法繼承。
相關主題