Windows 内核(WRK)编译

时间:2022-06-24 22:18:53

WRK 是微软于 2006 年针对教育和学术界开放的 Windows 内核的部分源码,

WRK(Windows Research Kernel)也就是 Windows 研究内核,

在 WRK 中不仅仅只提供了 Windows 内核模块的部分代码,其还提供了编译工具,

也就是通过这个编译工具,你可以将你的 WRK 编译成一个 EXE 文件,

也就是内核可执行模块,然后你可以利用这个 EXE 文件来取代操作系统本身的内核,,

这样的话,下次开机的时候操作系统所加载的内核就是您编译的那个 EXE 了。

工具软件

Intel   x86  CPU;

VMware  6.5;

Windows  Server  2003  SP1(用于测试 WRK 编译结果);

Windows  7(用来编译 WRK);

WRK  1.2 ;

             

               

概览 WRK

首先我们来找到当前 Windows 操作系统下的内核模块文件,

所谓的内核模块文件呢,其实就可以看做是 Windows  的内核,

其由执行体和微内核组成,该文件名为 ntoskrnl.exe ,即一个二进制模块,

该文件位于:C:\Windows\System32 ;

而我们的 WRK 编译后所得的结果应该也是一个内核模块文件,

也就是说我们编译所得的结果应该就是这个 ntoskrnl.exe 

当然编译后的名称是可以不同的,

默认编译所得为 wrkx86.exe (这是 x86 环境下的默认编译结果名称)

下面来分析 WRK 中目录结构:

首先来看   WS03SP1HALS  目录:

WS03SP1HALS 代表的意思即 Windows  Server  2003  SP1  HALS

也就是在 Windows  Server  2003  SP1  下的  HAL (硬件抽象层)

在 Windows 操作系统中,HAL 其实是一个独立的  DLL (在这里你就可以简单的将 HAL 看做一个 DLL) 

通过 HAL 可以实现隔离掉硬件的差异,也就是上层的模块无需考虑下层真实硬件之间的差异性,

因为上层模块不能够直接访问硬件,而是通过 HAL 来访问硬件的,

所以对于硬件的差异性,在 HAL 中即可以解决掉,而不需要上层模块来解决,

这样做的好处是很显然的,那就是我们的上层模块都是一样的,也就是当硬件改动时不需要变,

只要提供针对不同的硬件的 HAL 即可以实现在不同的硬件上运转我们的上层模块。

由于我们的 PC 上的硬件不一致,所以必须有多个 HAL 。

比如我的 PC  的处理器为  Intel 的,而你的 PC 的处理器为 AMD 的,

我的处理器为单核的,而你的处理器为四核的,

那么这就会造成硬件上的不一致,为了解决这种不一致呢,

Windows 在打包的时候会打包多个 HAL 进来,比如一个 HAL 针对单核,一个 HAL 针对多核,

Windows 在安装的时候就会自动的识别出你的处理器是 AMD 还是 Intel ,是多核还是单核处理器,

然后 Windows 就会自动选择一个合适的 HAL  给你安装,同时,将 HAL 名字修改为 HAL.DLL

而在 WS03SP1HALS 目录下的也就是这些个 HAL 

比如我的 PC 的处理器为 Intel  x86 系列的双核处理器,