为什么驱动程序一般在内核态工作

2024-05-04 06:55

1. 为什么驱动程序一般在内核态工作

驱动的种类很多,有你所说的设备驱动,但是还有一大类内核驱动。
要理解什么是驱动程序就要知道用户程序和内核的关系。 
应用程序都是用户程序,在执行用户程序是CPU处于用户态,有些特权指令无法运行。 
运行操作系统的代码时,CPU处于内核态,是可以执行特权指令的。 
驱动程序就是用户程序想完成个功能,但是必须要在内核态完成,所以就需要一个内核态的助手,这个助手就是驱动程序。驱动程序是加载到内核里的。

为什么驱动程序一般在内核态工作

2. 内核模式驱动的介绍

Windows系统中两种基本驱动程序之一,它的特点是:1、内核模式驱动程序将在执行其他应用程序代码(包括受保护的子系统代码)的非特权处理器模式中运行。除非用户模式驱动程序调用 Win32 API,否则将无法获取对系统数据的访问权。2、内核模式驱动程序将作为操作系统的执行部分(即支持一个或多个受保护的子系统的基础操作系统组件)运行。大多数设备驱动程序将在内核模式中运行。内核模式驱动程序可执行某些受保护的操作,并可访问用户模式驱动程序无法访问的系统结构。但随着访问权的增加,调试难度和系统损害几率也随之增大。

3. 内核模式驱动的设备驱动程序的分类:

Windows NT支持的设备驱动程序的范围很广,它们的分类如下:用户模式的驱动程序:◎ 虚拟设备驱动程序(Virtual Device Drivers/VDD)--用户模式的组件,用于为16位的MS-DOS应用程序提供虚拟的执行环境,虽然和Windows 95/98里面的VxD从功能上看起来是差不多的,但实际上两者根本不同。◎ 打印驱动程序--将与设备无关的图形转换到和打印机相关的指令内核模式驱动程序:◎ 文件系统驱动程序--实现标准的文件系统模型◎ 传统设备驱动程序--用于在没有其他驱动程序帮助的情况下控制硬件设备,它们是为老版本的Windows NT系统所写的,但是也可以不加修改地运行在Windows 2000/XP/2003系统上◎ 视频驱动程序--不用多介绍了吧?◎ 流驱动程序--支持多媒体设备,如声卡◎ WDM驱动程序--即Windows Driver Model,WDM包括对Windows NT电源管理和即插即用的支持,WDM可以在Windows 2000、Windows 98和Windows ME下实现,所以在这些操作系统下,WDM驱动程序在源代码级别是兼容的,在有些情况下,在二进制代码级别上也是兼容的在不同的资料中,对驱动程序的分类方法可能完全不同,但这并不是问题。从名称理解,设备驱动程序是用于控制某个设备的,但这个设备并不一定指的是物理上存在的设备,它也可以是虚拟设备。从文件结构上讲,设备驱动程序就是一个普普通通的PE格式文件,就像其他EXE或者DLL文件一样。设备驱动程序是一个可装载的内核模式模块,一般以SYS为扩展名。他们之间的不同点在于两种的装载方法是完全不同的。实际上,我们可以把设备驱动程序理解成一个内核模式的DLL,用于完成在用户模式下所不能完成的功能,本质上的不同就在于我们无法直接存取设备驱动程序的代码和数据(注:DLL的代码和数据是可以被直接存取的,这方面的资料可以参考《Windows环境下32位汇编语言程序设计一书》中的DLL一章),唯一的存取方式是通过I/O管理器,它提供了简单的驱动程序管理环境。刚开始学习KMD的开发的时候,你可能感觉自己根本就是一个菜虫(旁白:就是比菜鸟还低级,呵呵~~~),因为你以前用Windows API开发程序的经验在这里根本帮不上忙,即使你以前写过n多个(n趋向无穷大……)用户模式下的应用系统也没用。内核提供了完全不同的函数和数据结构,以至于你要从头开始了解,而且资料奇缺无比,一般情况下,可供参考的只有头文件。

内核模式驱动的设备驱动程序的分类: