轉(zhuǎn)載請(qǐng)注明出處http://www.shnenglu.com/dawnbreak/
Sessions, Desktops and Windows Stations
session是由代表單個(gè)用戶登錄會(huì)話的所有進(jìn)程和系統(tǒng)對(duì)象組成的。其中的對(duì)象包括所有的窗口,桌面和windows stations。桌面是特定session頁(yè)的內(nèi)存池并且被加載到內(nèi)核存儲(chǔ)區(qū)。這個(gè)區(qū)域正是session私有的GUI對(duì)象的存儲(chǔ)區(qū)域。windows station基本上可以被描述為包含桌面和進(jìn)程的安全邊界。因此,一個(gè)session可以包含多個(gè)windows station,而每個(gè)windows station又可擁有多個(gè)桌面
只有被稱為 winsta0 的windows station才被允許與用戶交互。在winsta0下共被載入三個(gè)桌面:winlogon(登陸界面),缺省桌面(用戶桌面),和Disconnect( ? )。它們?nèi)齻€(gè)都有各自的顯存,這就是為什么當(dāng)你鎖定工作站時(shí)你的主桌面會(huì)消失。當(dāng)你鎖定工作站時(shí),屏幕由用戶桌面切換到登錄界面,并且兩者之間并沒(méi)有交互。在windows vista這一點(diǎn)更是體現(xiàn)的淋漓盡致。例如當(dāng)你看到UAC彈出時(shí),系統(tǒng)會(huì)將用戶桌面的快照降低灰度,而在前端顯示UAC窗口,UAC窗口是安全桌面(vista系統(tǒng)的新特性類似登錄桌面)并且在你給予權(quán)限之前禁止你與用戶桌面的交互。
其他windows station存在但并不與用戶交互。例如:加載到‘service-0x0-3e7$’無(wú)用戶交互windows station中的服務(wù)。另外也有些需要與用戶交互的服務(wù)被加載到winsta0。
內(nèi)存頁(yè)是被所有用戶所共享的,但是每個(gè)用戶會(huì)將其各自的session空間映射到虛擬內(nèi)存。session空間被劃分到四個(gè)不同的區(qū)域:
- session 結(jié)構(gòu)存儲(chǔ)區(qū)-內(nèi)存控制器結(jié)構(gòu),其中包含session工作集
- session映像存儲(chǔ)區(qū)-保留一塊私有的win32k.sys修改過(guò)的數(shù)據(jù),一個(gè)sin32k,sys代碼副本和原始數(shù)據(jù)副本,還有各種驅(qū)動(dòng)
- session視圖存儲(chǔ)區(qū)-包括桌面堆在內(nèi)的session映射視圖
- session分頁(yè)存儲(chǔ)區(qū)-用于這個(gè)session被分頁(yè)了的內(nèi)存池
正如前文所提到的,一個(gè)桌面正是被加載了顯示信息的內(nèi)核對(duì)象。其中包括窗口,菜單,還有鉤子。session0是一個(gè)基礎(chǔ)session,服務(wù)在其中運(yùn)行,并且一般情況下也是控制臺(tái)session。在windows Vista中session0僅僅用來(lái)運(yùn)行服務(wù),而控制臺(tái)session一般在session1。下圖顯示了各自的關(guān)系,并且對(duì)比了vista和早期操作的區(qū)別。(來(lái)自 our earlier post on Session 0 Application Compatibility Issues)
 Session 0 in Windows XP / Windows Server 2003 |
 Session 0 / Session 1 in Windows Vista |
未完,待續(xù)。。。。。