Windows内核原理与实现

《Windows内核原理与实现》
基本信息
作者: 潘爱民
出版社:电子工业出版社
ISBN:9787121200564
上架时间:2013-5-13
出版日期:2013 年5月
开本:16开
页码:716
版次:1-1
所属分类:计算机
 
更多关于》》》《 Windows内核原理与实现
内容简介
计算机书籍
  《windows内核原理与实现》从操作系统原理的角度,详细解析了windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,windows中的同步和并发性支持,以及windows的i/o模型。在介绍这些关键部件时,本书直接以windows的源代码(wrk,windows research kernel)为参照,因而读者可以了解像windows这样的复杂操作系统是如何在x86处理器上运行的。
   在内容选取方面,本书侧重于windows内核中最基本的系统部件,同时也兼顾到作为一个操作系统的完整性,所以,本书也介绍了像存储体系、网络、windows环境子系统等,这些虽然并不位于内核模块但却支撑整个windows运行的重要部件。在本书最后,也介绍了windows server 2003以后的内核发展和变化。
   虽然书中有大量关于windows代码实现的描述,但是本书并没有罗列wrk中的代码,即使读者不对照wrk的源代码,也可以从这些章节的描述中理解windows的实现机理。在每一个技术专题的介绍中,本书几乎都提供了一个框架图,并且有关键细节的实现分析,这样做的意图是让读者既能够对一项技术有总体上的把握,也通晓关键的实现细节。
   windows操作系统已经有20年历史了,市面上有大量关于windows技术的文档和书籍,但是,真正从源代码来诠释windows底层机理的,本书还是第一次尝试。在本书覆盖的内容中,有相当一部分是第一次以文字形式披露出来的,期望这些内容能消除人们对于windows的神秘感。
   写作本书的目的是让对windows有好奇心的人真正了解到windows中的核心机理,让计算机专业的学生和老师,以及系统软件工程师可以快速地领略到windows中先进的系统技术,以及在windows上编写出更加高效的软件。本书也配备了一些小工具,通过这些小工具,读者可以查看内核中的静态或动态的信息,甚至观察系统的行为。
目录
《windows内核原理与实现》
第1章 概述1
1.1 操作系统基础2
1.1.1 计算机系统的硬件资源管理2
1.1.2 为应用程序提供执行环境5
1.2 学习操作系统之必备知识7
1.3 windows操作系统发展历史9
1.4 windows内核的版本11
1.5 操作系统的研究与发展13
1.6 本章总结16
第2章 windows系统总述17
2.1 现代操作系统的基本结构17
2.2 windows系统结构18
2.2.1 windows内核结构20
2.2.2 windows内核中的关键组件22
2.2.3 windows子系统32
2.2.4 系统线程和系统进程35
2.3 关于windows研究内核37
2.3.1 wrk包含了什么38
2.3.2 wrk源代码说明39
.2.3.3 本书对wrk源代码的引用41
2.4 windows内核的基本概念42
2.4.1 处理器模式43
2.4.2 内存管理44
2.4.3 进程和线程管理46
2.4.4 中断和异常48
2.4.5 同步51
2.5 windows内核中的公共管理设施53
2.5.1 windows内核中的对象管理53
2.5.2 注册表和配置管理器61
2.5.3 事件追踪(etw)72
2.5.4 安全性管理75
2.6 windows引导过程81
2.6.1 内核加载82
2.6.2 内核初始化85
2.6.3 建立用户登录会话90
2.7 本章总结96
第3章 windows进程和线程97
3.1 进程基本概念97
3.1.1 多进程模型98
3.1.2 进程与程序99
3.2 线程基本概念102
3.2.1 线程模型102
3.2.2 线程调度算法104
3.2.3 线程与进程的关系106
3.3 windows中进程和线程的数据结构106
3.3.1 内核层的进程和线程对象106
3.3.2 执行体层的进程和线程对象118
3.4 windows的进程和线程管理129
3.4.1 windows进程的句柄表129
3.4.2 获得当前线程或进程135
3.4.3 进程和线程的创建过程136
3.4.4 进程和线程的结束处理146
3.4.5 系统初始进程和线程148
3.5 windows中的线程调度150
3.5.1 线程优先级150
3.5.2 线程状态转移153
3.5.3 时限管理163
3.5.4 优先级调度和环境切换165
3.6 进程和线程运行状态监视工具171
3.6.1 procmon使用示例171
3.6.2 procmon实现原理173
3.7 本章总结174
第4章 windows内存管理175
4.1 内存管理概述176
4.1.1 页式内存管理177
4.1.2 段式内存管理181
4.1.3 内存管理算法介绍184
4.1.4 windows内存管理概述192
4.2 windows系统内存管理194
4.2.1 系统地址空间初始化194
4.2.2 系统地址空间内存管理209
4.2.3 系统pte区域的管理223
4.3 进程内存管理229
4.3.1 地址空间的创建和初始化229
4.3.2 地址空间切换234
4.3.3 进程地址空间的内存管理235
4.3.4 内存区对象241
4.4 内存页面交换250
4.4.1 intel x86中的pte251
4.4.2 软件pte:无效pte和原型pte253
4.4.3 页面错误处理257
4.4.4 windows的写时复制263
4.5 物理内存管理265
4.5.1 pfn数据库266
4.5.2 物理页面的状态变化272
4.5.3 物理页面链表的管理和操作275
4.5.4 修改页面写出器280
4.5.5 进程/栈交换器282
4.5.6 低内存通知和高内存通知285
4.6 工作集管理286
4.6.1 windows工作集管理器286
4.6.2 平衡集管理器292
4.7 内存监视工具memmon293
4.7.1 memmon使用介绍293
4.7.2 memmon实现原理295
4.8 本章总结295
第5章 windows并发和同步297
5.1 进程和线程的同步基础297
5.1.1 并发性基础298
5.1.2 进程或线程之间的通信301
5.1.3 经典的同步问题305
5.2 windows中断与异常310
5.2.1 硬件中断的发生和处理311
5.2.2 中断请求级别(irql)317
5.2.3 中断对象320
5.2.4 dpc(延迟过程调用)323
5.2.5 时钟中断和定时器管理327
5.2.6 apc(异步过程调用)330
5.2.7 异常分发336
5.3 不依赖于线程调度的同步机制343
5.3.1 提升irql实现数据同步343
5.3.2 互锁操作345
5.3.3 无锁的单链表实现346
5.3.4 自旋锁349
5.4 基于线程调度的同步机制354
5.4.1 线程进入等待354
5.4.2 分发器对象361
5.4.3 门等待369
5.4.4 执行体资源(executive resource)370
5.4.5 推锁(push lock)373
5.4.6 死锁378
5.5 观察线程同步关系——dperflite379
5.5.1 dperflite使用示例379
5.5.2 dperflite实现原理381
5.6 本章总结382
第6章 windows i/o系统383
6.1 i/o概述384
6.1.1 现代计算机系统的i/o384
6.1.2 i/o软件技术388
6.1.3 windows i/o系统结构390
6.2 i/o管理器392
6.2.1 驱动程序初始化393
6.2.2 驱动程序对象和设备对象399
6.2.3 文件对象404
6.2.4 对象生命周期管理407
6.3 即插即用管理器408
6.3.1 即插即用的基本要求409
6.3.2 windows中驱动程序的即插即用支持410
6.3.3 设备列举与设备树411
6.4 电源管理器414
6.4.1 电源管理概述414
6.4.2 windows中的电源管理417
6.5 设备驱动程序422
6.5.1 设备驱动程序分类423
6.5.2 例子驱动程序toaster425
6.5.3 驱动程序的代码结构427
6.5.4 toaster设备的设备栈432
6.5.5 过滤驱动程序的配置和加载434
6.5.6 非即插即用驱动程序437
6.6 i/o处理440
6.6.1 i/o请求包(irp)440
6.6.2 针对独立设备对象的i/o处理447
6.6.3 处理i/o请求过程中的事项451
6.6.4 针对设备栈的i/o处理461
6.6.5 i/o完成端口465
6.7 i/o请求监视工具irpmon468
6.7.1 irpmon使用介绍468
6.7.2 irpmon实现原理469
6.8 本章总结470
第7章 windows存储管理471
7.1 存储管理概述471
7.1.1 硬件存储体系(memory hierarchy)472
7.1.2 windows的存储管理结构474
7.2 windows缓存管理476
7.2.1 windows缓存空间的内存管理476
7.2.2 缓存管理器的数据访问路径483
7.2.3 直接使用系统缓存中的数据486
7.2.4 缓存管理器的预读处理493
7.2.5 缓存管理器的延迟写496
7.3 windows中卷的管理499
7.3.1 windows存储栈结构500
7.3.2 卷的挂载504
7.3.3 卷与文件系统507
7.3.4 文件对象的i/o处理510
7.4 windows文件系统513
7.4.1 文件系统驱动程序结构514
7.4.2 raw文件系统与fsrtl519
7.4.3 文件系统的i/o过滤522
7.4.4 fat文件系统530
7.4.5 ntfs文件系统534
7.5 本章总结542
第8章 windows系统服务545
8.1 windows系统服务原理545
8.1.1 intel x86的用户模式-内核模式切换545
8.1.2 windows的用户模式-内核模式切换550
8.1.3 windows中的系统服务分发555
8.1.4 增加系统服务表或表项562
8.2 lpc(本地过程调用)服务565
8.2.1 lpc结构模型565
8.2.2 lpc端口和lpc消息567
8.2.3 lpc通信模型的实现569
8.2.4 lpc应用575
8.3 命名管道(named pipe)服务577
8.3.1 命名管道的名称解析577
8.3.2 命名管道的通信模型579
8.3.3 命名管道的实现581
8.4 邮件槽(mailslot)服务584
8.4.1 邮件槽的名称解析584
8.4.2 邮件槽的通信模型585
8.4.3 邮件槽的实现586
8.5 sdt显示工具sdtviewer588
8.5.1 sdtviewer使用介绍588
8.5.2 sdtviewer实现原理589
8.6 本章总结590
第9章 windows系统高级话题591
9.1 网络591
9.1.1 windows网络体系结构591
9.1.2 tdi(传输驱动程序接口)595
9.1.3 ndis(网络驱动程序接口规范)599
9.1.4 windows vista及以后版本的网络结构601
9.2 windows子系统603
9.2.1 windows子系统结构603
9.2.2 windows子系统初始化与gui线程607
9.2.3 窗口管理610
9.2.4 gdi(图形设备接口)620
9.2.5 windows vista及以后的子系统变化627
9.3 内核日志629
9.3.1 内核日志记录器629
9.3.2 利用内核日志信息诊断性能问题632
9.4 windows vista/server 2008/7的重要变化640
9.4.1 minwin工程640
9.4.2 进程和线程管理643
9.4.3 内存管理645
9.4.4 i/o处理的改进647
9.5 本章总结650
附录a 建立wrk工作环境651
a.1 编译wrk651
a.2 启动wrk655
a.3 调试wrk658
附录b 内核代码插入工具kinjecttoolkit665
b.1 kinjecttoolkit功能介绍666
b.2 kinjecttoolkit的代码实现667
b.3 kinjecttoolkit的限制671
参考资料673
术语对照表681
索引687
图书信息来源: 中国互动出版网

转载于:https://www.cnblogs.com/china-pub/archive/2013/05/15/3079944.html

一:SSDT表的hook检测和恢复 ~!~~~ 二:IDT表的hook检测和恢复 ~~~~~~(idt多处理器的恢复没处理,自己机器是单核的,没得搞,不过多核的列举可以) 三:系统加载驱动模块的检测 通过使用一个全局hash表(以DRIVEROBJECT为对象)来使用以下的方法来存储得到的结果,最终显示出来 1.常规的ZwQuerySystemInformation来列举 2通过打开驱动对象目录来列举 3搜索内核空间匹配驱动的特征来列举(这个功能里面我自己的主机一运行就死机,别的机器都没事,手动设置热键来蓝屏都不行,没dump没法分析,哎,郁闷) 4从本驱动的Modulelist开始遍历来列举驱动 四:进程的列举和进程所加载的dll检测 采用以下方法来列举进程: 1ZwQuerySystemInformation参数SystemProcessesAndThreadsInformation来枚举 2进程EPROCESS 结构的Activelist遍历来枚举 3通过解析句柄表来枚举进程 4通过Handletablelisthead枚举进程 5进程创建时都会向csrss来注册,从这个进程里面句柄表来枚举进程 6通过自身进程的HANDLETABLE来枚举进程 7通过EPROCESS的SessionProcessLinks来枚举进程 8通过EPROCESS ---VM---WorkingSetExpansionLinks获取进程 9暴力搜索内存MmSystemRangeStart以上查找PROCESS对象 进程操作: 进程的唤醒和暂停通过获取PsSuspendProcess和PsResumeProcess来操作的 进程结束通过进程空间清0和插入apc。 采用以下方法查找DLL: 1遍历VAD来查找dll 2挂靠到对应的进程查找InLoadOrderLinks来枚举dll 3暴力搜索对应进程空间查找pe特征来枚举dll DLL的操作: Dll的卸载是通过MmUnmapViewOfSection和MmmapViewOfSection(从sdt表中相应函数搜索到的)来实现的(本来想直接清0 dll空间,有时行有时不行)(只要将这个进程的ntdll卸载了,进程就结束了,一个好的杀进程的办法撒,绿色环保无污染),注入dll使用的是插入apc实现的。(注入的dll必须是realse版的。Debug版会出现***错误,全局dll注入貌似也是)插入apc效果不是很好,要有线程有告警状态才执行。 五:线程信息的检测 遍历ThreadList来枚举线程 线程的暂停和唤醒都是通过反汇编获取PsResumeThread和PsSuspendThread直接从r3传来ETHREAD来操作的,通过插入APC来结束线程 六:shadow sdt表的hook检测与恢复 没有采用pdb来解决函数名问题,直接写入xp和03的shandow表函数名(主要是自己的网不稳定,连windbg有时都连不上微软) 七:系统所有的过滤驱动的检测 查看各device下是否挂接有驱动之类的,可直接卸载 八:系统常用回调历程的检测和清除 只检查了PsSetLoadImageNotifyRoutine PsSetCreateThreadNotifyRoutine PsSetCreateProcessNotifyRoutine CmRegisterCallback这几个,至于那个什么shutdown回调不知道是啥玩意,就没搞了,有知道的顺便告诉我下撒,谢谢 九:文件系统fat和ntfs的分发函数检测 直接反汇编fat和ntfs的DriverEntry得到对应的填充分发的偏移,然后和当前已经运行的文件系统的分发相比是否被hook,并附带恢复 十:文件查看功能 自己解析ntfs和fat的结构,来实现列举文件和直接写磁盘删除。附带有普通的删除和发生IRP来删除。不过这里面有点问题,ntfs删除有时把目录给搞坏了,大家凑合着吧, Ntfs网上删除这些操作的代码不多,就是sudami大大的利用ntfs-3g来实现的,看了下,太多了,充满了结构。然后自己对照着系统删除文件时目录的变化来自己实现的。只处理了$BITMAP对应的位清除,父目录的对应文件的索引项的覆盖,删除文件对应的filerecord清0. 另外偷懒时间都没处理,呵呵,y的,一个破时间都都搞好几个字节移来移去的。 十一:常用内核模块钩子的检测和恢复 这里只检测了主要的内核模块nkrnlpa**.exe的.win32k.sys,hal.dll,比对它们的原始文件从而查找eat inline hook,iat hook ,和inline hook。Inline是从TEXT段开始一段位置开始比较的。(有点慢貌似,等待显示扫描完成就好了) 十二:应用层进程所加载dll的钩子 应用层钩子检测和内核模块钩子检测原理一样,不过为了能读写别的进程的空间,并没有使用openprocess去打开进程,而是通过KiattachProcess挂靠到当前进程,然后通过在r0直接读写进程空间的。
### 回答1: Windows内核原理实现指的是Windows操作系统底层的核心组件,它负责管理和协调系统资源的分配、进程和线程管理、设备驱动程序调度以及安全性等功能。 Windows内核采用了分层的结构,包括硬件抽象层(HAL)、系统调用层、对象管理层、进程管理层、线程调度层、内存管理层、文件系统等部分。 硬件抽象层(HAL)是Windows内核的底层,负责与硬件进行交互,为上层提供统一的硬件接口。系统调用层负责提供系统调用接口,实现进程间通信和系统功能的调用。 对象管理层实现Windows内核中各种对象的管理,如进程、线程、文件、事件等。它采用对象管理表和对象属性表来管理对象的创建、销毁以及属性的设置。 进程管理层负责管理系统中运行的进程,包括进程的创建、终止、切换等操作。线程调度层负责为系统中的所有线程分配CPU时间片,并根据线程的优先级进行调度和切换。 内存管理层负责管理系统的物理内存和虚拟内存。它通过页表和页框来实现虚拟地址和物理地址的映射,并负责内存的分配、释放和页面置换等工作。 文件系统负责管理磁盘上的文件和目录。它提供了对文件的创建、删除、读取和写入等操作,并维护文件的目录结构和文件的元数据。 Windows内核实现主要依赖于驱动程序的支持。不同的硬件设备需要编写相应的设备驱动程序,用于和内核进行通信和控制硬件设备。 总体来说,Windows内核原理实现是指Windows操作系统底层的核心组件,它是整个系统的核心,负责管理和控制系统中的各种资源和功能。它通过分层的结构和各种模块的协作来实现系统的各种功能。 ### 回答2: Windows内核Windows操作系统的核心部分,负责管理系统的各种资源和提供各种服务。Windows内核实现基于微内核架构,它包含了许多基本组件,如进程管理、内存管理、设备驱动程序、文件系统等。 Windows内核的主要原理是通过将操作系统的核心功能划分为不同的模块来实现高效的系统管理。这些模块被设计为相对独立的组件,相互之间通过精确的接口进行通信和协作。这种模块化的设计使得Windows内核具有高度的可扩展性和可维护性。 Windows内核实现基于多层次的体系结构。最底层是硬件抽象层(HAL),它提供了对底层硬件的访问接口。上层是微内核,负责进程管理、内存管理、线程调度等核心功能。微内核只提供最基本的服务,其他功能通过外围组件实现。 在Windows内核实现中,重要的组件包括处理器抽象层(PAL),负责处理处理器相关的操作;对象管理器,负责管理和分配内核对象;进程管理器,负责创建、停止和管理进程;内存管理器,负责虚拟内存的分配和回收;设备管理器,负责管理和调度设备驱动程序。 此外,Windows内核还提供了丰富的系统调用接口,使得应用程序可以使用内核提供的服务。通过系统调用,应用程序可以请求内核执行特定的操作,如读写文件、创建线程等。 总之,Windows内核原理实现基于微内核架构,通过模块化设计和分层架构,实现了高效的系统管理和资源调度。它是Windows操作系统的核心部分,为应用程序提供了丰富的功能和稳定的运行环境。 ### 回答3: Windows内核Windows操作系统的核心组成部分,负责管理系统的各种资源和提供基本的系统服务。它采用了一种称为微内核的架构,不同的功能以各种可拔插的方式实现Windows内核主要由四个部分组成:执行环境,外设驱动程序,系统调用和资源管理。 首先是执行环境,它提供了操作系统所需的基本运行机制,包括进程和线程管理、内存管理、中断处理等。它负责将用户程序加载到内存中执行,并提供一套机制来保护系统和用户程序的安全性。 外设驱动程序是为了管理各种硬件设备而存在的,包括硬盘、网络、声音、图形等。每个设备都有相应的驱动程序与之对应,驱动程序与内核进行通信,实现对硬件资源的控制和管理。 系统调用是用户程序与内核之间的接口,它允许用户程序请求内核提供的服务。比如创建文件、读写文件、创建进程等操作都需要通过系统调用来实现内核提供了一系列系统调用的函数,用户程序可以通过调用这些函数来获取系统服务。 最后是资源管理,它负责管理和分配系统的各种资源,包括内存、CPU、硬盘、网络等。资源管理器会根据不同的需求来优化资源的分配,使系统能够更好地提供服务。 总之,Windows内核Windows操作系统的核心部分,负责管理系统的资源、提供系统服务和保障系统的安全性。它通过执行环境、外设驱动程序、系统调用和资源管理四个组成部分来实现各种功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值