1. 程式人生 > >對Windows10虛擬桌面的簡單研究

對Windows10虛擬桌面的簡單研究



汗啊,逆向Windows可不是容易的事,對於我來說就更難了。。

所以,我就用一些工具和豐富的Windows軟體開發經驗來簡單滴研究一下Windows10沸沸揚揚的"虛擬桌面"

其實大家都知道,虛擬桌面其實在很早就有了,市面上就有一些虛擬桌面軟體,我也有偶然得到了一款虛擬桌面的原始碼,這些虛擬桌面軟體其實都是呼叫了一個叫CreateDesktop(Ex)的API而已,所以我就以為Windows10虛擬桌面也就是呼叫了一下這個API而已,但是又很奇怪,畢竟Windows10虛擬桌面可以讓視窗隨意切換桌面,但是根據微軟的規定,一直以來都是“如果一個執行緒沒有UI,那麼他可以通過API修改自己所屬於的桌面,如果執行緒有UI,那麼他不能切換桌面”,難道Windows10要打破這一規則麼,那為何MSDN上沒有說明呢?這裡面又有什麼不為人知的隱祕呢?

昨天裝了一天的虛擬機器,操蛋,太操蛋,裝了4次。。。第一次裝個2000練練手,裝好了就刪了,第二次,用virtualbox裝w10,結果裝完工具重啟一下說驅動程式簽名錯誤,還不能修復,高階啟動(因為裡面有禁用強制簽名)還點不動,於是果斷卸掉virtualbox,改裝vmware,還是vmware好用啊,就像windows比linux好用一樣,開源的東西經常出一些問題,vmware估計給買了權威CA的簽名了,所以不會出現驅動簽名的問題,好吧,結果今天我又把w10玩壞了,開始選單點不動了,重啟也不行(不愧是預覽版),沒辦法,今天重灌。。。我可憐的硬碟,我可憐的cpu。。。

先看看我的用的w10吧,應該是10074.。不是很新,不過沒辦法。。更新卡住0%不動彈。。

開始測試:

首先,建立一個“Win10虛擬桌面”,然後執行我寫的一個工具(目前只是半成品),他能列舉桌面,但是發現當前只有一個桌面(預設桌面)

然後執行一個虛擬桌面軟體,同時建立一個桌面:

隨後仔使用我寫工具列舉桌面:

發現多了一個桌面!!!這意味著。。

結論1:win10虛擬桌面和windows桌面機制無關,同時win10上的桌面機制和依舊可以正常工作,也就是說win10虛擬桌面是採用了其他辦法在一個桌面上實現的。

我在這裡猜測:是不是shell或者init在當前桌面建立了很多“子桌面”,不同的視窗可以隨時使用setwindowlong設定父視窗實現,但是一想又不對,還是讓spy++來看看吧

(win10UAC的盾牌變得好難看。。)

果然沒有任何端倪,和其他windows一樣。

把spy++放到其他的“win10虛擬桌面”,發現視窗沒有變!!

於是我乾脆監控訊息,發現切換到視窗所在桌面時視窗響應了幾個偏門的訊息

結論2:win10虛擬桌面有可能是通過視窗訊息實現的,視窗切換到其他桌面時,視窗的一切沒有改變,包括座標,是否隱藏等等。

在首先在win10的一個win10桌面隱藏視窗,在另一個桌面顯示,發現視窗顯示到了這個桌面。

然後我執行我做的後臺軟體,發現命令後臺軟體建立其他程序時視窗顯示在當前桌面。

結論3:後臺程式建立視窗,建立程序,或者把隱藏的視窗顯示出來,都在當前win10桌面。

然後裝了一個360,發現360的加速球(看右下角)可以不受win10桌面機制的影響,切換桌面依舊有!大家都應該知道這是個總在最前工具視窗

然後我自己寫了一個工具視窗
CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,。。。。
即建立一個WS_EX_TOOLWINDOW(工具視窗)WS_EX_TOPMOST(總在最前)的視窗

發現和360的加速球一樣。

結論4:總在最前的工具視窗不受win10虛擬桌面影響,如果我們要給使用者發一個通知,應該用總在最前的工具視窗。

暫時就這麼多,等win10正式版釋出了再研究。