WDF驱动中KMDF与UMDF区别
抄的
早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备。从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,但是,如果使用DDK来开发WDM,其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易,因此,一般用户都是使用WinDriver、DriverStudio之类的第三方工具。为改善这种局面,从Vista开始,微软推出了新的驱动程序开发环境WDF(Windows Driver Foundation )。
WDF和WDM的关系有点类似于MFC和Windows SDK的关系,有编程经验的人一看就知道为何WDF开发比WDM容易了。
WDF有KMDF(内核模式的驱动程序)和UMDF(用户模式的驱动程序)两种模式:
1、内核模式驱动程序 KMDF(Kernel-Mode Driver Framework): 这类驱动程序作为内核模式操作系统组件的一部分执行,它们管理I/O、即插即用、内存、进程和线程、安全等。内核模式驱动程序通常为分层结构。 关于KMDF更多的内容,可参阅 MSDN中“Getting Started with Kernel-Mode Driver Framework ”。
2、用户模式驱动程序 UMDF(User-Mode Driver Framework): 这类驱动程序通常提供 Win32 应用程序与内核模式驱动程序或其他操作系统组件之间的接口。用户模式驱动程序支持基于协议或基于串行总线(如摄像机和便携音乐播放器)的设备。关于KMDF更多的内容,可参阅 MSDN中“ Introduction to UMDF“。
3、无论内核模式的驱动程序或者用户模式的驱动程序,都使用同一环境进行构建,这一环境称为WDK;都采用同一套对象模型构建,采用同一个基础承载,这个基础就是WDF。由于WDF驱动模型提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。从现在开始,掌握Windows设备驱动程序的开发人员,由过去的“专业”人士,将变为“普通”大众。因此,像WinDriver、DriverStudio之类的第三方工具也随之退出历史舞台。
4、KMDF是Windows系统底层驱动,文件名为:*.SYS,Vista为2万多外设提供了KMDF,其中也包括USB2.0,因此对于具有USB2.0协议的FX2,只需编写与FX2相关的UMDF即可;UMDF是用户层驱动,文件名为:*.DLL。
WDF驱动中KMDF与UMDF区别的更多相关文章
- SQL Server JDBC驱动中sqljdbc和sqljdbc4区别
为了支持向后兼容以及可能的升级方案,JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库:sqljdbc.jar 和 sqljdbc4.jar. qljdbc.jar 类库提供对 ...
- WDF驱动的编译、调试、安装
编译和调试使用WDK编译,源代码应包括wdf.h,ntddk.h以及KMDF_VERSION=1,编译使用/GS.KMDF包括以下库:1). WdfDriverEntry.lib(编译时绑定):驱动入 ...
- 内核驱动中常见的miscdevice、platform_device、platform_driver
最近在看驱动模型,是越看越糊涂,以前接触比较多的都是一些字符驱动,对字符驱动的框架有一定的了解.后来因为想在驱动中实现设备文件的创建,又了解了一下,sysfs文件系统和udev设备文件系统(这两个是两 ...
- JDBC 中preparedStatement和Statement区别
一.概念 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.PreparedStatement 和 CallableStatement三种方式 ...
- Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】
在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...
- Linux 驱动框架---驱动中的中断
在单片机开发中中断就是执行过程中发生了一些事件需要及时处理,所以需要停止当前正在运行的处理的事情转而去执行中断服务函数,已完成必要的事件的处理.在Linux中断一样是如此使用但是基于常见的中断控制器的 ...
- 浅析mybatis中${}和#{}取值区别
mybatis作为一个轻量级的ORM框架,应用广泛,其上手使用也比较简单:一个成熟的框架,必然有精巧的设计,值得学习. 在使用mybatis框架时,在sql语句中获取传入的参数有如下两种方式: ${p ...
- linux驱动中printk的使用注意事项
今天在按键驱动中增加printk(KERN_INFO "gpio_keys_gpio_isr()\n");在驱动加载阶段可以输出调试信息,但驱动加载起来后的信息,在串口端看不到输出 ...
- (转载)MongoDB C#驱动中Query几个方法
MongoDB C#驱动中Query几个方法 Query.All("name", "a", "b");//通过多个元素来匹配数组 Query ...
随机推荐
- Go 开发关键技术指南 | Go 面向失败编程 (内含超全知识大图)
作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 关注"阿里巴巴云原生"公众号,回复 Go 即可查看清晰知识大图! 导读:从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的 ...
- Django+Celery+redis kombu.exceptions.EncodeError:Object of type is not JSON serializable报错
在本文中例子中遇到问题的各种开发版本如下: Python3.6.8 Django==2.2 celery==4.4.0 kombu==4.6.7 redis==3.3.0 大概的报错如下截图: 是在开 ...
- Docker学习笔记(1):CentOS7安装Docker
Docker是一个基于Go语言实现的开源应用容器引擎,通过对应用组件的封装.分发.部署.运行等生命周期的管理,使程序及其运行环境能够做到"一次封装,到处运行". Docker架构 ...
- Django - 后台admin不显示带auto_now, auto_now_add选项的字段
https://stackoverflow.com/questions/6386172/datetimefield-doesnt-show-in-admin-system 解决办法 class Rat ...
- JAVA基础学习(4)之循环控制
4循环控制 4.1 for循环 4.1.1 for循环 固定次数for循环 先执行一次do-while循环 其他while循环 Scanner in = new Scanner(System.in); ...
- js遍历传参给html
<p id="subp" hidden><button id= "upsub"shiro:hasPermission="sys:me ...
- ubuntu16 安装opencv3.4.2
下载好opencv3.4.2.zip 执行命令: unzip opencv3.4.2.zip 进入解压后的文件夹: cd opencv3.4.2/ 创建编译路径: mkdir release 进入新创 ...
- Goland debug失败
在使用goland使用debug调试代码出现 API server listening at: 127.0.0.1:56871could not launch process: debugserver ...
- dfs关于按钮问题(flip游戏POJ1753)以及和bfs的区别+板子
DFS深度搜索:之前一直和bfs的用法搞不太清楚:写了题才能慢慢参透吧,看了别的博客的代码,感觉能更好理解dfs在图中的应用: 这个题目的意思是一个人去救另一个人,找出最短的寻找路径: #includ ...
- [USACO12JAN]牛联盟Bovine Alliance
传送门:https://www.luogu.org/problemnew/show/P3043 其实这道题十分简单..看到大佬们在用tarjan缩点,并查集合并.... 蒟蒻渣渣禹都不会. 渣渣禹发现 ...