从Intel80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较低级别的代码不能随意调用高级别的代码和访问较高级别的数据,而且也只有运行在ring0层的代码可以直接对物理硬件进行访问。由于WindowsNT是一个支持多平台的操作系统,为了与其他平台兼容,它只利用了CPU的两个运行级别。一个被称为内核模式,对应80x86的ring0层,是操作系统的核心部分,设备驱动程序就是运行在该模式下;另一个被称为用户模式,对应80x86的ring3层,操作系统的用户接口部分(就是我们通常所说的win32 API)以及所有的用户应用程序都运行在该级别。操作系统对运行在内核模式下的代码是不设防的,所以不管是建设还是破坏内核模式下的编程都是值得去研究的。
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的最后动作,它使等待的应用程序恢复运行。
转自:http://babybandf.blog.163.com/blog/static/6199353201011535430294/
分享到:
相关推荐
WDF下用户模式和内核模式之间的内存共享,张奇,谢军,Windows Driver Foundation (WDF) 是用于开发Windows 驱动程序的全新平台,也是微软推出的下一代的驱动开发模式。本文简单介绍了该平台下的一��
Windows内核支持两种类型的驱动:内核模式驱动(直接与内核交互)和用户模式驱动(通过I/O管理器进行通信)。 6. **中断处理** 中断是硬件向操作系统报告事件的方式,Windows内核有一套完整的中断处理机制,包括...
2. **内核模式与用户模式**:内核模式是指CPU运行在最高权限级别下,可以访问所有硬件资源;而用户模式则是在较低权限级别下运行,只能访问受限的资源。 3. **内核的功能**:包括但不限于进程管理、内存管理、文件...
驱动程序可以分为用户模式驱动和内核模式驱动,内核模式驱动拥有更高的权限,可以直接访问硬件资源,但也要求更高的稳定性。 系统调用是用户程序与操作系统交互的主要方式,例如读写文件、创建进程、设置时间等。...
Windows驱动开发主要包括用户模式驱动和内核模式驱动。用户模式驱动运行在较低权限级别,安全性相对较高,但性能受限;而内核模式驱动则拥有更高的权限,可以更直接地访问硬件,但同时也增加了安全风险。 在Windows...
5. **内核模式下的调试技术**:通过内核调试,可以分析内核运行状态,定位和修复内核级问题,但同时也可能成为攻击者利用的手段,需要妥善管理和使用。 驱动开发则包括以下关键知识点: 1. **驱动模型**:Windows...
首先,书中会详细介绍Windows内核的基础架构,包括内核模式与用户模式的划分,这是理解Windows操作系统运行机制的关键。内核模式下,操作系统拥有最高的权限,可以访问所有硬件资源;而用户模式则为应用程序提供了一...
2. **内核模式与用户模式** - Windows操作系统分为内核模式和用户模式。内核模式拥有最高的权限,可以直接访问硬件;用户模式则有较低的权限,需要通过系统调用来请求内核服务。 - 这种设计能有效防止用户程序误...
Windows有两类驱动:用户模式驱动和内核模式驱动,内核模式驱动对性能要求更高但安全性较低,用户模式驱动反之。 五、系统调用 系统调用是用户进程与操作系统内核交互的唯一途径,提供了诸如创建进程、读写文件、...
1. **驱动类型**:包括内核模式驱动(如设备驱动、文件系统驱动)和用户模式驱动(如滤波驱动、虚拟设备驱动)。 2. **DriverEntry**:驱动程序的入口点,初始化驱动对象、注册回调函数、分配资源。 3. **IRP(I/O...
例如,Windows Vista引入了用户模式驱动框架(User-Mode Driver Framework,UMDF),以提高驱动程序的稳定性和安全性,同时确保与旧版驱动的兼容。 为了实现兼容性,Windows内核采用了一些关键技术。例如,系统层...
Windows内核支持两种类型的驱动:用户模式驱动和内核模式驱动。内核模式驱动具有更高的权限,可以直接访问硬件,而用户模式驱动则运行在较低的权限级别,通常用于与硬件通信的简单任务。书中会详细讲解驱动开发过程...
2. **内核模式驱动程序**:这些驱动程序直接与硬件交互,负责设备的控制和管理。 3. **硬件抽象层(HAL)**:HAL提供了一个统一的接口来访问不同的硬件平台,使得操作系统可以在不同的硬件上运行而无需修改。 4. **...
1. 内核模式与用户模式:Windows操作系统采用两级权限模型,内核模式拥有最高权限,用于运行系统服务和驱动程序,而用户模式则为应用程序提供较低级别的访问权限。理解这两种模式的区别对于安全至关重要。 2. 保护...
在Windows系统中,驱动程序通常分为用户模式驱动和内核模式驱动。用户模式驱动运行在较低的安全级别,而内核模式驱动则拥有更高的权限,可以访问系统内存和硬件直接。 了解了基础概念后,我们将聚焦于Windows内核...
驱动程序分为用户模式驱动和内核模式驱动,内核模式驱动具有更高的权限,可以直接访问硬件。驱动程序通过IRP(I/O Request Packet)来接收和处理来自系统或应用程序的I/O请求。 五、中断处理 中断处理是操作系统...
Windows驱动分为用户模式驱动和内核模式驱动,内核模式驱动有更高的权限,能直接访问硬件,但编写时需严格遵循安全性规范。 3. **驱动开发**:驱动开发涉及C/C++编程、WinAPI、KMDF(Kernel-Mode Driver Framework...
内核安全方面,书中的内容可能涵盖以下主题:权限管理(如Ring 0、Ring 3的概念)、内核模式下的内存保护机制(如页表和页错误处理)、安全沙箱概念、安全编程实践以及如何避免缓冲区溢出、整数溢出等常见安全漏洞。...