在微軟工作最有吸引力的地方是能夠融入微軟的大家庭中並觸摸到方方面面的技術和產品微軟的產品線遍布軟件技術的各個方向真正稱得上軟件帝國對於軟件技術人員這是極好的機會來滿足自己的求知欲並領略各種先進的軟件產品是如何誕生的
我有幸加入微軟亞洲研究院並從事自己喜歡的系統技術研究工作最近兩年在機緣巧合之下選擇Windows內核原理作為寫作題目最終完成了一本講述Windows內核技術的學習用書——《Windows內核原理與實現》(電子工業出版社年月)封面如下圖所示
神秘的Windows內核
在外界看來Windows操作系統的核心是極其神秘的微軟官方的書籍大多停留於API層面但業界卻爆出了不少關於Windows內核的各種訊息包括一些冠名為Undocumented Xxx的書籍和文章事實上微軟對於操作系統技術並不封閉也沒有刻意遮掩什麼關於Windows操作系統的核心技術MSDN中有不少文章涉及底層實現細節而且微軟公開的符號服務更是直接暴露了各個系統模塊中的符號信息對於逆向工程愛好者而言這無疑是一份極好的禮物
有兩件事情足以說明微軟對Windows操作系統技術的開放心態
() 鼓勵和支持Windows Internals一書多個版本的出版此書不僅披露了讓管理員更好地使用最新版本Windows的細節知識而且也提到了Windows內核中各種機制的工作原理以及一些設計理念可以這樣說凡是看過這本書的技術人員對於Windows內核不會再覺得神秘
() 年月開放了一份內核源代碼——WRK(Windows Research Kernel)WRK本質上是Windows Server SP(和Windows XP x)的內核源代碼就當時而言代表了微軟的最新內核技術微軟公開這份內核源代碼的意圖是學校和科研機構可以用於操作系統的教學和研究除了內核源代碼WRK還包含一些設計文檔學習講義以及內核的執行和調試環境這些設計文檔反映了Windows NT最初的核心團隊是如何設計各個系統組件的今天我們回頭來看這些設計文檔尤其值得學習和深思
我正好有機會翻譯了Windows Internals第版這讓我系統化地學習和認識了Windows操作系統盡管在此之前我對Windows已經非常熟悉可以熟練地編寫各種類型的應用程序也了解Windows內核的許多組件但翻譯這本書的過程讓我重新認識了Windows操作系統從技術人員的角度認真地考慮了Windows系統的設計
至於WRK我在正式發布之前便已拿到並幫助測試了其編譯環境在隨後的幾年中我一直協助研究院的高校關系部門向國內高校推廣和普及WRK的教學與研究這期間結識了不少高校老師和學生最終促使我寫作Windows內核原理一書的緣由也因此而起
在研究項目中深入Windows內核
與產品部門相比在研究院工作的一個優勢是研究員們往往有機會選擇自己感興趣的問題作為研究對象Windows經過十多年的發展已經是一個很成熟的產品了但是Windows內核不見得已臻完美它也仍然在發展和完善其中一個重要的問題是性能Windows Vista之所以飽受批評一個顯著的原因是它的性能未達到用戶的預期而Windows 之所以深受好評部分原因也要歸於它良好的性能表現
我最初從應用程序角度來看待性能問題依據我自己的體驗有些應用程序時常會發生一些奇怪的事情比如即使系統很空閒時它們可能也非常慢對用戶的響應並非如預期的那樣快捷當我碰到這樣情況時常常想要是能鑽到系統裡邊看看系統到底在干什麼是否就能立即查明原因呢這促使我想到在內核中記錄一些關鍵事件利用這些事件信息來診斷應用程序的問題最終的根源可能在應用程序也可能在操作系統中這是很原始的想法後來進一步的研究和實踐表明這是可行的在研究過程中還解決過身邊同事們的一些實際問題
在研究Windows性能的過程中恰逢Windows Vista和Windows 兩個系統的發布我有機會跟Windows產品部門的同事交流關於性能問題的看法和各種做法此外微軟亞洲工程院有一個小組一直在分析Windows的各種實際性能問題這為我們的研究工作提供了實例支撐以及應用基礎因此這一研究項目得到了多個部門的支持
在實施這一研究項目過程中我積累起了關於Windows內核的知識雖然無法通曉Windows內核的方方面面但對於Windows系統的運行過程有了較為清晰和完整的理解在解析一些實例時也常常會觸及到Windows的源代碼因而弄清楚了 Windows系統的一些實現細節
寫一本介紹Windows內核原理的書
年月我注意到盡管WRK已經發布快兩年了並且高校關系部門組織國內高校的一些老師設計了多個課程實驗但很多老師和學生反映通過WRK來學習Windows仍然很困難最主要的原因是缺少導讀性質的資料WRK提供的講義並不能有效地指導閱讀內核源代碼我有在研究項目上積累的經驗知道Windows的內核源代碼其實可讀性非常好只不過Windows內核中各種機制本身較為復雜從而容易在閱讀過程中迷失方向而且Windows操作系統中不可避免地涉及到大量異步機制導致許多單個功能的實現代碼分布在多個地方顯得不是那麼一目了然
在~年間我參與了國內操作系統老師設計WRK實驗的全過程深切地知道老師和學生們在使用WRK時碰到的諸多困難也一直希望有人能基於WRK來寫一些指導書到年月份我卸下了清華大學理論計算中心的一門課程便打算自己動手寫這樣一本指導學習WRK的書經過簡單策劃以及跟出版社協商很快便定下書名和內容要點Windows內核原理與實現基於WRK來系統化地闡釋Windows內核中的核心機制同時兼顧系統的完整性
隨後便是一年多的奮筆疾書幾乎每個夜晚都沉浸在Windows的內核機制中在我的電腦上總是打開著以下程序Word(寫正文)Source Insight(檢查和閱讀源代碼)Virtual PC(虛擬機環境我常常運行Windows Server 和Windows XP)WinDbg(內核調試器)Cmd(命令窗口)Notepad(記事本)等原定計劃是花年時間完成一本頁左右的書期望能在年秋季上市實際上花了年半時間完成了將近頁的篇幅從內容廣度和深度上基本上達到了預期的目標
寫作的過程也是學習的過程期間克服了大量的技術障礙常常為Windows內核中的精妙機制深深地吸引Windows好比是眾多能工巧匠協同努力不斷改進而完成的駭世之作我有幸能解剖這一偉大作品還有什麼比這更值得投入去做的呢這種信念一直支撐著我絲毫不敢懈怠直至完成所有預定要寫的內容
我盡可能從與讀者同等的角度來敘述Windows內核中的機制雖然我能夠訪問Windows完整的源代碼包括Windows子系統以及Windows系統dll等模塊的代碼但我仍然盡量從WRK中獲取知識只有不得已才參考Windows的產品代碼偶爾為了驗證一些說法我也會看一看逆向工程得到的代碼我秉持的一個原則是凡是在書中講到的內容微軟之外的任何一個人只要有耐心不管使用什麼樣的方法同樣可以獲得這些知識這本書的目標是讓讀者可以快速地理解Windows內核如何實現操作系統的核心組成部分有些內容雖然是第一次描述成文但實際上任何人透過WRK的源代碼都可以獲得這些知識
新書發布
在月日的WinCore 會議(Workshop)上主持人John Warren為《Windows內核原理與實現》這本書留了分鐘時間舉行了一個小小的發布儀式盡管有/左右的聽眾看不懂中文但因為有Dave ProbertArkady Retik和Lolan Song等專家和領導的支持與捧場現場頗為熱烈我有些緊張原計劃在台上當面向微軟的同事們表示感謝一緊張就忘了下來後就不好意思再上去好在書中的致謝部分已經書面表達了謝意
下面的照片是WinCore 現場主持人在問我幾個關於這本書的問題
由於電子工業出版社的大力支持這本書趕在年五一前夕上市了我在第一時間拿到了樣書並且從互動網購買了一批(本)以贈送親朋好友
最後我想表達自己的一點感受很幸運有機會寫這樣一本書讓Windows內核徹底不再神秘總結起來我得到了天時地利人和三方面的關照
天時 —— WRK的發布
地利 —— 在微軟工作
人和 —— 得到產品部門和高校關系部門的鼎力支持
From:http://tw.wingwit.com/Article/os/xtgl/201311/9023.html