windows分层模型

windows embedded 2009内核_驱动程序


硬件抽象层屏蔽了硬件实现功能的细节。

windows embedded 2009内核_windows_02


IRP为内核层重要的数据结构。

物理地址和虚拟地址

  • x64的cpu仅仅支持64位地址中的前48位。其中若虚拟地址为内核,则前16位为ffff;若虚拟地址为用户模式,则前16位为0000。
  • 用户能看到的所有地址都是虚拟地址,CPU当中的寄存器CR3,保存了页表基地址的物理地址
  • 虚拟地址转换物理地址

Windows Token

访问令牌(Access Token)是WIndows操作系统用于描述进程、线程安全上下文的对象。不同用户登录OS后都会创建一个Access Token,用户在创建进程、线程时这个Token会被不断复制。

OS通过进程、线程的Token来辨识特权信息。

windows embedded 2009内核_windows_03

Windows体系结构

windows embedded 2009内核_Windows_04


(Windows NT架构,WIn10的环境子系统发送变化了)

NTDLL.DLL:

  1. 将用户模式的请求转译为内核模式的服务
  2. 在这一层,处理器环境切换,如Context Switch、sysEnter/sysExit

子系统DLL:
包含Kernel32.dll、Advapi32.dll、User32.dll、Gdi32.dll等,都是核心windows子系统的dll

Ntoskrnl.exe:执行体和内核

win32k.sys:windows子系统的内核模式部分,(GUI相关,如窗口管理器、图像设备结构GDI等)

windows embedded 2009内核_windows_05

用户程序与系统交互方式:

windows embedded 2009内核_Windows_06


windows embedded 2009内核_驱动程序_07

三种方式:

  1. 用户程序通过子系统DLL,直接调用到执行体提供的函数
  2. 用户程序通过子系统调用到Win32k.sys (win32 User/GDI部分),直接从用户模式切换到内核模式
  3. 通过环境子系统调用到内核,需要4次环境切换

I/O管理器

Windows把各种I/O请求(网络IO、磁盘IO等)等抽象成了IRP结构I/O管理器将IRP分发给对应的驱动程序,一个驱动程序处理完后,通过I/O管理器将IRP传递给下一个驱动程序或者返回。

windows embedded 2009内核_虚拟地址_08


(NtReadFile()可以是同步IO或者是异步IO,由用户决定)

Windows安全性

windows embedded 2009内核_驱动程序_09


内核模式下有一个安全引用监视器。

用户模式下有其他安全引用组件:

  • WinLogon:windows中负责登录的组件
  • LSASS:负责本地安全策略管理,对活动目录管理、对SAM服务器(含账户数据、用户口令)管理

其他

基本工作方式

windows embedded 2009内核_虚拟地址_10

常用工具

windows embedded 2009内核_虚拟地址_11


windows embedded 2009内核_Windows_12