有关WINDOWS DRIVER的模式还有一个很重要的概念就是WDM模型,一般来说内核模式的驱动都要遵守WDM(除了某些需要支持WIN2000的驱动以外)那么什么是WDM呢?它是一套规则:

1.需要在头文件当中包含wdm.h而不是ntddk.h

2.一般来说WDM的驱动就被为(也就层级的概念)总线驱动,filter驱动,和功能驱动。(后面会说到他们之间的关系)

3.按WDM的规则来声明WDM OBJECT和DEVICE STACK。

4.支持PNP

5.支持电源管理

接下来就是什么时候使用WDM的问题了,这里面微软说的很清楚,一般来说新开发的驱动都要遵守WDM的规则。除非某些历史遗留的问题。当然我们后面讨论内核模式的驱动默认都是WDM的。NTDDK的就不说了,用得已经太少了。

下面咱们来介绍一下三种类型的WDM的驱动

1.BUS DRIVER(总线驱动)总线驱动是要直接面对IO和卡曹的。也需要检测子设备的接入也就是枚举BUS上的设备,另外还要对PNP的请求进行响应。

2.FUNCTION DRIVER(功能驱动)这是一个驱动的主要部分也就是主要实现功能的部分了。对设备进行读写操作和电源管理。

3.FILTER DRIVER这个比较难翻译,但是他的功能比较明显就是过滤分发和加工请求的。

我们来看这个架构图。

首先这个图当中返回用虚线画的圈都不是必备的层,在这里我们看到最底层就是BUS层了,它负责与IO打交道,上面对他的BUS请求进行过滤加工,然后给到底层的FILTER进行加工与过滤接下来给FUNCTION DRIVER进行功能实现。然后再发给更上层的FILTER进行处理。

接下来咱们举一个例子看一下。

比如这个例子当中在USB HUB上接入了N个设备,那么按照咱们上面说的,USB的HUB就需要枚举它上面的设备属于BUS DRIVER,而PCI BUS驱动也肯定属于BUS DRIVER。而USB上面的设备那个JOYSTICK它属于HID设备(HUMAN INPUT DEVICE)也就是人体输入设备他可以有现成的HID CLASS DRIVER的DLL来支持实现FUNCTION DRIVER的功能。

Windows 7驱动开发系列(四)--WDM模型介绍相关推荐

  1. Windows 7驱动开发系列(一)--前言WIN7的新特性

    随着工作时间的增加,感觉自己技术越做越向DESIGN发展哈哈,一些具体的工作反而少了很多,所以做为总结呢,把自己对WINDOWS驱动分享一下,当然了水平及时间都有限欢迎大家一起讨论. 其实在网上看招聘 ...

  2. 【转】Android 驱动开发系列四

    原文网址:http://www.2cto.com/kf/201304/202040.html 时隔多日,终于都抽出时间来写blog了.废话不多说,接着上一篇,这里将介绍如何编写HAL层(硬件抽象层)对 ...

  3. Exynos4412的Linux5.4.174时钟驱动开发(四)——clk API的调用方法

    系列文章目录 Exynos4412的Linux时钟驱动开发(一)--Exynos4412的时钟管理单元CMU Exynos4412的Linux时钟驱动开发(二)--时钟驱动的初始化(CLK_OF_DE ...

  4. 九七的Windows内核驱动开发 WIN10-2004+VS2019+WDK驱动开发环境安装及配置

    WIN10-2004+VS2019+WDK驱动开发环境安装及配置 一.定义介绍   本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进 ...

  5. Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

    Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.A ...

  6. Silverlight for Windows Phone 7开发系列(2):第一个Silverlight程序

    前言 上一篇讲述了Windows Phone 7开发环境的搭建,这篇文章讲述如何创建,部署,调试以及运行Silverlight for Windows Phone应用程序,同时介绍如何Microsof ...

  7. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  8. 行为驱动开发(BDD)全面介绍

    行为驱动开发(BDD)全面介绍 作者:杜铁绳 在软件行业中,软件研发项目软件产品交付经常被推迟.研发费用经常超出预算.经常遗漏客户所需的软件功能.有将近20%的项目最终无法交付,或者取消.这些软件研发 ...

  9. ABP开发框架前后端开发系列——框架的总体介绍

    ABP开发框架前后端开发系列--框架的总体介绍 ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架. ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领 ...

最新文章

  1. 统计学习方法---拉格朗日对偶新性
  2. linux c warning: implicit declaration of function 'strtok_r'解决方案
  3. 正确理解RESET类型的INPUT控件实现重置效果的机制
  4. mysql存储过程1267_mysql存储过程一例
  5. 蓝桥杯练习题十六进制转十进制
  6. pixhawk commander.cpp的飞行模式切换解读
  7. 《.NET Core 2.0 应用程序高级调试》7折优惠
  8. qMISPlat入门级使用问题解答一
  9. linux下常用FTP命令
  10. 当下的互联网时代,“急功近利”不是坏事
  11. 静态Web开发 JavaScript
  12. mysql中更改字符集为utf8mysql中文输入不了问题解决
  13. bootstrap基础样式学习(一)
  14. 使用JS导出表格为Excel
  15. echart2文档(简单明白)
  16. Java-茴香豆研究(一)
  17. 算法高级(40)-基于分治算法完美解决的人类基因组计划
  18. VCC,VDD,VSS,VEE区别
  19. 0基础学前端开发,CSS盒子模型居中方法
  20. HTTP 常用的方法是什么,各自含义是什么?

热门文章

  1. 【iOS沉思录】如何招聘一个靠谱的 iOS程序员+面试题详解
  2. anaconda安装dlib出现ImportError: libopenblas.so.0: cannot open shared object file***
  3. Java 关于使用Arrays.asList()数组转集合的问题
  4. ArrayList.add方法底层浅析
  5. 显示器会影响电脑的显示效果么
  6. 服务器系统c盘在哪个文件夹,windows操作系统放在哪个文件夹下
  7. 对接阿里云短信服务(附视频教程)
  8. 2022年西藏最新八大员之(安全员)模拟试题题库及答案
  9. MySQL插入表格数据的时候出现1265错误
  10. 人在做,天在看:天道有轮回,苍天饶过谁