理解Windows内核模式与用户模式



1、基础

运行 Windows 的计算机中的处理器有两个不同模式:“用户模式”和“内核模式”。根据处理器上运行的代码的类型,处理器在两个模式之间切换。应用程序在用户模式下运行,核心操作系统组件在内核模式下运行。多个驱动程序在内核模式下运行,但某些驱动程序在用户模式下运行。

当启动用户模式的应用程序时,Windows 会为该应用程序创建“进程”。进程为应用程序提供专用的“虚拟地址空间”和专用的“句柄表格”。由于应用程序的虚拟地址空间为专用空间,一个应用程序无法更改属于其他应用程序的数据。每个应用程序都孤立运行,如果一个应用程序损坏,则损坏会限制到该应用程序。其他应用程序和操作系统不会受该损坏的影响。

用户模式应用程序的虚拟地址空间除了为专用空间以外,还会受到限制。在用户模式下运行的处理器无法访问为该操作系统保留的虚拟地址。限制用户模式应用程序的虚拟地址空间可防止应用程序更改并且可能损坏关键的操作系统数据。

在内核模式下运行的所有代码都共享单个虚拟地址空间。这表示内核模式驱动程序未从其他驱动程序和操作系统自身独立开来。如果内核模式驱动程序意外写入错误的虚拟地址,则属于操作系统或其他驱动程序的数据可能会受到损坏。如果内核模式驱动程序损坏,则整个操作系统会损坏。

此图说明了用户模式组件与内核模式组件之间的通信。

框图:用户模式组件和内核模式组件


2、内核层次架构


下面是内核的层次划分:

硬件抽象层(HardwareAbstraction Layer) (HAL) (hal.dll)
最底层隔离硬件的,底层的第三方驱动程序就运行在这层。

内核(Kernel)
实现操作系统的一些底层服务,比如线程调度,多处理器的同步,中断/异常处理等。

执行体(Executive)ntoskrnl.exe
实现基本的操作系统服务,比如基本的线程进程管理,内存管理, IO及进程间通讯等。

窗口图形子系统(Windows Graphics Subsystem)
win32K.sys在内核层实现,用户界面相关都依赖该层,User32.dll的大部分功能都由该层实现。

用户层关键进程

Windows系统在用户层有几个关键的系统进程:

Smss.exe(session manager Subsystem)
关于Session的概念可以参考我的这篇Sessions, Window Stationsand Desktops在操作系统启动时会创建一个不与任何Session关联的Smss.exe管理者实例,然后当有用户登录时它会为每个Sessin拷贝一份与之关联的Smss.exe实例,然后由该关联的Smss.exe实例启动winlogon.execsrss.exe.

WinLogon.exe
该进程管理用户的登录和注销,我们按Ctrl+Alt+Del出现的界面和登录后出现的桌面窗口都是由它启动的。

Csrss.exe( Client/Server Runtime Subsystem)
我们可以看到我们的桌面窗口(GetDesktopWindow)是由该进程创建的,该进程主要负责Win32子系统的用户模式部分(内核模式部分由win32k.sys实现)

Lsass.exe(Local Security Authority Subsystem)
WinLogon.exe通过该进程验证用户登录,登录后产生安全访问令牌对象,通过该令牌创建Explorer.exe,我们其他用户进程都由Explorer.exe启动,并且继承了该令牌权限。

Services.exe
该进程简称为SCM(NT Service Control Manager),该进程负责启动用户态一些特殊进程,也就是我们通常所说的服务程序。


3、用户模式调用内核模式的方式

4、内核模式调用用户模式

    可以通过IOCTL的上下文传递,也可以通过APC (Asynchronous Procedure Call)直接调用。

5、进程间的通信

另外一种非常强大的用户模式与内核模式通讯方式,同时也支持进程间通讯,该方式就是ALPC(Advanced Local Procedure Call)该方式被操作系统大量使用, WinRT中的Broker进程也用到了它
该方式实际上就4个核心函数:nt!NtAlpcSendWaitReceivePort,nt!NtAlpcCreatePort, nt!NtAlpcConnectPort, Nt!AplcAcceptConnectPort, 大概原理如下:







  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows内核安全与驱动开发》是一本针对Windows操作系统内核安全和驱动开发的重要指南。该书主要介绍了关于Windows内核安全和驱动开发的基础知识和技术,对于希望深入了解和学习这方面知识的读者来说具有很高的参考价值。 首先,该书详细介绍了Windows内核的架构和组成,包括内核模式用户模式、进程管理、内存管理、线程调度、异步I/O等方面的知识。这些基础知识对于理解Windows操作系统的工作原理和机制非常重要,是进行内核安全和驱动开发的基础。 其次,该书详细介绍了Windows内核安全的相关知识,包括安全模型、访问控制、进程间通信安全等方面的内容。这些知识对于保护操作系统和应用程序的安全非常重要,在进行驱动开发时需要充分考虑其中的安全风险和防护措施。 最后,该书还介绍了驱动开发的基本原理和技术,包括驱动的加载和卸载、驱动和设备的通信、驱动的错误处理和调试等方面的知识。这些知识对于开发高质量的Windows驱动程序非常重要,能够帮助开发者更好地理解和掌握驱动开发的要点和技巧。 总之,《Windows内核安全与驱动开发》是一本非常实用和重要的书籍,对于想要深入了解Windows内核安全和驱动开发的读者来说具有很高的参考价值。通过学习这本书,读者可以对Windows内核和驱动开发有更深入的了解,掌握相关的基础知识和技术,从而能够开发出更加安全可靠的驱动程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值