



   与Linux作为一套自由开发的类UNIX操作系统不同,Windows内核代码长期以来为微软所控制,始终保持云遮雾罩的神秘感。尽管在2006年微软针对教学和科研的目的,开放了Windows内核的部分源码WRK(Windows Research Kernel),但是由于知识产权的问题,并不能摆在台面上来讲,有关这方面的原因,在毛德操老师所著的《Windows内核情景分析——采用开源代码ReactOS》中讲过。为此,笔者在本书中为求系统架构、程序流程设计的完整性,同时保证代码的高质量,经历了数次重构,其中第一次设计使用的就是WRK代码,因为这是最正统的Windows代码,只是代码不能大幅度引用,造成了完整性的缺失,而本书要求能完整编译的开源代码,如果不这样,会影响读者的理解,于是放弃。笔者随后想到了ReactOS开源项目,但是ReactOS源码偏多,于是在第二次设计中使用的是WRK和ReactOS代码的结合,即使用ReactOS代码去填充WRK的不完整部分,这种方法虽然保证了代码的完整性,但是由于代码的风格和设计不同,使得代码整体变得杂乱,因此这种方案也不可取。最终笔者抛弃了WRK,采用完整的ReactOS代码(经过部分修改),虽然与正统的WRK代码不同,但是原理是一样的,而且表达很简洁,完全保留了Windows内核设计的中心思想,更有利于读者的学习。为了照顾部分读者学习WRK,笔者在MBR处提供了切换回WRK的系统编译选项,有关WRK的更多知识,请参考潘爱民老师所著《Windows内核原理与实现》。
无论使用的是什么样的代码方式,本书都保证了理论上的正确性,大多数的理论都经过了笔者的调试验证,而笔者也将在本书中向读者一步步展示自己对这些理论的理解和验证过程,集理论、架构、编码、运行和调试于一体进行讲解,多角度全方位体现一个操作系统内核的完整设计过程。
Windows内核的源码是相当多的,单就一本书是不可能完全讲解完的,笔者也自认为还没有足够的能力去全部讲解。但重要的不是量多,而是质量上乘,精炼,笔者本着确保读者能在Windows内核设计上形成一条清晰主线的目的,精选了内核设计上最重要的代码片段供读者学习。笔者认为,只要读者认真理解了这些代码片段,想要再深入学习别的部分就基本不成问题了,无论你是做Win32应用程序编程的,还是做内核驱动编程的,都已经有足够的思路去设计你的代码,写自己的东西,而且一旦出现问题,也有足够的能力去找到解决问题的方法。
在本书代码的设计中,笔者本人也按照Windows内核原理写过不少代码,但最终还是决定不收纳在本书中。原因是本书的用意是讲解Windows设计的核心原理,应该力求让读者掌握Windows设计最本质的东西,而不被其他繁杂的细节所影响。当读者认真读完这本书之后,相信也会有像笔者一样的冲动,想要根据自己的想法在功能不变的基础上去设计自己的代码片段,自由构架操作系统。
如果读者在学习过程中遇到问题,可以登录网站book.yetingyu.com获得更多的知识。
郑少华,华南师范大学计算机学院研究生,参与了本书部分章节的编写,处理了全部书稿的文字错误,并进行了代码的整理、编译、链接和调试验证。
谭添升,微软公司程序员,在本书第6章的设计和编写过程中,给予了不少建议并修改了不少问题。
邓志,《x86/64体系探索及编程》和《处理器虚拟化技术》的作者,修正了本书第2章中的不少问题并为本书作序推荐。
谭文,《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》的作者,为本书作序推荐。
李冰,本书的策划编辑,对于笔者的写作给予了充分认可和支持,她富有主见,决策果断,参与了本书的命名。
白涛,本书的技术编辑,处理问题非常细致,认真修改了书中的多处错误,并且把本书流程整理得有条不紊。
黄爱萍,电子工业出版社博文视点编辑,在本书写作过程中非常耐心地解答笔者提出的问题,并给予鼓励。
    陈树宝
    
    2015年1月14日