4. HAL
  Hardware Abstract Layer
  用来隐藏与平台相关的细节,并且向上提供统一的API接口。
  5. Windowing and Graphics System
  窗口与绘图系统。用来提供GUI相关功能。
  这5个组件大部分都存在于一个Ntoskrnl.exe中,当然一些第三方的driver除外。
  Windows Subsystem
  Windows子系统包含两部分:
  即上面所描述的用户态的Environment Subsystem Service Processes和内核态的Windowing and Graphics System。
  用户态的Win32子系统服务进程
  [csrss.exe]
  Basesrv.dll
  Winsrv.dll
  Csrsrv.dll
  向Win32 Subsystem dll代表的client提供以下功能支持:
  1. Console Windows(命令行窗口,即不带GUI功能,不涉及到Win32k.sys)
  2. 创建和删除Process/Thread
  3. Side-by-Side(Sxs)支持
  等等。
  内核态的Win32k.sys驱动
  提供以下功能:
  1. 窗口管理器,以及与GUI相关的输入输出设备,消息传递等机制。
  2. 提供GDI绘图库。
  3. DirectX的支持(在另一个驱动Dxgkrnl.sys中实现)
  Ntdll
  与Subsystem dll不同,Ntdll是所有用户态进程与内核态进行交互的必经之路。
  ntdll包含两类函数:
  1. System Service Stub
  这些函数是调用内核Executive组件提供的系统服务的入口函数。
  函数内部包含与平台相关的代码,使代码的执行由用户态转入内核态执行,比如int 80H或者sysenter等等。
  在内核中与Stub对应的是SSDT,System Service Dispatch Table,根据ntdll的stub函数传入的系统调用号,从SSDT表中选择对应的service routine执行。
  2. Operating System Internal Support Functions
  这部分不是给应用程序使用的,而是给用户态的操作系统组件,比如System Support Processes和Environment Subsystem Service Processes来使用。
  包括下面几类:

 

Image Loader functions, Ldr[XXXX]
Heap Manager
Windows Subsystem Process Communication functions, Csr[XXXX]
Runtime Library Routines, Rtl[XXXX]
User-mode Debugging, DbgUi[XXXX]
Event Tracing for Windows, Etw[XXXX]
User-mode Asynchronous Procedure Call(APC) Dispatcher
Exception Dispatcher
subset of C Run-time(CRT)

  Executive
  executive,可以理解为内核的表现层
  包含以下几类函数集合:
  1. System Services
  导出给用户态进程使用的函数,其中大部分通过API向普通应用程序开放,而少部分则只能给用户态的操作系统组件使用。
  2. Device Driver
  3. WDK Interface Functions
  可以被内核态的驱动调用的函数,比如Zw[XXXX]
  4. WDK未导出的函数
  内核态的驱动也不能够调用
  比如Inbv[XXXX]
  5. 未导出的全局变量
  Internal IO manager support functions, Iop[XXXX]
  Internal Memory management support functions, Mi[XXXX]
  6. 各个模块内部的函数,没有被定义为全局符号