读书频道 > 系统 > windows > Windows内核原理与实现
2.3.2 WRK源代码说明
2013-05-18 14:32:16     我来说两句 
收藏    我要投稿   

本文所属图书 > Windows内核原理与实现

本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本...  立即去当当网订购

正如本章前面所讲,Windows 的内核模块文件是ntoskrnl.exe ,位于Windows\System32目录下,它包含了 Windows 体系结构中的执行体和内核(或微内核)部分。WRK提供的源代码可以编译得到这一内核模块文件,在WRK编译环境下针对Intel x86 处理器的默认生成文件名为wrkx86.exe。Windows 的引导选项/kernel 可以指定不同于 ntoskrnl.exe 的内核模块文件。参见本书附录A 关于编译、配置和调试WRK的详细介绍。表2.2 列出了WRK源代码的目录结构及其对应的内核组件

WRK包含了编译 ntoskrnl.exe 内核模块所需要的绝大部分代码,未公开部分的代码主要包括即插即用设备管理、电源管理、设备驱动程序检验器和虚拟DOS 机的实现。为了编译WRK源代码以得到实际可运行的内核模块,缺失的这部分被以二进制目标代码的形式包含在了 WRK中,位于 base\ntos\BUILD\PREBUILT\i386 (或 base\ntos\BUILD\PREBUILT\ amd64 )目录。该目录还包含了其他一些需要静态链接的目标文件。尽管如此,WRK对于学习和理解Windows 的工作机理仍然是一份极佳的资源。

WRK的代码是从当时最新的Windows 产品代码中摘出来的,可以编译并运行于Windows Server 2003 SP1(x86 处理器版本)和 Windows XP SP2(AMD64版本)系统中,其内核版本为5.2。WRK代码与产品代码几乎一致,主要的变化在于去掉了对服务器的支持,比如与Intel IA64 有关的代码。

Windows 源代码一致性较好,非常易读。代码本身的逻辑以及各标识符基本上是自解释性的,重要函数的头部都有详细的注释说明,重要的代码片段也有专门的注释。总体上,代码组织较为清晰,如表2.2 所示。内核模块内部的每个组件都提供了一些接口函数供其他组件调用,也有一些函数供该组件内部使用。表2.3 列出了一些常用的标识性前缀。有一些组件内部函数也有规律可循:前缀第一个字母后面跟一个 i ,或者在前缀后面跟一个p ,这里i 代表internal,即内部的;p 代表private ,即私有的。例如,Ki和Mi分别代表微内核和内存管理器的内部函数,而Halp 、Psp、Iop 分别代表HAL、进程和线程管理组件、I/O 管理器的内部函数。掌握这些命名规律,有助于快速地理解一个函数的归属。
表2.2   WRK 目录结构和相应的组件说明
目录  组件说明
public
各个组件共享使用的包含文件,包括 DDK、SDK 、HAL和内核自身
的一些头文件
base\ntos  Windows 内核模块的主目录
base\ntos\cache  缓存管理器的源文件
base\ntos\config  注册表的实现代码
base\ntos\dbgk  调试子系统的内核模式部分
base\ntos\ex  执行体函数(内核堆、同步、定时器等)
base\ntos\fsrtl  文件系统运行库
base\ntos\fstub  文件系统引导接口
base\ntos\io  I/O 管理器,不包括即插即用管理器和电源管理器部分
base\ntos\ke  (微)内核,包括线程调度器、CPU 管理,以及低层的同步语义
base\ntos\lpc  本地过程调用(LPC )机制的实现
base\ntos\mm  内存管理器
base\ntos\ob  内核对象管理器
base\ntos\perf  内核的性能日志记录功能
base\ntos\ps  进程和线程
base\ntos\se  安全引用监视器
base\ntos\wmi  Windows 管理规范(WMI,Windows Management Instrumentation)
base\ntos\inc  仅适用于NTOS 部分的包含文件
base\ntos\raw  RAW文件系统驱动程序的实现代码
base\ntos\rtl  内核运行时库支持
base\ntos\init  内核启动部分的代码
base\ntos\VDM  虚拟DOS 机(没有公开代码)
base\ntos\VERIFIER  驱动程序检验器(只有头文件)
表2.3   WRK 源代码中各组件接口函数的前缀
函数前缀  所属的组件或函数说明
Cc  缓存管理器
Cm  配置管理器(即注册表)
Dbg/Kd  调试支持函数
Ex  执行体函数
FsRtl  文件系统驱动程序运行库函数
Fstub  文件系统引导接口函数
Hal  HAL提供的接口函数
Io  I/O 管理器
Ke  内核函数
Lpc  本地过程调用(LPC )函数
Mm  内存管理器
Nt  Windows 系统服务
Ob  对象管理器
Perf  日志记录函数
Po  电源管理器
Pp  即插即用管理器
Ps  进程/线程
Raw  RAW文件系统的函数
Rtl  内核运行库函数
Se  安全函数
Vf  驱动程序检验器函数
Wmi  Windows 管理规范
Zw 与Nt前缀同名的一套函数,省去了参数验证的步骤,其他逻辑相同。可以认为以Nt前缀为名称的函数针对用户模式的调用者,以Zw前缀为名称的函数针对内核模式调用者

 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.3.1 WRK包含了什么
下一篇:2.3.3 本书对WRK源代码的引用
相关文章
图文推荐
3.4.4 进程生命期管
3.4.2 Windows应用商
3.4.1 Windows应用商
3.4 进程生命期管理
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站