Kernel
  Kernel里面实现的是操作系统基本的功能,比如线程调度和同步等等。
  Kernel的代码是平台相关的,用来处理与平台相关的一些功能,比如中断和异常分发。
  Kernel也会通过WDK接口向驱动导出一些函数,比如Ke[XXXX]
  kernel与executive的区别在于,kernel几乎不做任何决策,只是提供基础的支持功能。
  kernel自己做决策的是线程的调度与分发。
  kernel objects
  kernel提供的object是基本的对象,方便进行创建和管理。
  而executive用到的objects大都是特化的object,里面包含不同的overhead,因此往往一个executive object,包含几个的kernel objects.
  kernel objects分为几类:
  1. Control Objects
  APC objects, DPC objects, Interrupt objects
  2. Dispatcher Objects
  kernel thread, mutex, event, kernel event pair, semaphore, timer, waitable timer
  Kernel Processor Control Region(KPCR)
  用来保存与processor相关的信息,也可以理解为与平台相关的信息。
  比如:
  Interrupt Dispatcher Table(IDT)
  Task-State Segment(TSS)
  Global Descriptor Table(GDT)
  在32位Windows操作系统中,fs:[0]可以索引到KPCR;
  在x64 Windows操作系统中, gs:[0]可以索引到KPCR;
  在IA64 Windows操作系统中, 0xE0000000FFFF0000可以索引到KPCR;
  在KPCR中有一个内嵌的结构体叫KPRCB(Kernel Processor Control Block)
  里面保存的是不公开的内容,主要是与Processor相关的信息,比如Nonpaged pool和paged pool的lookaside list保存在KPRCB中。
  HAL
  Device Driver
  System Processes
  系统进程
  1. Idle Processes
  Idle 和 System是两个比较特殊的进程,因为这们不是完整意义的进程,没有实际的映像文件。
  Idle Process是0号进程。
  2. Interrupts and DPCs
  这两个不是进程,而是中断发生时,内核提供的异步处理机制。
  但是这两种全程会消耗CPU,因此为了提供更多的关于CPU使用情况的细节,许多系统监视器都会将二者列出来。
  3. System Process and System Threads
  4号进程。
  提供了一个供内核线程运行的进程空间,但是注意,这个进程只包含内核地址空间,而不包含用户地址空间。
  内核和驱动可以调用PsCreateSystemThread来创建System Thread,通常只在需要Thread Context的情况下才会创建System Thread,比如
  ISR和DPC不是System Thread。
  4. Session Manager (Smss.exe)
  负责初始化后阶段的内核态进程创建了smss.exe这个进程,这是用户态的第一个进程。
  Session Manager还有很多特殊的任务,比如完成delayed rename/delete file operation。
  Session Manager会创建Subsystem server processes(csrss.exe),csrss.exe进程会创建剩余的system processes。
  对于Session 0,smss.exe会创建wininit.exe进程,除此之外,smss.exe会为每个session创建一个Winlogon.exe进程。
  5. Winlogon, LogonUI, LSASS和Userinit
  SAS(Control + Alt + Delete), Secure Attention Sequence,是用来保证用户会调用到正确的Winlogon进程,因为这三个键的组合是不允许在用户态被拦截的。
  Winlogon进程会在需要的情况下,创建LogonUI,用来提供用户登陆界面。
  LSASS服务进程会提供认证的功能,认证成功后,lsass会创建一个access token,对于UAC情况下,对于拥有管理员权限的用户,还会创建一个权限受限的access token,并且让用户在正常情况下使用这个受限的access token。
  6. Service Control Manager (SCM)
  services,也是用户态的无界面进程,和Linux的Daemon Process一样。
  service进程通常不与logon user产生任何互动。
  services也是正常的进程,只是它们的生命周期是通过特殊的API与SCM通信来控制的。
  services可以拥有自己的执行映像,比如lsass.exe,也可以只提供一个dll,而借用通用的svchost.exe来启动进程。