基本信息·出版社:电子工业出版社 ·页码:1465 页 ·出版日期:2009年05月 ·ISBN:7121081148/9787121081149 ·条形码:9787121081149 ·版本:第1版 ...
商家名称 |
信用等级 |
购买信息 |
订购本书 |
|
|
Windows内核情景分析:采用开源代码ReactOS(上、下册) |
|
|
|
Windows内核情景分析:采用开源代码ReactOS(上、下册) |
|
基本信息·出版社:电子工业出版社
·页码:1465 页
·出版日期:2009年05月
·ISBN:7121081148/9787121081149
·条形码:9787121081149
·版本:第1版
·装帧:平装
·开本:16
·正文语种:中文
·套装数量:2
内容简介 《Windows内核情景分析:采用开源代码ReactOS(上、下册)》通过分析ReactOS的源代码介绍了Windows内核各个方面的结构、功能、算法与具体实现。全书从“内存管理”、“进程”、“进程间通信”、“设备驱动”等多个方面进行分析介绍,所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据,使读者能深入理解Windows内核的方方面面,也可以使读者的软件开发能力和水平得到提高。
《Windows内核情景分析:采用开源代码ReactOS(上、下册)》可供大学有关专业的高年级学生和研究生用做教学参考,也可供广大的软件工程师,特别是从事系统软件研发的工程师用于工作参考或用做进修教材。
编辑推荐 ?市面上唯一一本讲述Windows内核分析的图书。
?历时三年,近1500页篇幅,毛德操老师最新力作!
《Windows内核情景分析:采用开源代码ReactOS》:历时3年,近1500页篇幅,毛德操老师重磅著作
专业书评 操作系统是最基础、最核心的计算机软件。长期处于技术垄断地位的Windows操作系统,其源程序代码是不公开的,可看成一个“黑盒子”。毛德操先生这本书,通过分析ReactOS的源程序代码,介绍了Windows操作系统内核的结构及其各种机制,使读者能深入理解Windows操作系统内核这个“黑盒子”的各个方面,这对于打破Windows的技术垄断,开发具有自主知识产权的新型操作系统,实现Windows与Linux操作系统的高度互操作,具有重大的实际价值。毛德操先生在剖析Windows、Linux等操作系统内核的结构与机制方面,走在了国际学术界的前列。
——中国开源软件推进联盟主席 陆首群
虽然当前以Linux为代表的开源软件为中国发展自主操作系统提供了很好的支撑,但学习和借鉴Windows也有重要价值。在这个时候,毛德操先生所著的《Windows 内核情景分析》出版了,它为广大读者打开了通向Windows内核的大门。与其说本书是一部单纯的学术著作,不如说这更是一篇实践经验的总结。本书正是毛德操先生近年来领导开发“兼容内核(Unified Kernel)”项目的一篇经验总结。早在2004年毛先生就提出了开发“兼容内核”的倡议,他提出开发一个既能支持Linux应用软件运行、也能支持Windows应用软件运行的内核,这与开源项目Wine有异曲同工之妙。
——中国工程院院士 倪光南
目录 上册
第1章 概述1
1.1 Windows操作系统发展简史1
1.2 用户空间和系统空间3
1.3 Windows内核4
1.4 开源项目ReactOS及其代码9
1.5 Windows内核函数的命名10
第2章 系统调用12
2.1 内核与系统调用12
2.2 系统调用的内核入口KiSystemService()22
2.3 系统调用的函数跳转29
2.4 系统调用的返回32
2.5 快速系统调用35
2.6 从内核中发起系统调用42
第3章 内存管理44
3.1 内存区间的动态分配47
3.1.1 内核对用户空间的管理48
3.1.2 内核对于物理页面的管理60
3.1.3 虚存页面的映射67
3.1.4 Hyperspace的临时映射78
3.1.5 系统空间的映射86
3.1.6 系统调用NtAllocateVirtualMemory()90
3.2 页面异常97
3.3 页面的换出107
3.4 共享映射区(Section)115
3.5 系统空间的缓冲区管理133
第4章 对象管理136
4.1 对象与对象目录136
4.2 对象类型148
4.3 句柄和句柄表162
4.4 对象的创建169
4.5 几个常用的内核函数179
4.5.1 ObReferenceObjectByHandle()179
4.5.2 ObReferenceObjectByPointer()187
4.5.3 ObpLookupEntryDirectory()188
4.5.4 ObpLookupObjectName()192
4.5.5 ObOpenObjectByName()209
4.5.6 ObReferenceObjectByName()213
4.5.7 ObDereferenceObject()214
4.6 对象的访问控制218
4.7 句柄的遗传和继承218
4.8 系统调用NtDuplicateObject()223
4.9 系统调用NtClose()233
第5章 进程与线程241
5.1 概述241
5.2 Windows进程的用户空间253
5.3 系统调用NtCreateProcess()273
5.4 系统调用NtCreateThread()284
5.5 Windows的可执行程序映像300
5.6 Windows的进程创建和映像装入305
5.7 Windows DLL的装入和连接329
5.8 Windows的APC机制358
5.9 Windows线程的调度和切换381
5.9.1 x86系统结构与线程切换382
5.9.2 几个重要的数据结构385
5.9.3 线程的切换388
5.9.4 线程的调度395
5.10 线程和进程的优先级409
5.11 线程本地存储TLS421
5.12 进程挂靠434
5.13 Windows的跨进程操作442
5.14 Windows线程间的相互作用450
第6章 进程间通信467
6.1 概述467
6.2 共享内存区(Section)469
6.3 线程的等待/唤醒机制470
6.4 信号量(Semaphore)499
6.5 互斥门(Mutant)505
6.6 事件(Event)512
6.7 命名管道(Named Pipe)和信插(Mailslot)516
6.8 本地过程调用(LPC)521
6.9 视窗报文(Message)555
第7章 视窗报文556
7.1 视窗线程与Win32k扩充系统调用556
7.2 视窗报文的接收566
7.3 Win32k的用户空间回调机制590
7.4 用户空间的外挂函数602
7.5 视窗报文的发送615
7.6 键盘输入线程628
7.7 鼠标器输入线程642
7.8 默认的报文处理662
第8章 结构化异常处理665
8.1 结构化异常处理的程序框架666
8.2 系统空间的结构化异常处理683
8.3 用户空间的结构化异常处理710
8.4 软异常720
下册
第9章 设备驱动729
9.1 Windows的设备驱动框架729
9.2 一个“老式”驱动模块的实例745
9.3 DPC函数及其执行769
9.4 内核劳务线程778
9.5 一组PnP设备驱动模块的实例783
9.6 中断处理817
9.7 一个过滤设备驱动模块的示例828
9.8 设备驱动模块的装载830
9.9 磁盘的设备驱动堆叠858
9.9.1 类驱动disk.sys860
9.10 磁盘的Miniport驱动模块887
9.11 命名管道与Mailslot896
9.12 MDL918
9.13 同步I/O与异步I/O932
9.14 IRP请求的完成与返回946
第10章 网络操作957
10.1 概述957
10.2 NDIS及其实现959
10.3 Windows的网络驱动堆叠974
10.3.1 NIC驱动975
10.3.2 LAN驱动模块997
10.3.3 TCP/IP驱动模块1014
10.3.4 AFD驱动与Winsock1035
10.4 Socket的无连接通信1062
10.5 Socket的有连接通信1089
10.6 Winsock的实现1093
第11章 文件操作1099
11.1 Win32 API函数CreateFileW()1099
11.2 NT路径名1109
11.3 文件路径名的解析1119
11.4 FAT32文件系统1144
11.5 文件系统驱动的装载和初始化1169
11.6 文件卷的安装1175
11.7 文件的创建1199
11.8 缓存管理1214
11.9 文件的读写1237
11.10 NTFS文件系统简介1252
第12章 操作系统的安全性1278
12.1 概述1278
12.2 证章1289
12.3 安全描述块和ACL1305
12.4 访问权限检查1322
第13章 注册表1351
13.1 注册表操作1351
13.2 注册表的初始化和装载1369
13.3 库函数RtlQueryRegistryValues()1376
第14章 系统管理进程与服务进程1394
14.1 系统管理进程Smss1394
14.2 Windows子系统的服务进程Csrss1408
14.3 服务管理进程Services1424
14.4 服务进程Svchost1449
跋1464
参考文献1466
……
序言 多年来,Windows垄断了中国桌面操作系统,中国学校中也开设了很多Windows课程,但令人遗憾的是,由于Windows的源代码不开放,这些课程往往只能使学生了解Windows的外特性和操作方法,却不能使学生了解和掌握Windows的内核。
有人会问:难道中国人真的需要深入到操作系统的内核,去掌握它的核心技术吗?有人说:微软花了上千亿美元开发出Windows操作系统,中国人花1000元人民币就能买到,为什么还要自己去研究和开发呢?一些外国咨询公司也为中国政府支招,如麦肯锡公司在2002年所做的《中国软件产业发展战略研究报告》就主张中国不必发展操作系统,而应像印度那样,主要发展面向出口的离岸外包业务。这样的观点前些年在中国相当流行,影响了不少人。
2008年10月,有一个事件震惊了中国:微软宣称将对其认为是使用盗版Windows和Office的电脑实行了“黑屏”。用户面对“黑屏”束手无策,这才意识到,自己的电脑被微软操控了!中国信息安全的软肋由此暴露无遗。
事实上,在信息安全方面我国历来要求使用“自主可控”的软件和硬件,“黑屏”事件更使广大用户有了切肤之痛,认识到自主可控的重要性。现在,世界上许多国家也有了这种共识,如俄国、欧洲和拉丁美洲的一些国家都在发展基于开源软件Linux的自主操作系统。在这方面,目前中国的重大进展是起动了“核高基”重大专项,这是按照《国家中长期科学和技术发展规划纲要(2006-2020年)》所部署的,旨在发展“核心电子器件、高端通用芯片及基础软件产品”。其中的“基础软件产品”中最重要的就是操作系统。这样,持续多年的中国要不要发展自主操作系统的争议终于有了定论。通过“核高基”专项,中国有望在今后三个五年计划内实现自主操作系统的产业化,将来中国的信息系统再不会被人“黑屏”了。
文摘 插图:
上册
第2章系统调用
2.1内核与系统调用
对于应用程序的运行即应用进程而言,操作系统内核的作用体现在一组可以供其调用的函数,称为“系统调用(System Call)”,正是这些系统调用加上一些辅助的手段构成了应用软件的运行环境,即日常所说的“运行平台”。从应用软件的角度看,这些系统调用都是操作系统为其提供的服务,所以也称“系统服务(System Service)”。在本书中,“系统调用”与“系统服务”是可以互换的同义词。
从程序运行的角度看,进程是主动的、“活性(Active)”的,是发出调用请求的一方;而内核是被动(Passive)的,只是应进程的要求而提供服务。但是,从整个系统的角度看,则内核也有活性的一面,诸多应用进程就是在内核的调度下运行,所以内核有其两面性。离开进程调度,内核就只剩下了被动的一面,那就类似于一个运行时程序库了。而系统调用即系统服务,就体现了内核被动的一面。内核活性的一面即进程调度,对于应用程序而言是无形的,其目的就在于为应用软件创造一种似乎独占着CPU的假象;相比之下内核被动的一面即系统调用则是有形的,要不然应用程序就无法调用这些服务。
系统调用所提供的服务是在内核中,一般是在“系统空间”实现的,而应用软件则都在用户空间运行,二者之间有着空间的间隔,实质上是CPU运行模式的不同。所以,在应用软件与内核之间必定存在着一个明确定义的“系统调用界面”。
不过要由应用软件直接按规定的形式进行系统调用是不方便的,所以一般都要在外面包上一层,提供一套便于调用的(用户空间)库函数作为中介。在UNIX/Linux系统及后来的POSIX标准中,这就是c语言运行库的一部分。就调用的参数、返回值、作用而言,由标准C语言运行库提供的“系统调用”函数与实际的系统调用一一对应并基本相同。例如,read()是个系统调用,而用户程序引用的read()实际上是库函数,二者是对应的,并且参数的数量、类型、次序等基本相同,功能则完全相同。标准C语言运行库也提供一些建立在系统调用基础上功能有所扩充的高层库函数,例如fread0是建立在read()基础上的,但是用起来更加方便,可是那就不叫系统调用。