电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

掀开Windows内核的神秘面纱


发布日期:2022/12/7
 

在微软工作最有吸引力的地方是能够融入微软的大家庭中并触摸到方方面面的技术和产品微软的产品线遍布软件技术的各个方向真正称得上软件帝国对于软件技术人员这是极好的机会来满足自己的求知欲并领略各种先进的软件产品是如何诞生的

我有幸加入微软亚洲研究院并从事自己喜欢的系统技术研究工作最近两年在机缘巧合之下选择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的发布

地利 —— 在微软工作

人和 —— 得到产品部门和高校关系部门的鼎力支持

上一篇:做有计划的系统才能让机器流畅运行起来

下一篇:教你用注册表找回常用软件序列号