WinRT(Windows Runtime)是微軟新一代在Win8 Metro下開發(fā)框架, 它是一套面向?qū)ο蟆⒖缯Z言并且是Native的庫。
如果有人問我WinRT的核心技術(shù)是什么? 我的答案是 COM + .Net Metadata + Xaml, 這三者可以說是微軟這些年所有技術(shù)的精華。
COM組件技術(shù)一直是微軟在用戶態(tài)的核心技術(shù)之一, 它讓我們可以無縫的以面向?qū)ο蟮姆绞酱罱☉?yīng)用程序,隨著.Net的發(fā)展,我們?cè)?jīng)以為它已逐漸過時(shí),但是在WinRT中,我們看到它又回來了。
.Net Metadata是微軟在 .Net繼承過來的, 通過它描述組件的類層次和接口, 實(shí)現(xiàn)跨語言的調(diào)用。
Xaml是微軟從WPF中繼承過來的, 相對(duì)于傳統(tǒng)GDI窗口和控件, 它的優(yōu)勢(shì)我們就不多說了, 它是微軟下一代界面的表現(xiàn)方式。
對(duì)于Win8 Metro應(yīng)用(現(xiàn)在微軟喜歡把它叫住Windows Store App), 我們一直很好奇Win8的架構(gòu), 它與傳統(tǒng)Win32究竟是什么關(guān)系?
對(duì)于這個(gè)問題, 我們?cè)诰W(wǎng)上一般會(huì)喜歡用這個(gè)圖作為答案:

上面的圖給我們的感覺是WinRT完全不同于傳統(tǒng)的Win32應(yīng)用程序, 是直接基于Windows內(nèi)核的,它和Win32 API是并列的2套開發(fā)框架。
或許是微軟試圖這樣設(shè)計(jì), 所以給了我們這樣一張架構(gòu)圖, 但是后來我們逐漸發(fā)現(xiàn), 實(shí)際情況卻是這樣的:

WinRT不是直接基于Windows內(nèi)核, 而是直接搭建在Win32上的一個(gè)系統(tǒng)級(jí)應(yīng)用, WinRT的下層還是Win32 API。
通過工具, 我們可以看到傳統(tǒng)的Desktop Application和WinRT App是運(yùn)行在同一個(gè)Session, 同一個(gè)Window Station,同一Desktop的, 微軟只是在它們之間的切換作了些限制。
另外,微軟通過新增加一些API(比如NtCreateLowBoxToken)讓Metro App以很低權(quán)限運(yùn)行在Sandbox(App Container)中, 對(duì)于和權(quán)限相關(guān)的API調(diào)用,它會(huì)通過一個(gè)Broker來運(yùn)行。


總之, 一開始我們會(huì)覺得WinRT很好奇, 但是后來我們逐步發(fā)現(xiàn)它其實(shí)并沒有那么神秘, 它是很多微軟現(xiàn)有技術(shù)的合成體。 微軟的技術(shù)更新很多時(shí)候讓人眼花潦蘭,但是底層本質(zhì)的東西(比如COM,D3D,Win32)其實(shí)一直很少改變。
參考資料:
Turning to the past to power Windows' future: An in-depth look at WinRT
注: 上面我們的討論主要集中在x86的上。
對(duì)于ARM版的WinRT, 因?yàn)闆]有傳統(tǒng)Win32的負(fù)擔(dān),所以全部都是重新開發(fā)的, 因此先對(duì)于ARM版的WinRT, 微軟甚至不開放傳統(tǒng)desktok模式下的開發(fā)接口,上面微軟的架構(gòu)圖又是正確的。
posted on 2013-01-13 16:31
Richard Wei 閱讀(8368)
評(píng)論(6) 編輯 收藏 引用 所屬分類:
win8 metro