Windows WDM驱动开发深度解析:从入门到卸载流程

需积分: 12 6 下载量 36 浏览量 更新于2024-08-25 收藏 1.05MB PPT 举报
WDM驱动是Windows驱动模型的一种高级形式,全称为Windows Driver Model(Windows设备驱动模型)。它是在NT内核驱动模型基础上发展起来的,旨在提供更高效、模块化的设备驱动开发框架。WDM的核心概念包括: 1. **层次结构**:WDM驱动由两个关键部分组成:物理设备对象(Physical Device Object, PDO)和功能设备对象(Function Device Object, FDO)。PDO由总线驱动创建,代表硬件设备,而FDO则是驱动程序实际操作的接口,由DriverEntry中的函数(如HelloWDMAddDevice)初始化并附加到PDO上。 2. **DriverEntry**:这是每个WDM驱动的入口点,位于INIT标志内存中,当驱动加载时由内核的I/O管理器自动调用。在这个阶段,驱动程序会创建FDO,并将其注册到系统中,以便接收和处理后续的I/O请求。 3. **IRP处理**:I/O Request Packet (IRP)是WDM中的核心数据结构,用于封装设备驱动程序与内核之间的通信。IRP包含了设备操作的详细信息,如操作类型(例如IRP_MJ_PNP用于设备的安装和卸载)、设备对象引用等。驱动程序通过处理这些IRP来完成设备操作。 4. **INF文件**:安装程序 INF 文件是安装驱动的关键,它指示Windows如何识别、加载和配置驱动程序。INF文件包含了驱动程序的基本信息、依赖关系以及必要的注册表项。 5. **模式切换**:从用户模式到内核模式的切换是通过操作系统提供的机制,如Windows XP的`sysenter`指令或Windows 2000的`int2eh`,确保驱动程序在执行敏感操作时具有足够的权限。 6. **NTDDK和WDM API**:NTDDK是Windows NT驱动开发者工具包的一部分,提供了编写WDM驱动的接口。它定义了DriverEntry、IoCreateDevice等函数,驱动程序需要使用这些API来创建和管理设备对象。 7. **服务加载**:WDM驱动通常以服务的形式运行,可以通过命令行工具如`netstart`和`netstop`来启动和停止服务,比如`netstart HelloWorld`。 8. **卸载过程**:卸载WDM驱动时,必须首先解除FDO与设备栈的连接,然后调用UnloadNTDriver函数进行正确的清理。 9. **功能子系统**:Windows操作系统的各个功能子系统(如图形用户接口、控制台I/O、对象管理器等)为驱动程序提供了丰富的接口,使得驱动程序可以与Windows环境无缝集成。 WDM驱动开发涉及到了操作系统内核模式编程、设备通信、I/O管理和注册表管理等多个方面,需要开发者深入理解Windows内核的工作原理,并熟悉相关的API和文件结构。