視窗站

系統會自動創建互動式視窗站。 當一個互動式的用戶登錄時,系統會將互動式視窗站和用戶的登錄會話相關聯。 系統還將為互動式視窗站創建默認輸入桌面。

一個視窗站是一個安全對象,其中包含一個剪貼簿,一系列的全局原子以及一組桌面對象。分配給一個互動式用戶登入會話的互動式視窗站還包含鍵盤,滑鼠和顯示設備。互動式的視窗站對用戶可見並且能接受來自用戶的輸入。所有其它的視窗站對用戶都是非互動的,這意味著它們對用戶不可見,也不能接受用戶輸入。
桌面:
桌面是包含在視窗站中的安全對象,一個桌面有一個邏輯顯示表面並且包含著視窗,選單和鉤子;一個windows的視窗站能有多個桌面,僅有可互動的視窗站的桌面能被顯示以及接受用戶輸入。在一個可互動的視窗站上,同一時刻僅有一個活動桌面。活動桌面也被稱為輸入桌面,是當前顯示給用戶並接受用戶輸入的桌面。應用程式能夠使用OpenInputDesktop函式來獲得輸入桌面都句柄;具有一定訪問許可權都應用程式,還能夠使用SwitchDesktop函式來指定一個不同的輸入桌面;
互動式服務:
互動式服務是一個能和輸入桌面(活動桌面)互動的服務。其它的桌面不能夠接收用戶的輸入。
互動服務必須運行在 LocalSystem 帳戶的上下文中,進行配置後以互動方式運行。在調用CreateService函式時指定dwServeceType參數為SERVICE_INTERACTIVE_PROCESS旗標,服務就能夠被配置為以互動的方式運行。但是,下面的註冊表項包含一個的值NoInteractiveServices,用於控制該 SERVICE_INTERACTIVE_PROCESS 標誌的影響:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
NoInteractiveServices的默認值為0,意味著有SERVICE_INTERACTIVE_PROCESS標誌的服務能以互動的方式運行。當 NoInteractiveServices 值設定為非零值時,在那之後啟動的服務,無論它是否設定了SERVICE_INTERACTIVE_PROCESS,都不能以互動都方式運行;
視窗站和桌面都創建:
系統會自動創建互動式視窗站。 當一個互動式的用戶登錄時,系統會將互動式視窗站和用戶的登錄會話相關聯。 系統還將為互動式視窗站創建默認輸入桌面。
當一個非互動都進程,如win32服務嘗試連線到一個win32(系統)並且進程的登入會話中並沒有視窗站存在時,Win32 會嘗試為會話創建一個視窗站和桌面。 創建的視窗站的名稱基於該登錄會話標識符並且桌面被命名為"default"。視窗站和桌面的自由訪問列表DACL允許服務的用戶賬戶擁有如下存取許可權:
WindowStation: WINSTA_READATTRIBUTES | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS | STANDARD_RIGHTS_REQUIRED
Desktop: DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU | DESKTOP_HOOKCONTROL | DESKTOP_ENUMERATE | STANDARD_RIGHTS_REQUIRED
一個進程能使用CreateWIndowStation函式來創建一個新的視窗站,並調用CreateDeskTop函式創建一個新的桌面;
進程和視窗站的連線:
當一個進程第一次調用USER32或GDI32的函式(其它的視窗站或桌面函式),必須轉到win32服務時,進程能夠與視窗站和桌面自動的產生一個連線。Wiin32服務依據下面的規則來判斷視窗站應該和那一個進程連線:
如果進程調用了SetProcessWindowStation函式,它就和函式指定的視窗站連線。
如果進程並沒有調用SetProcessWindowStation函式,它就和從父進程繼承而來的視窗站連線。
如果進程沒有調用SetProcessWindowStation函式,也沒有繼承到視窗站,那么win32服務嘗試打開MAXIMUM_ALLOWED許可權並按如下方式連線一個視窗站:
當創建進程時,如果一個視窗站的名稱在STARTUPINFO結構的lpDeskTop成員中被指定並傳遞給CreateProcess函式,那么進程就和指定的視窗站連線。否則,如果這個進程在一個互動式用戶的登入會話中運行,進程就和互動式視窗站連線。
如果進程運行在一個非互動的登入會話中,視窗站命名形式基於登入會話標識並嘗試去打開視窗站,如果打開失敗是因為這個視窗站不存在,那么win32嘗試去創建一個視窗站和一個默認的桌面;
與視窗站(WindowStation)相關API函式:
CreateWindowStation,openwindowstation,CloseWindowStation,GetProcessWindowStation,
SetProcessWindowStation,EnumWindowStationProc,EnumWindowStations
桌面(Desktop)相關API函式:
CreateDesktop,OpenDesktop,OpenInputDesktop,SwitchDesktop,CloseDesktop,GetThreadDesktop,SetThreadDesktop,EnumDesktopProc,EnumDesktops,EnumDesktopWindows

相關詞條

相關搜尋

熱門詞條

聯絡我們