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