1. 程式人生 > >Sessions, Desktops and Windows Stations

Sessions, Desktops and Windows Stations

session是由代表單個使用者登入會話的所有程序和系統物件組成的。其中的物件包括所有的視窗,桌面和windows stations。桌面是特定session頁的記憶體池並且被載入到核心儲存區。這個區域正是session私有的GUI物件的儲存區域。windows station基本上可以被描述為包含桌面和程序的安全邊界。因此,一個session可以包含多個windows station,而每個windows station又可擁有多個桌面。

只有被稱為 winsta0 的windowsstation才被允許與使用者互動。在winsta0下共被載入三個桌面:winlogon(登陸介面),預設桌面(使用者桌面),和Disconnect( ? )。它們三個都有各自的視訊記憶體,這就是為什麼當你鎖定工作站時你的主桌面會消失。當你鎖定工作站時,螢幕由使用者桌面切換到登入介面,並且兩者之間並沒有互動。在windows vista這一點更是體現的淋漓盡致。例如當你看到UAC彈出時,系統會將使用者桌面的快照降低灰度,而在前端顯示UAC視窗,UAC視窗是安全桌面(vista系統的新特性類似登入桌面)並且在你給予許可權之前禁止你與使用者桌面的互動。

其他windows station存在但並不與使用者互動。例如:載入到‘service-0x0-3e7$’無使用者互動windows station中的服務。另外也有些需要與使用者互動的服務被載入到winsta0。

記憶體頁是被所有使用者所共享的,但是每個使用者會將其各自的session空間對映到虛擬記憶體。session空間被劃分到四個不同的區域:

session 結構儲存區-記憶體控制器結構,其中包含session工作集

session映像儲存區-保留一塊私有的win32k.sys修改過的資料,一個sin32k,sys程式碼副本和原始資料副本,還有各種驅動

session檢視儲存區-包括桌面堆在內的session對映檢視

session分頁儲存區-用於這個session被分頁了的記憶體池

        正如前文所提到的,一個桌面正是被載入了顯示資訊的核心物件。其中包括視窗,選單,還有鉤子。session0是一個基礎session,服務在其中執行,並且一般情況下也是控制檯session。在windows Vista中session0僅僅用來執行服務,而控制檯session一般在session1。