系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > 那些你不曾了解的WindowStations窗口站

那些你不曾了解的WindowStations窗口站

時(shí)間:2012-10-17 09:27:07 作者:木木 來源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20121015/17407.html 手機(jī)查看 評(píng)論

  WindowStations窗口站?一聽到這個(gè)名詞,很多網(wǎng)民覺得一頭霧水,什么是WindowStations窗口站呢?這是很專業(yè)的名詞嗎?我們不需要了解吧,這是很多網(wǎng)友的第一印象,小編告訴你,非也非也.其實(shí), Window stations 和桌面可能是Windows NT服務(wù)中最與眾不同的了。絕大多數(shù)編程者都不會(huì)直接接觸這兩種對(duì)象,盡管用戶每時(shí)每刻都要碰到它們。window station 和桌面對(duì)象就象其它Windows NT對(duì)象,如事件、互斥量和信號(hào)量一樣,是安全(securable)的。一個(gè)window station 對(duì)象包括一個(gè)剪貼板、一個(gè)全局原子集和更多的桌面對(duì)象。一個(gè)window station或者是可見的或者是不可見的。一個(gè)可見的window station接收用戶來自于鼠標(biāo)或鍵盤的輸入。一個(gè)顯示設(shè)備也與之相連這樣信息可以顯示給交互式用戶。

  在 Windows NT 4.0中,只有一個(gè)window station 能被看得到,就是WinSta0?梢姷膚indow station也被定義成交互式的。一個(gè)不可見的window station是不可交互的,而且也不能接收任何用戶的輸入也沒有顯示設(shè)備與之相連。

  如前所述,桌面包含在window station對(duì)象中。一個(gè)桌面對(duì)象包含一個(gè)邏輯的顯示表面,和窗口、菜單等。只有屬于可見window station的桌面才能被看見并接收用戶的輸入。這個(gè)桌面叫做活動(dòng)桌面。

  作為交互式用戶你在不同的時(shí)候碰到三種不同的桌面:缺省(Default)、 Winlogon和Screen-saver。Winlogon 桌面是當(dāng)你按下Ctrl+Alt+Delete組合鍵時(shí)顯示在你面前的對(duì)話框。缺省(Default)桌面是瀏覽器(Explorer)或者是由交互式用戶啟動(dòng)的所有進(jìn)程。它更應(yīng)當(dāng)被理解成交互式的應(yīng)用程序桌面。最終的桌面是Screen-saver,它顯示你的屏幕saver。你可能已經(jīng)注意到可以在不同的桌面之間切換。當(dāng)一個(gè)用戶按下Ctrl+Alt+Delete組合鍵時(shí),操作系統(tǒng)可以從缺省狀態(tài)切換到Winlogon桌面。當(dāng)你在登錄對(duì)話框中選擇取消,系統(tǒng)將再切換回缺省桌面。有人問我當(dāng)切換進(jìn)行的時(shí)候,是否其它桌面上的東西都被破壞掉了,答案是 "不"。雖然你看不到其它桌面,但它們?nèi)匀辉谀抢铩?/p>

  系統(tǒng)中所有的進(jìn)程都與window station 和桌面相聯(lián)系。當(dāng)一個(gè)用戶第一次登錄時(shí),交互式window station, WinSta0,和缺省桌面都與這個(gè)用戶的Shell進(jìn)程相關(guān)聯(lián)。這樣用戶就能看到shell了,如果不是這樣,用戶是什么也看不到的。而且在這之后,由shell啟動(dòng)的所有進(jìn)程也會(huì)和WinSta0 及缺省桌面相關(guān)聯(lián)。

  你還可以通過STARTUPINFO 數(shù)據(jù)結(jié)構(gòu)的lpDesktop 成員指定你的進(jìn)程同哪個(gè)window station 和桌面相關(guān)聯(lián)。這個(gè)數(shù)據(jù)結(jié)構(gòu)傳遞給CreateProcess 和 CreateProcessAsUser兩個(gè)函數(shù)。你可以將lpDesktop 初始化為NULL,意思是讓CreateProcess函數(shù)使用和調(diào)用進(jìn)程相同的window station 和桌面。你可以將你自己的window station 和桌面組合定義成"WinSta0\Default" 或者就定義成空字符串。這個(gè)參數(shù)會(huì)讓操作系統(tǒng)為啟動(dòng)進(jìn)程創(chuàng)建一個(gè)新的不可見的window station 及桌面。與這兩個(gè)新對(duì)象關(guān)聯(lián)的安全性授予每個(gè)組對(duì)它們的完全訪問權(quán)限。

  typedef struct _STARTUPINFO { // si

  DWORD cb;

  LPTSTR lpReserved;

  LPTSTR lpDesktop;

  LPTSTR lpTitle;

  DWORD dwX;

  DWORD dwY;

  DWORD dwXSize;

  DWORD dwYSize;

  DWORD dwXCountChars;

  DWORD dwYCountChars;

  DWORD dwFillAttribute;

  DWORD dwFlags;

  WORD wShowWindow;

  WORD cbReserved2;

  LPBYTE lpReserved2;

  HANDLE hStdInput;

  HANDLE hStdOutput;

  HANDLE hStdError;

  } STARTUPINFO, *LPSTARTUPINFO;

  Window stations和桌面是具有安全性的對(duì)象。與window station 和桌面將關(guān)聯(lián)的進(jìn)程必須由對(duì)這些對(duì)象的合適的訪問權(quán)限。如果進(jìn)程沒有訪問權(quán),你會(huì)看到這兩個(gè)消息之一"User32.dll initialization failure(User32.dll初始化失敗)" 或 "Kernel32.dll initialization failure.(Kernel32.dll初始化失敗)"。由進(jìn)程返回的退出碼為128 或 ERROR_NO_WAIT_CHILDREN。那么我所指的合適的訪問權(quán)是什么意思呢?假如你有一個(gè)文件這樣的對(duì)象。你可以為這個(gè)文件創(chuàng)建一個(gè)DACL以使用戶具有對(duì)這個(gè)文件的讀訪問權(quán)。Window station 和 桌面是以相同的方式工作的。

  對(duì)于一個(gè)桌面對(duì)象的一個(gè)訪問權(quán)限叫做DESKTOP_CREATEWINDOW。如果用戶沒有被授予這個(gè)訪問權(quán)限,任何由這個(gè)用戶啟動(dòng)的進(jìn)程都不能創(chuàng)建窗口。不幸的是, 象CreateWindow 這樣的USER APIs 在發(fā)生同CreateFile 或 CreateMutex API類似的安全問題時(shí),不會(huì)返回 "Access Denied(訪問被拒絕)" 消息。User32.dll 中的Windows 應(yīng)用程序?qū)?huì)被終止,導(dǎo)致DLL初始化錯(cuò)誤的消息。Kernel32.dll 初始化過程是在創(chuàng)建一個(gè)控制板窗口時(shí)發(fā)生的。一個(gè)例程在沒有對(duì)window station和桌面的合適的訪問權(quán)限的時(shí)候啟動(dòng)cmd.exe。然而不幸的是, CreateProcess 沒有任何機(jī)制來檢查這個(gè)錯(cuò)誤。當(dāng)用戶不具有對(duì)window station和桌面的合適訪問權(quán)限時(shí),它并不返回一個(gè)錯(cuò)誤信息。CreateProcess將會(huì)啟動(dòng)這個(gè)應(yīng)用程序,然后這個(gè)應(yīng)用程序本身在DLL失敗后終止。

  編程人員還可以有一種方法越過"User32.dll initialization failure(User32.dll初始化失敗"消息。系統(tǒng)有一個(gè)堆用來為window station分配內(nèi)存。內(nèi)存是有限的。缺省設(shè)置允許創(chuàng)建七個(gè)或八個(gè)window station對(duì)象。如果你用光了所有的內(nèi)存,你就會(huì)看到這個(gè)消息。不過,值得慶幸的是,有一個(gè)注冊(cè)表關(guān)鍵字可以用來增加這個(gè)設(shè)置。 (參見Knowledge Base article Q142676)

  如果你沒在開發(fā)服務(wù)而只是普通的應(yīng)用程序,Window stations 和桌面就不是真正的問題。你的應(yīng)用程序只同交互式桌面WinSta0\Default 相關(guān)聯(lián)。如果你是在開發(fā)一個(gè)服務(wù),那么它可能就會(huì)同下面的window station 及桌面組合關(guān)聯(lián):

  WinSta0\Default

  Service-0x0-3e7$\Default

  Service Account's Logon SID\Default

  WinSta0\Default 同運(yùn)行在LocalSystem帳戶的,并且與桌面交互的服務(wù)關(guān)聯(lián) 。 (在ServiceType必須指明SERVICE_INTERACTIVE_PROCESS標(biāo)志)。如果服務(wù)不同桌面交互,那么它是與Service-0x0-3e7$\Default相關(guān)聯(lián)的。這是個(gè)不可見的window station。你一定很疑惑這亂七八糟的0x0-3e7$ 是什么,它是服務(wù)的登錄SID 。登錄SID是獨(dú)一無二的。它指的是用戶所屬的組。系統(tǒng)中的所有用戶都會(huì)有一個(gè)登錄SID。

發(fā)表評(píng)論

0

沒有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

其他版本軟件

人氣教程排行

XP系統(tǒng)推薦

官方交流群 軟件收錄