由于不是搞安全的,對(duì)這塊的東西一直不是很清楚,今天特意整理下。
總的來(lái)說(shuō),他們的關(guān)系如下:

我們知道Windows是支持多用戶的,Session可以理解為每個(gè)用戶登錄,比如當(dāng)前登錄和遠(yuǎn)程登陸。
Window Stations可以理解為登陸后的不同用戶組,我們?cè)谌蝿?wù)管理器中可以看到不同的用戶名(比如 Richard, system, local service等),其中只有一個(gè)活動(dòng)Station WinSta0, 只有這個(gè)Station是接受用戶鼠標(biāo)鍵盤(pán)輸入的。而WinSta0 Station 又包括3個(gè)Desktop(包括Winlogon, Disconnect, Default), 其中Winlogon指的是登陸Desktop,當(dāng)我們按Ctrl+Alt+Del時(shí)就會(huì)進(jìn)入該Desktop;Disconnect指的是屏保Desktop; Default指的就是我們平時(shí)有任務(wù)欄的Desktop, 當(dāng)然真正的Default Desktop是沒(méi)有應(yīng)用程序的在上面的,我們看到的桌面其實(shí)是啟動(dòng)Shell Explorer后的界面。
總結(jié)幾點(diǎn)和我們平時(shí)寫(xiě)程序有關(guān)的:
(1)我們平時(shí)通過(guò)GetDesktopWindow()得到的桌面句柄, 是Csrss.exe創(chuàng)建的一個(gè)窗口,它被放在WinStation內(nèi)的Desktop內(nèi).
而我們通過(guò)Win+D看到的桌面, 其實(shí)是Expolore.exe創(chuàng)建的一個(gè)Pop up窗口, 它和我們普通的pop up 窗口一樣, Owner是GetDesktopWindow()
(2)我們可以通過(guò)CreateDesktop, OpenDesktop, SwitchDesktop等API創(chuàng)建和切換Desktop。
(3)我們平時(shí)寫(xiě)服務(wù)程序時(shí)發(fā)現(xiàn)窗口彈不出來(lái), 因?yàn)榉?wù)不是運(yùn)行在Station WinSta0下面. 通過(guò)FindWindow也找不到我們要找的窗口,因?yàn)樗旅鏇](méi)有我們的當(dāng)前WinStation
的Desktop。
(4)一個(gè)window station 對(duì)象包括一個(gè)剪貼板、一個(gè)全局原子集和多個(gè)Desktop對(duì)象, 所以你可以在同一個(gè)一個(gè)window station內(nèi)的多個(gè)Desktop之間通過(guò)剪貼板傳送數(shù)據(jù).
(5)所有的進(jìn)程都和Session, WinStation, Desktop相關(guān)聯(lián),所以我們可以把它表示成這樣一個(gè)路徑: Session 1\WinSta0\Default, 這樣我們也就理解為什么有些API需要我們傳類似這樣的信息.
參考資料:
posted on 2012-05-12 23:37
Richard Wei 閱讀(4501)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
windows desktop