用户模式与内核模式

从Intel80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较低级别的代码不能随意调用高级别的代码和访问较高级别的数据,而且也只有运行在ring0层的代码可以直接对物理硬件进行访问。由于WindowsNT是一个支持多平台的操作系统,为了与其他平台兼容,它只利用了CPU的两个运行级别。一个被称为内核模式,对应80x86的ring0层,是操作系统的核心部分,设备驱动程序就是运行在该模式下;另一个被称为用户模式,对应80x86的ring3层,操作系统的用户接口部分(就是我们通常所说的win32 API)以及所有的用户应用程序都运行在该级别。操作系统对运行在内核模式下的代码是不设防的,所以不管是建设还是破坏内核模式下的编程都是值得去研究的。

如下图所示为Windows操作系统驱动程序模型:

Windows驱动程序既可以运行在用户态也可以运行在核心模态。

用户态与核心太驱动程序的区别

♦ 用户态的驱动程序运行在非特权处理机模式(nonprivileged processor mode)上,其他一些被保护的子系统代码也运行在该模式上。用户态的驱动程序不能获得系统数据的存取权,除非调用Win32 API或者系统服务。

♦ 核心态驱动程序作为操作系统的一个组成部分被执行——支持一个或多个受保护的子系统的操作系统底层组件。

用户态和核心态驱动程序有不同的结构,不同的入口点和不同的系统接口。一个设备是需要一个用户态驱动程序还是需要一个核心态驱动程序依赖于该设备的类型和操作系统对它提供的支持。

一些设备驱动程序可以完全地或部分地运行在用户态。用户态驱动程序没有堆栈空间的限制,可以访问Win32 API,并且容易调试。

大多设备驱动程序运行在核心态。核心态驱动程序可以完成某些受保护的操作,并且可以访问用户态驱动程序不能访问的系统结构体(system sturcture)。然而,访问权限的提高当然也要付出相应的代价——调试的艰难,系统随时面临毁坏的危险。当代码运行在有特权的核心态环境中时,操作系统对代码所请求的数据的完整性和有效性的检查将大大减少。

为了方便,应该用高级语言(high-level language)来编写驱动程序,通常,C适合用来编写核心态驱动程序,C或C++则适合用于编写用户态驱动程序。

用户模式与内核模式是如何交互的呢

当用户模式程序需要读取设备数据时,它就调用Win32 API函数,如ReadFile。Win32子系统模块(如KERNEL32.DLL)通过调用平台相关的系统服务接口实现该API,而平台相关的系统服务将调用内核模式支持例程。在ReadFile调用中,调用首先到达系统DLL(NTDLL.DLL)中的一个入口点,NtReadFile函数。然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。
系统中还有许多与NtReadFile相似的服务例程,它们同样运行在内核模式中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给它们的参数以保护系统安全或防止用户模式程序非法存取数据,然后创建一个称为“I/O请求包(IRP)”的数据结构,并把这个数据结构送到某个驱动程序的入口点。在刚才的ReadFile调用中,NtReadFile将创建一个主功能代码为IRP_MJ_READ(DDK头文件中的一个常量)的IRP。实际的处理细节可能会有不同,但对于NtReadFile例程,可能的结果是,用户模式调用者得到一个返回值,表明该IRP代表的操作还没有完成。用户模式程序也许会继续其它工作然后等待操作完成,或者立即进入等待状态。不论哪种方式,设备驱动程序对该IRP的处理都与应用程序无关。

驱动程序完成一个I/O操作后,通过调用一个特殊的内核模式服务例程来完成该IRP。完成操作是处理IRP的最后动作,它使等待的应用程序恢复运行。

用户模式与内核模式(2)相关推荐

  1. windows用户模式与内核模式

    对于Windows操作系统的编程一般来说已经涉及到了较深的领域,针对该问题提出几家之言,均为转载: 一. 为了防止用户程序访问并篡改操作系统的关键部分,Windows使用了2种处理器存取模式(事实上W ...

  2. 理解用户模式和内核模式(译)

    原文来自:https://zryfish.github.io/computer%20related/2015/08/28/user-mode-and-kernel-mode/ 28 Aug 2015 ...

  3. 用户模式和内核模式(线程级)

    用户模式和内核模式区分主要是因为,为了计算机系统的正常安全运行,有些硬件资源(如:中断装置)和特权指令是不可以对用户进程开放的,所以区分了两种模式. 内核模式和用户模式 内核空间存放的是操作系统内核代 ...

  4. 用户模式 VS 内核模式(1)

    用户模式: 通过windows启动的任何一个进程都在用户模式(user mode)下运行,在这种模式下的进程不能访问其它进程的资源,除非通过API调用.在这种模式下运行的程序不能处理中断(interr ...

  5. 深入解析windows XP/2003:内核模式和用户模式

    为了避免windows应用程序访问和修改关键的操作系统数据,windows使用了2种处理器访问模式(即使windows在底层处理器支持多于2种以上的模式):用户模式和内核模式. 为什么windows只 ...

  6. 理解Windows内核模式与用户模式(新)

    版权声明:本文为博主原创文章,未经博主允许不得转载.  1.基础 运行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式".根据处 ...

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

    内核层次架构 windows程序运行分为内核模式和用户模式,内核模式可以访问所有的内存地址空间, 并且可以访问所有的CPU指令.一般程序运行在用户模式, 通过系统调用切换到内核模式执行系统功能,Win ...

  8. 用户模式 内核模式 linux,linux – “内核模式”和“用户模式”硬件...

    内核模式和用户模式是硬件功能,特别是处理器的功能.专为中高端系统(PC,功能手机,智能手机,除最简单的网络设备之外的所有系统--)设计的处理器都包含此功能.内核模式可以使用不同的名称:管理程序模式,特 ...

  9. cs寄存器 x86 特权模式_Windows操作系统管理进程和线程:内核模式和用户模式

    根据前面的介绍,NT内核会把操作系统的代码和数据映射到系统中所有进程的内核空间中.这样,每个进程内的应用程序代码便可以很方便地调用内核空间中的系统服务.这里的"很方便"有多层含义, ...

最新文章

  1. ACMNO.13求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。 输入 n 输出 和 样例输入 5 样例输出 153
  2. 什么是随机存取与顺序存取?
  3. 买房签定金合同或转让合同之前需要了解到的一些问题
  4. iOS开发-ViewController的生命周期和切换
  5. Java:数列排序 给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
  6. 接到老大的任务,要求开发内部进销存系统
  7. java中接口有什么作用?请创建一个接口(举例)
  8. 这个路由器漏洞已存在12年,可影响全球数百万台设备引发供应链攻击
  9. flex 平铺布局_Flex布局的个人见解~阮一峰的网络日志
  10. 项目经理的三个立足点
  11. 游戏编程和计算机编程一样吗,学数控编程和电脑编程区别是什么?
  12. 2021计算机组装视频,2021年做影视后期电脑配置单推荐PR AE软件视频后期电脑组装...
  13. 用户绑定手机号的思考
  14. 什么是市盈率 什么是市盈率的概念
  15. HTML5、css3、js实现3D相册
  16. 高德地图猎鹰sdk服务service Id的创建
  17. CMA-ES算法解决连续优化问题
  18. Nginx关闭后,网页仍能访问(缓存问题)
  19. 人工智能、核战争与白宫陷落
  20. 用原生JS写一个网页版的2048小游戏(兼容移动端)

热门文章

  1. win7 clr20r3程序终止_mscorsvw.exe是什么进程 win7系统怎么禁用mscorsvw.exe进程【禁用方法】...
  2. 使用驱动器f:中的光盘之前需要将其格式化_硬盘无法使用,用DiskPart进行分区和格式化,非常简单...
  3. 2020-05-02 自动控制原理常用术语
  4. nginx出现404和403错误
  5. cmd下的一些小技巧
  6. .NET轻量级ORM框架Dapper入门精通
  7. webpack入门与笔记
  8. 表单验证以及下拉框应用
  9. Linux命令之初出茅庐
  10. 思科网络CCNA的学习笔记-关于IP和子网的计算