从上图上可以看出,windows内核主要层次划分为三个层次,以及windows子系统、文件系统、网络、设备驱动程序等几个部分。
- 硬件抽象层(Hardware Abstraction Layer,简称HAL):主要是把所有与硬件相关联的代码隔离到一个专门模块中,从而使上面的层次尽可能做到独立于硬件平台。
- 内核层或微内核层(micro-kernel):位于HAL硬件抽象层之上,主要包含了基本的操作系统原语和功能,如线程和进程、线程调度、中断和异常的处理、同步对象和各种同步机制。
- 执行体层(execution):提供供应用层或者内核驱动程序直接调用的功能和语义。包含一个内核管理器,用于一致地管理执行体中的对象。
执行体和内核层位于内核基本模块ntoskrnl.exe二进制模块中,二者的具体分工是:内核层实现操作系统的基本机制,执行体负责所有的策略的决定。执行体中的对象绝大多数封装了一个或者多个内核对象,并且通过某种方式(如句柄)提供给应用程序,体现了机制与策略分离的设计思想。
windows内核为用户模式代码提供了一组系统服务,供应用程序使用内核中的功能,并且是通过一组系统DLL,最终通过ntdll.dll切换到内核模式下的执行体API函数中,来调用内核中的系统服务。ntdll.dll是这种调用的桥梁。对于内核提供的每一个系统服务,该DLL都提供一个响应的存根函数,这些存根函数的名称以“Nt”作为前缀,如NtCreateProcess、NtOpenFile和NtSetTimer等。另外ntdll.dll还提供了许多系统级的支持函数,如映像加载函数(前缀Ldr)、windows子系统通信函数(前缀Csr)、调试函数(前缀Dbg)、系统事件函数(前缀Etw),以及一般的运行支持函数(前缀Rtl)和字符串支持函数等。