系统软件包括哪些 常见的驱动程序


学习探索:深入驱动开发的世界

第一章:启动驱动开发的旅程

开场

亲爱的学员们,欢迎回到课堂!在上一节,我们熟悉了驱动开发环境的搭建,并成功创建了一个空白的驱动程序项目。今天,我们将进一步挖掘驱动程序的内在秘密,探索其基本结构和编程模型。

第二课:揭开驱动的神秘面纱

一、驱动的种类概述

在Windows系统中,驱动程序被分为两大类,它们各自拥有独特的特性和功能。

1. 内核模式驱动(Kernel-Mode Drivers)

简介:运行在系统内核空间,拥有最高权限,能够直接访问硬件资源。这类驱动因为其特殊性,往往担任着最底层与硬件的沟通任务。

主要类型:WDM(Windows Driver Model)驱动、KMDF(Kernel-Mode Driver Framework)驱动等。

作用:直接或间接控制硬件设备。

2. 用户模式驱动(User-Mode Drivers)

简介:在用户空间运行,权限较低,但能够通过调用内核模式驱动来间接访问硬件资源。

主要类型:UMDF(User-Mode Driver Framework)驱动等。

应用场景:用于简单设备如打印机、扫描仪等。

二、KMDF的骨架与核心

对于那些致力于内核驱动开发的学员们,KMDF无疑是我们手中的利剑。

1. KMDF的基本结构

一个典型的KMDF驱动程序由几个关键部分组成:

- DriverEntry函数:作为驱动的点,负责初始化重要资源。

- EvtDriverDeviceAdd函数:当系统检测到新设备时,负责设备的创建设备上下文和配置。

- EvtIoXXX回调函数:处理各种I/O请求,如读、写、IOCTL等。

- 其他辅助功能函数:如中断处理、定时器等功能的实现。

2. KMDF的编程模型

KMDF提供了一套面向对象的编程模型,涉及多个核心对象如WDFDRIVER、WDFDEVICE等,这些对象是驱动开发的核心。通过操作这些对象,开发者能够实现设备的各种操作和管理功能。

三、实战演练——KMDF驱动的简单实现

为了帮助大家更好地理解KMDF驱动的开发流程,接下来我们通过一个简单的加载和卸载功能的KMDF驱动示例来实战操作。请同学们仔细阅读代码及其解释。

```c++

// 这里仅是代码示例的部分展示,注意这里不应完全照搬原样,应根据实际情况和具体要求进行调整和完善。请仅用作学习和理解KMDF的参考。

```

代码解释(部分展示):

- 包含必要的头文件(如ntddk.h和wdf.h)。

- 定义DriverEntry作为驱动的点。在这个函数中,我们进行一些初始化工作,并准备响应I/O请求等。

- 描述了如何设置驱动程序类型为非即插即用(表示与具体硬件不直接关联)。还展示了如何使用DbgPrintEx进行调试输出等关键步骤。

- 提供了EvtDriverUnload函数的简单描述,该函数在驱动程序卸载时被调用。

四、编译与测试的步骤

- 将代码复制到你的Visual Studio驱动程序项目中。

- 使用Visual Studio进行编译和生成(即右键点击项目并选择“生成”)。

- 将生成的.sys文件复制到目标机器或虚拟机上的特定目录中,并使用合适的驱动加载工具进行测试。

总结