本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内部工作细节。本书针对Windows Server 2003、Windows XP和Windows 2000做了全面更新,通过许多练习实验让你直接感受到Windows的内部行为。另外,本书还介绍了一些高级诊断技术,以便使你的系统运行得更加平稳和高效。无论你是开发人员还是系统管理员,你都可以在本书中找到一些关键的、有关体系结构方面的知识,通过这些知识你可以更好地做系统设计、调试,以及性能优化。\r\n全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试器和其他的工具来检查内部系统结构;检查与进程、线程和作业相关的数据结构和算法;观察Windows如何管理虚拟内存和物理内存;理解NTFS的操作和格式,诊断文件系统访问问题;从上往下查看Windows的网络栈,包括映射、API、名称解析和协议驱动程序;诊断引导问题,执行崩溃分析。\r\n本书适合广大Windows平台开发人员、IT专业从业人员等参考使用。\r\n
第1章 概念和工具 \r\n 1.1 Windows操作系统的版本 \r\n 1.2 基础概念和术语 \r\n 1.3 挖掘Windows内部机理\r\n 1.4 本章总结 \r\n第2章 系统结构 \r\n 2.1 需求和设计目标 \r\n 2.2 操作系统模型 \r\n 2.3 总体结构 \r\n 2.4 关键的系统组件\r\n 2.5 本章总结 \r\n第3章 系统机制 \r\n 3.1 陷阱分发\r\n 3.2 对象管理器 \r\n 3.3 同步 \r\n 3.4 系统辅助线程 \r\n 3.5 Windows全局标志 \r\n 3.6 本地过程调用(LPC) \r\n 3.7 内核事件追踪 \r\n 3.8 Wow64 \r\n 3.9 本章总结 \r\n第4章 管理机制 \r\n 4.1 注册表 \r\n 4.2 服务 \r\n 4.3 Windows管理规范\r\n 4.4 本章总结 \r\n第5章 启动和停机 \r\n 5.1 引导过程\r\n 5.2 引导和启动问题的故障检查\r\n 5.3 停机 \r\n 5.4 本章总结 \r\n第6章 进程、线程和作业 \r\n 6.1 进程的内部机理 \r\n 6.2 CreateProcess的流程\r\n 6.3 线程的内部机理\r\n 6.4 检查线程活动 \r\n 6.5 线程调度 \r\n 6.6 作业对象 \r\n 6.7 本章总结 \r\n第7章 内存管理 \r\n 7.1 内存管理器简介\r\n 7.2 内存管理器提供的服务\r\n 7.3 系统内存池 \r\n 7.4 虚拟地址空间的布局结构\r\n 7.5 地址转译 \r\n 7.6 页面错误处理\r\n 7.7 虚拟地址描述符 \r\n 7.8 内存区对象 \r\n 7.9 工作集 \r\n 7.10 逻辑预取器\r\n 7.11 页面帧编号数据库 \r\n 7.12 本章总结 \r\n第8章 安全性 \r\n 8.1 安全系统组件 \r\n 8.2 保护对象 \r\n 8.3 账户权限和特权\r\n 8.4 安全审计 \r\n 8.5 登录(Logon)\r\n 8.6 软件限制策略 \r\n 8.7 本章总结 \r\n第9章 I/O系统 \r\n 9.1 I/O系统组件\r\n 9.2 设备驱动程序 \r\n 9.3 I/O处理 \r\n 9.4 即插即用(PnP)管理器\r\n 9.5 电源管理器 \r\n 9.6 本章总结 \r\n第10章 存储管理 \r\n 10.1 有关存储的术语 \r\n 10.2 磁盘驱动程序 \r\n 10.3 卷的管理 \r\n 10.4 本章总结 \r\n第11章 缓存管理器 \r\n 11.1 缓存管理器的关键特性\r\n 11.2 缓存的虚拟内存管理 \r\n 11.3 缓存的大小 \r\n 11.4 缓存的数据结构\r\n 11.5 文件系统接口 \r\n 11.6 快速I/O \r\n 11.7 预读(Read Ahead)和滞后写(Write Behind)\r\n 11.8 本章总结 \r\n第12章 文件系统 \r\n 12.1 Windows文件系统格式\r\n 12.2 文件系统驱动程序总体结构\r\n 12.3 诊断文件系统的问题\r\n 12.5 NTFS文件系统驱动程序 \r\n 12.6 NTFS在磁盘上的结构 \r\n 12.7 NTFS的恢复支持\r\n 12.8 加密文件系统(EFS)安全性 \r\n 12.9 本章总结 \r\n第13章 网络 \r\n 13.1 Windows的网络总体结构\r\n 13.2 网络API\r\n 13.3 多重定向器支持\r\n 13.4 名称解析\r\n 13.5 协议驱动程序\r\n 13.6 NDIS驱动程序\r\n 13.7 绑定 \r\n 13.8 分层的网络服务\r\n 13.9 本章总结 \r\n第14章 崩溃转储分析 \r\n 14.1 Windows为什么会崩溃 \r\n 14.2 蓝屏 \r\n 14.3 崩溃转储文件\r\n 14.4 Windows错误报告 \r\n 14.5 在线崩溃分析 \r\n 14.6 基本的崩溃转储分析\r\n 14.7 使用崩溃诊断工具\r\n 14.8 高级的崩溃转储分析 \r\n术语表 \r\n术语对照表 \r\n索引
这是一本随Windows NT一起发展和成长起来的经典图书。我在1995年的时候阅读过这本书的第1版中文版,通过该书了解到了Windows NT设计的诸多考虑。它对于我理解Windows曾经起到了重要的作用。除了这本书以外,另外一套讲述Windows SDK开发指南的图书(记得有四卷)也深刻地影响了我对于Windows的理解。虽然第4版与早期的版本有了很大的变化(原作者也不相同,请参考引言部分关于本书历史的介绍),但由于Windows NT的内核结构一直沿袭下来了,无疑本书新的版本更趋成熟,而且新版作者们编写的许多工具更是使本书增色不少。
时隔10年以后,当编辑找到我,希望我来翻译这本书的第4版时,我的第一感觉是,我不能翻译这本书,所以我直截了当地拒绝了编辑。我的顾虑在于两个方面:首先,这是一本重量级的书,更适合于操作系统领域中的资深专家来把握和诠译;其次,我担心没有足够的时间来及时地完成这本书的翻译工作。两周以后,当编辑再次找到我时,我答应找一个帮手来翻译这本书,但是,合适的帮手并不好找。最后,我决定独立翻译本书,但需要一年时间。而实际上,我花了一年半时间才完成本书的翻译工作。无奈,在质量和进度之间,我选择了前者。
这是一本独特的书,它既不像教材那样宣讲Windows操作系统的原理,也不教读者如何编写内核驱动程序或者如何更好地配置Windows系统。相反地,它按照Windows操作系统的体系结构,把内核几乎翻了个遍,目的在于帮助读者理解Windows内核的每一部分是如何工作的,并且通过各种工具让你真正能够看到Windows内部的数据结构和状态,甚至一些运行过程。阅读这本书的过程,其实也是玩转Windows的过程。经过作者们的剖析,Windows已经完完全全不再神秘。如果你想知道Windows的内部工作原理,那么,这本书对你来说再合适不过了。
Microsoft提供了很多工具(并且许多工具可直接通过Microsoft的Web站点获得),可用来观察或控制系统内核的方方面面,其中最为重要的当然非内核调试器(Windbg)莫属了。除此以外,本书作者们也提供了大量实用的工具(有的还相当好玩,见本书第14章最后一节。所有这些工具都可通过www.sysinternals.com下载而得到),你不仅在阅读本书的时候能使用这些工具来帮助你更好地理解书中的内容,在日常的工作或生活中也可以使用这些工具来解决一些实际问题。例如,我和同事们通过Process Explorer(在本书中我将其翻译为“进程管理器”)发现过机器上的流氓软件的痕迹,有时候,当目录无法删除或移动设备无法卸载的时候,通过它也能查到哪个进程还在抓着不放手。对于有些工具,作者们还在书中介绍了实现原理,比如Filemon就是一个很好的例子。
这本书确实打破了Windows操作系统的神秘感,但是,更让Windows大白于天下的,当是Windows的源代码了。2006年7月,Microsoft真正开放了一份可编译的内核源代码(仅核心部分),编译得到的内核文件可以在Windows Server 2003 (SP1)上启动和运行。如果读者有资格获得这一份代码,那么,在阅读本书的时候,你甚至可以直接参考源代码。我想,在这一点上,Microsoft的确体现了诚意。有关详细的信息,请参考http://www.microsoft.com/resources/sharedsource/ Licensing/WindowsAcademic.mspx。
说到本书的权威性,看一看David Culter(NT内核的最初设计者,奠定了Windows NT的基础)和Jim Allchin为本书写的序言就能知晓。作者之一David Solomon从事Windows NT内部机理的培训和研讨有10多年经历了,而且也在Microsoft内部对员工进行培训。我有幸参加了他2006年春天在北京的一次培训。而另一名作者Mark Russinovich呢,www.sysinternals.com上这么多优秀的工具皆出自他的手笔,现在已经加入Microsoft了。有兴趣的读者,可以到网站上看一看Mark的blog,一些技术文章非常有意思。
这一年多翻译本书的过程,于我也是一个学习的过程。这些知识帮助我解决了在工作中遇到的许多难题,也让我更好地理解了Windows操作系统。我经常向同事和实习生们推荐这本书,希望能帮助他们解决手头的一些技术难题,以及更好地在Windows平台上开展工作。如果你的工作也需要紧密地接触Windows,那么,不管是科研人员、开发人员,还是系统管理员,都可以从这本书中获益良多。
如何更有效地发挥本书的作用呢?以我的感觉而言,这本书的叙述并不像教材那样严谨,也不像教材那样按照学习的顺序来组织内
潘爱民,浙江海宁人,获得了南开大学数学学士学位,清华大学工学硕士学位,以及北京大学计算机科学博士学位。他从中学时代开始接触计算机编程,经历了从DOS到Windows各种版本的发展历程。潘爱民曾经长期从事软件技术的研究和开发工作,撰写了大量软件技术文章,1999年曾经是《微电脑世界》杂志社的合作专家。他著写了《COM原理与应用》(1999年出版),翻译了多部经典名作,如《Visual C++技术内幕》(第四、六版)、《C++ Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)等。从2001年开始,潘爱民在北京大学计算机科学技术系承担研究生课程教学,共讲授了三门课程:《组件技术》、《网络与信息安全》和《程序开发环境分析与实践》,深受学生欢迎。2006年秋季在清华大学软件科学实验班讲授《程序设计与算法基础》课程。 潘爱民获得了2001年微软亚洲研究院“微软学者”称号,2002年度北京大学优秀教学奖。他现在微软亚洲研究院从事系统与安全方向的研究工作。
《深入解析Windows操作系统,第4版》的读者对象是那些想要理解Microsoft Windows 2000、Windows XP和Microsoft Windows Server 2003操作系统的核心组件内部工作机理的高级计算机专业人员(包括开发人员和系统管理员)。开发人员利用这些知识,可以在构建Windows平台上的应用程序时更好地理解各种设计决策背后的基本原理。这样的知识也可以帮助开发人员调试复杂的问题。系统管理员也可以从这些信息中获益,因为理解了操作系统背后的工作原理,可以有助于理解系统的性能行为,以及当事情变糟时更易于诊断各种系统问题。在阅读了这本书以后,你应该可以更好地理解Windows是如何工作的,以及它为什么有这样那样的表现。
本书的结构
前两章(“概念和工具”和“系统结构”)奠定了本书后面用到的术语和概念的基础。接下去的三章——“系统机制”、“管理机制”以及“启动和停机”——讲述了系统中关键的底层机制。接下来的八章解释了操作系统的核心组件:进程、线程和作业、内存管理、安全性、I/O系统、存储管理、缓存管理器、文件系统,以及网络,最后一章介绍了崩溃转储分析。
本书的历史
本书以前的名称是Inside Windows NT(Microsoft Press,1992,中文版的名称是《Windows NT技术内幕》),现在是第4版。第1版是由Helen Custer著的(在Microsoft Windows NT 3.1的最初发布以前出版)。Inside Windows NT是第一本关于Windows NT的书籍,它提供了有关Windows NT系统的体系结构和设计方面的关键要点。Inside Windows NT,Second Edition(Microsoft Press, 1998)是由David Solomon著的。该书在内容上做了更新,涵盖了Windows NT 4.0,并且大大地提高了技术深度的层次。Inside Windows 2000,Third Edition(Microsoft Press,2000)是由David Solomon和Mark Russinovich合著的。第3版增加了许多新的话题,比如启动和停机、Windows服务的内部机理、注册表的内部机理、文件系统驱动程序、网络,以及Windows 2000中内核的变化,其中,关于Windows 2000中内核的变化,包含了Windows驱动程序模型(WDM,Windows Driver Model)、即插即用、电源管理、Windows管理规范(WMI,Windows Management Instrumentation)、加密、作业对象和终端服务。
第4版的变化
这一最新的版本,现在称为“Microsoft Windows Internals(Fourth Edition)”,在内容上做了更新,以覆盖Windows XP和Windows Server 2003中所做的内核变化,包括对于64位系统的支持。练习用的实验也相应地做了更新,以反映出工具中的变化;新增加的实验用到了一些在第3版写作时尚未可用的新工具。
由于从Windows 2000到后续版本之间的内核变化相对较小(与“Windows NT 4.0和Windows 2000之间的变化”相比较而言),所以,本书中绝大部分内容适用于Windows 2000、Windows XP和Windows Server 2003。因此,除非特别声明,否则一切内容都适用于这三个版本。
练习实验
即使没有访问源代码,你也可以通过一些工具(比如内核调试器)来获得许多有关Windows内部机理的知识。每当可以通过一个工具来揭示或演示Windows内部行为的某一方面时,本书中的“实验”辅助章节就会列出让你自己试用该工具时遵从的步骤。这样的实验遍布全书,我们鼓励你在阅读本书时试一试这些实验——看一看Windows内部是如何工作的,这比你仅仅读一遍本书所得到的印象要深刻得多。
本书没有涵盖的话题
Windows是一个大而复杂的操作系统。本书并没有涵盖与Windows内部机理相关的一切内容,而是把焦点集中在基本的系统组件上。例如,本书没有讲述COM+(Windows分布式面向对象编程基础设施),也没有讲述.NET框架(下一代托管代码的应用程序的基础)。
因为这是一本讲述内部机理的书籍,不是一本用户指南、程序设计或系统管理类型的书籍,所以,本书没有描述如何使用、编程或配置Windows。
提醒和告诫
因为本书讲述的是Windows操作系统中未文档化的内部结构和内部操作的行为(比如内核结构和函数),所以,这些内容有可能会在不同的发行版本中有所变化(外部的接口,比如Windows API,则不会受到不兼容变化的影响)。
说到“受版本变化的影响”,我们并不是指,本书讲述的细节会在不同发行版本中一定有所变化,但是你不能认为它们不会改变。任何使用了这些未文档化接口的软件都有可能在将来
的Windows版本上无法正常工作。更糟的是,在内核模式下运行并且用到了这些未文档化接口的软件(比如设备驱动程序)在新的Windows发行版本中运行时可能会导致系统崩溃。
支持
我们做了各种努力来确保本书的精确性。如果你遇到了任何问题,或者有任何疑问,请参考下面列出的资源。
来自作者的支持
本书远未达到完美。毫无疑问,它包含一些不精确的地方;或者也有可能,我们忽略了一些本该讲述的话题。如果你发现了任何你认为不正确的地方,或者你相信我们应该包含一些尚未涵盖的材料,欢迎发送电子邮件到windowsinternals@sysinternals.com。本书的更新和修正将张贴在www.microsoft.com/technet/sysinternals/information.windowsinternals.mspx页面上。
来自出版商Microsoft Press的支持
Microsoft也通过Web为本书提供修正内容,地址如下:
http://www.microsoft.com/learning/support
你可以直接连接到Microsoft学习知识库(Microsoft Learning Knowledge Base),针对你学习过程中可能碰到的问题,输入一个相关的查询请求,Web地址是:http://www.microsoft.com/learning/support/search.asp。
除了直接给作者们发送反馈信息以外,如果你对本书的表述或用途有任何建议、疑问或者想法,可以通过以下任何一种方法将它们发送给Microsoft。
通信地址:
Microsoft Press
Attn: Windows Internals Editor
One Microsoft Way
Redmond, WA 98052-6399
电子邮件地址:
mspinput@microsoft.com
请注意,通过上述地址并不提供产品支持。关于Microsoft Windows的支持信息,请访问www.microsoft.com/windows。你也可以在工作日的太平洋时间上午6点到下午6点打电话给(425) 635-7011,呼叫标准支持程序,或者搜索Microsoft的在线支持站点:suppport.microssft.com/support。
无封面