windows驱动开发4:WDM、WDF等驱动基本概念

article/2025/10/10 9:44:16

一、WDM

1、WDM

WDM是英文Windows Driver Model(WDM)的缩写,是Windows98和Windows2000使用的新的驱动程序设计规范。使用WDM使得硬件驱动程序更加稳定,让操作系统对硬件更加有效地控制硬件。

除了定义一个驱动程序与操作系统连接的标准接口以外,WDM也指明了驱动程序应该采用的更加模块化的设计。

2、DDK

Driver Developer Kit,开发2000/XP/2003的驱动开发包。

二、WDF

1、WDF

如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。

WDF是Vista及其以后OS的驱动模型,意为Windows Driver Foundation,此模型比WDM更先进、合理(微软是这样说的),将WDF中关于电源、PnP等一些复杂的细节由微软实现,所以在此模型上开发驱动会 比以前要简单。

WDF和WDM的关系有点类似于MFC和Windows SDK的关系。

2、WDK

Windows Driver Kit,其实WDK可以看做是DDK的升级版本,现在一般的WDK是包含以前DDK相关的功能,现在XP下也可以用WDK开发驱动,WDK能编译出2000-2008的各种驱动。

3、KMDF

内核模式驱动程序 KMDF(Kernel-Mode Driver Framework):这类驱动程序作为内核模式操作系统组件的一部分执行,它们管理I/O、即插即用、内存、进程和线程、安全等。内核模式驱动程序通常为分层结构。 关于KMDF更多的内容,可参阅 MSDN中“Getting Started with Kernel-Mode Driver Framework ”。

KMDF是Windows系统底层驱动,文件名为:*.SYS,Vista为2万多外设提供了KMDF,其中也包括USB2.0,因此对于具有USB2.0协议的FX2,只需编写与FX2相关的UMDF即可。

4、UMDF

用户模式驱动程序 UMDF(User-Mode Driver Framework):这类驱动程序通常提供 Win32 应用程序与内核模式驱动程序或其他操作系统组件之间的接口。用户模式驱动程序支持基于协议或基于串行总线(如摄像机和便携音乐播放器)的设备。关于KMDF更多的内容,可参阅 MSDN中“ Introduction to UMDF“。

UMDF是用户层驱动,文件名为:*.DLL。

三、WDF同WDM区别

1、 WDF将原来普通程序设计中基于对象的技术应用到了驱动开发中。WDM中虽也有对象模型,但与真正的基于对象技术根本就不是一回事。为了实现基于对象的技术,微软精心设计了对象模型并进行了封装。属性、方法、事件等等“一个都不能少”。

2、 无论内核模式的驱动程序或者用户模式的驱动程序,都采用同一套对象模型构建,采用同一个基础承载。这个基础就是WDF。

WDF虽然已经是经过封装和定义的对象模型,但对内核模式和用户模式对象来说,WDF又是两者的父对象。换言之两者都是继承了WDF才得到的,或者都是从WDF派生而来的。相对于内核模式,派生出的对象称为“KMD框架”即KMDF;相对于用户模式,派生出的模型称为“UMD框架”即UMDF。无论何种模式的框架,其内部封装的方法、执行的行为其实还是用WDM完成的。

3、 更重要的,也是微软反复炫耀的是封装了驱动程序中的某些共同行为:例如即插即用和电源管理就属于这种共同行为。因为大多数驱动程序中都需要处理即插即用和电源管理问题,据说这大概要上千行的代码,况且,没有相当水平还不一定能处理好。为了一劳永逸,WDF干脆将即插即用和电源管理封装了进了对象之内,一举成了对象的缺省(默认)行为。

4、 改变了操作系统内核与驱动程序之间的关系,WDM驱动程序中,一方面要处理硬件,另一方面要处理驱动程序与操作系统内核的交互。现在WDF则将驱动程序与操作系统内核之间进行了分离,驱动程序与操作系统交互工作交给框架内封装的方法(函数)完成,这样驱动开发者只需专注处理硬件的行为即可。这不仅避免了顾此失彼两面不周的弊端,也由于双方的分离,对操作系统内的某些改动,硬件制造商配套驱动程序的开发都有莫大的好处。

5、 两种模式的驱动程序(KMDF、UMDF)都使用同一环境进行构建,这一环境称为WDK。即KMDF,UMDF的开发环境都为WDK。

四、操作系统结构

1、操作系统结构

操作系统中,软件要么执行在用户模式中,要么执行在内核模式中。当用户模式程序需要读取设备数据时,它就调用 Win32 API 函数,如 ReadFile。

Win32 子系统模块(如 KERNEL32.DLL)通过调用平台相关的系统服务接口实现该 API,而平台相关的系统服务将调用内核模式支持例程。在 ReadFile 调用中,调用首先到达系统DLL(NTDLL.DLL)中的一个入口点,NtReadFile 函数。然后这个用户模式的 NtReadFile 函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为 NtReadFile。

2、驱动类型

  • 虚拟设备驱动程序(VDD):是一个用户模式部件,它可以使 DOS 应用程序访问 x86 平台上的硬件。VDD 通过屏蔽 I/O 权限掩码来捕获端口存取操作,它基本上是模拟硬件操作,这对于那些直接对裸机硬件编程的应用程序特别有用。尽管这种驱动程序在 Windows 98 和 Windows 2000 中共享一个名称并且有相同的功能,但实际上它们完全不同。我们用 VDD缩写代表这种驱动程序,用 VxD 缩写代表 Windows 98 中的虚拟设备驱动程序以示区别。
  • 内核模式驱动程序:分类包含许多子类。PnP 驱动程序就是一种遵循 Windows 2000 即插即用协议的内核模式驱动程序。准确地说,本书涉及的所有内容都是面向 PnP 驱动程序的
  • WDM 驱动程序:是一种 PnP 驱动程序,它同时还遵循电源管理协议,并能在 Windows 98 和 Windows 2000 间实现源代码级兼容。WDM 驱动程序还细分为类驱动程序(class driver)和迷你驱动程序(minidriver),类驱动程序管理属于已定义类的设备,迷你驱动程序向类驱动程序提供厂商专有的支持。
  • 显示驱动程序是用于显示和打印设备的内核模式驱动程序。
  • 文件系统驱动程序在本地硬盘或网络上实现标准 PC 文件系统模型(包括多层次目录结构和命名文件概念)。 
  • 遗留设备驱动程序也是一种内核模式驱动程序,它直接控制一个硬件设备而不用其它驱动程序帮助。这种驱动程序主要包括 Windows NT 早期版本的驱动程序,它们可以不做修改地运行在 Windows 2000 中。

http://chatgpt.dhexx.cn/article/buaBkM1M.shtml

相关文章

WDF开发详解

原文地址:https://blog.csdn.net/lang_eva/article/details/109676808 WDF开发详解 添加设备:hdwwiz KMDF驱动程序框架 KMDF 驱动程序框架由对象和事件回调例程构成。KMDF 框架中所有的事物都由对象表示,各种事件处理都由事件回调例程来完…

windows驱动开发-WDF编程

文章目录 前言WDF编程前的准备工作WDF编程创建驱动对象创建设备对象设备对象的回调函数链表操作驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参考自:junjiexing/libredirect 我不是从事驱动开发的专业人员,打酱…

javaWeb图书管理系统

javaWeb图书管理系统 1.项目简单介绍 a.项目用到的技术 IDE: Intellij IDEA语言:java,html ajax,js数据库:Mysql数据库可视化: navicatweb服务器:Tomcat框架:(mybatis&#xff0…

基于Java基础的图书管理系统

文章目录 前言一、前期准备二、需求分析三、核心代码开发1、 model 层1.1、 Book 类1.2、 User 类1.3、 NormalUser 类1.4、 Admin 类 2、 service 层2.1、 IOOperation 接口2.1、 AddBook 类2.2、 DeleteBook 类2.3、 ReplaceBook 类2.4、 ListAllBook 类2.5、 BorrowBook 类2…

图书馆管理系统 Java

目录 要求: 代码 Operate接口 Book类 Reader类 BookList类 ReadList 类 Infor类 InforList类 main 功能实现 改进 错误 总结 要求: 为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作&a…

图书管理系统【Java实现】

目录 一、项目简介二、项目演示1.登录界面2.图书借阅信息管理界面3.新增图书借阅信息界面4.修改图书借阅信息界面5.删除图书借阅信息界面 三、项目流程1.准备开发环境(1)下载所需文件(2)在IDEA中配置Maven(3&#xff0…

Java开发实现图书管理系统(超详细)

本文用Java代码实现图书代码管理系统,有些地方可能会有纰漏,希望各位大佬鉴赏!! 文章目录 文章目录 一、Java实现图书管理系统 1.1创建book包 二、创建图书管理系统的操作包 2.1创建Operation接口 三、创建User包 3.1创建User类 四…

Java实现图书管理系统(新手友好)

图书管理系统 一、初识工作二、具体实现三、代码book包Book类BookList类 operation包IOperation接口AddOperationBorrowOperationDelOperationDisplayOperationExitOperationFindOperationReturnOperation user包AdminUserNormalUserUser Main 一、初识工作 我们首先要清楚的是…

图书管理系统【java】

目录 🥇1.设计背景 🔎2.设计思路 🔑3.book包 📗3.1 Book类的实现 📕3.2 BookList类的实现(书架) 🔑4.user包 📙4.1 User类的实现 📒4.2 AdminUser(管理员&#x…

图书管理系统(Java)

📚 一、前言1.1整体框架 二、book包2.1Book2.2BookList 三、user包3.1、User3.2、Adminuser3.3、Normaluser 四、Operation包4.1、IOperation接口4.2、AddOperattion4.3、ShowOperation4.4、FindOperation4.5、DelOperation4.6、BorrowOperation4.7、ReturnOperatio…

图书管理系统(Java简单版)(完整代码+详解)

目录 详解: BookList类: InOperation接口 User类(父类) 和 Main类(这俩要一起看) 完整代码 book包 Book类 BookList类 operation包 AddBook类 BorrowBook类 DeleteBook类 FindBook类 Pr…

用java实现图书管理系统。

在学完java基础篇的时候,安排做了一个综合版的java基础项目,可以把之前学到的知识综合运用。 图书管理系统。 一.项目设计到的知识1.MVC设计模式思想(分包)>项目分包>MVC简单介绍 2.GUI(图形化界面)3…

Java实现简易版的【图书管理系统】

目录 🌎1.分析图书管理系统的功能 🌍 2.在IDEA中进行功能类的创建 🦄2.1 创建一个名为book的包,里面存放书相关的 🦄 2.2 创建一个名为Operation的包,里面存放对书的所有操作 🌎 3.进行用户…

Java图书管理系统(代码及详解)

图书管理系统在C、C、Java学习中我们都会进行练习来串联我们学习的一些知识以及使用场景,这里跟着我我带大家敲Java版本! 结果展示: 这是我们最终实现的图书管理系统,下面我们慢慢来 思路: Java是面向对象的语言特点…

JAVA实现简易的图书管理系统(含过程)

目录 设计背景 成果展示 设计思路 详细代码 book包 Book类 BookList类 operation包 IOperation接口 AddOperation类 BorrowOperation类 DelOperation类 DisplayOperation类 ExitOperation类 ReturnOperation类 user包 User类 Admin类 NormalUser类 Test类…

图书管理系统(Java实现)[附完整代码]

作者:爱塔居的博客_CSDN博客-JavaSE领域博主 专栏:JavaSE 作者专栏:大三学生,希望跟大家一起进步! 文章目录 目录 文章目录 一、图书管理系统菜单 二、实现基本框架 三、实现业务 3.1 打印所有图书 3.2 退出系统 3.3 查…

JAVA->实现图书管理系统

目录 一、图书管理系统展示 1.管理员 2.普通用户 ​编辑3.操作 二、图书管理系统基本实现思路 book --- 包 1.Book类 注意: 2.BookList类 注意: Opreration --- 包 Operration接口 1.AddOperation -- 增加图书 注意: 2. BorrowO…

Java实现简单的图书管理系统

图书管理系统 简介知识点类封装包继承接口多态 创建书(Book)书架(BookList)主函数(Main)用户(User)管理员(Administrator)接口(IOperation&#x…

Java基础之图书管理系统

一:建立信息表 为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表: 图书信息表——存储图书的基本信息,包括书号、书名、作者、出版社、出版日期、存馆数量、定价等…

Java实现简单图书管理系统

目录 利物浦是冠军! 一、图书管理系统的功能 二、图书管理系统的基本实现思路 1、Book包 2、user包 3、operation包 4、利用Main函数来连接所有包 三、图书管理系统的具体实现 1、Book包 (1)book类 (2)bookL…