众所周知, 早期的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区别相关推荐

  1. win7构建成功helloworld驱动、WDF驱动中KMDF与UMDF区别

    做一个myhello.c, #include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver) {DbgPrint("goodb ...

  2. Windows驱动开发VXD/WDM/WDF/DDK/WDK的联系和区别

    背景介绍 首先,先从基础的东西说起,做任何程序的开发,你都需要一个配套的开发套件,专业术语叫做SDK(Software Development Kit,软件开发套件).比如:开发JAVA程序,我们可能 ...

  3. NT、WDM、WDF驱动概念

    一.概念介绍   NT是驱动模型:NT式驱动程序模型是一种比较老式的驱动程序模型,但适用于现有的Windows系统.NT式驱动模型没有固定的形式,最简单的NT式驱动程序模型这一特点,程序开发者可以编写 ...

  4. LINUX驱动模型中bus与platform_bus区别和异同

     LINUX驱动模型中bus与platform_bus区别和异同 首先要明确的是platform_bus是BUS的一个字集,也就是说platform_bus是BUS定义的一个总线类型.可以看到pl ...

  5. Linux的声卡驱动中ALSA与OSS的区别和简单流程介

    在声卡的驱动中一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构).OSS是一个商业声卡驱动程序,需要花钱购买.一般我们现在使用的是ALSA的声音架构. Advanced Linux ...

  6. 内核驱动中常见的miscdevice、platform_device、platform_driver

    最近在看驱动模型,是越看越糊涂,以前接触比较多的都是一些字符驱动,对字符驱动的框架有一定的了解.后来因为想在驱动中实现设备文件的创建,又了解了一下,sysfs文件系统和udev设备文件系统,必然就涉及 ...

  7. Linux设备驱动开发-linux驱动中的阻塞访问方式

    阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...

  8. Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程--网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  9. linux设备驱动中的module_init

    在linux中系统对驱动程序的加载提供了两种方式静态编译进内核和动态加载,并且驱动开发者通常会提供一个int xxx_init(void)函数,并通过诸如module_init(xxx_init).e ...

最新文章

  1. iOS设备屏幕像素总览
  2. SAP MM模块调研问卷
  3. 万字长文|线性代数的本质课程笔记完整合集!
  4. date数据要在前台显示
  5. 玩转oracle 11g(43):oracle导出空表
  6. 【OpenCV 例程200篇】35. 图像的投影变换(边界填充)
  7. Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现)
  8. 帆软 FR.i18n 消息关键字或隐藏加载关键字
  9. C# 不借助第三个变量实现两整数交换
  10. 树的最大独立集详解(C++)
  11. java 管理多线程_Java线程管理(一)多线程
  12. VB.NET连接远程Oracle
  13. 小妙招:教你如何查询获取企业工商数据
  14. 用ajax请求本地的json失效,通过jquery的ajax请求本地的json文件方法
  15. centos7的scp命令_Linux scp命令
  16. macOS Command - softwareupdate
  17. 使用python Mayavi 绘制矢量场图
  18. tp link拨号失败 服务器无响应,【求救】K2提示“等待PPP客户端连接”拨号失败...
  19. 渗透测试流程(基础理论)
  20. 错误 1 error MSB4062: 未能从程序集 C:\caffe\NugetPackages\OpenCV.2.4.10\buil

热门文章

  1. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )
  2. 【错误记录】Google Play 上架报错 ( 此版本不符合 Google Play 关于提供 64 位版本应用的要求 )
  3. 【Flutter】Flutter 布局组件 ( FractionallySizedBox 组件 | Stack 布局组件 | Positioned 组件 )
  4. 【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )
  5. 设置 myeclipse 编码格式
  6. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
  7. String 课后作业2
  8. DEDECMS模块插件制作举例-模块生成向导
  9. 记下来 关于InitCommonControls()
  10. GLUT及其函数的用法整理