NT、WDM、WDF驱动概念

一、概念介绍
  NT是驱动模型:NT式驱动程序模型是一种比较老式的驱动程序模型,但适用于现有的Windows系统。NT式驱动模型没有固定的形式,最简单的NT式驱动程序模型这一特点,程序开发者可以编写一个完全不支持硬件工作的驱动程序,却可以将代码运行在内核模式中。

  WDM驱动程序模型:WDM式驱动程序在NT式驱动程序的基础上,还必须:
    1、包括wdm.h头文件,问不是ntddk.h(wdm.h是ntddk.h的一部分)
    2、被设计为一种WDM驱动程序类型,如总线驱动、功能驱动,过滤驱动等;
    3、创建设备对线属于WDM设备对象类型(物理设备对象、功能设备对象、过滤设备对象);
    4、支持即插即用(inf实现的功能);
    5、支持电源管理;
    6、支持Windows管理规范

二、加载驱动
  NT设备驱动程序的动态加载主要是由服务控制管理程序组件来完成的。Windows服务可以在系统启动时加载,用户也可以按需在服务控制平台开启或者关闭服务。程序员可以通过Windows提供的相关服务函数进行加载或者卸载该服务等。服务程序更是可以在用户还没有登录系统时,就载入系统并且被执行。
  加载NT驱动一般分为4个步骤:
    1、调用OpenSCManager打开SCM管理器;
    2、调用OpenService打开此项服务
    3、调用ControlService传递SERVICE_CONTROL_STOP来停止服务;
    4、调用DeleteService卸载此项服务;
    5、关闭句柄;

  和NT式驱动不同,WDM式驱动程序不是被当作服务来加载的,因此不能简单地依靠修改注册表来加载驱动。
  WDM式驱动比NT式驱动增加了对即插即用的支持,这需要安装的时候提供一个INF文件进行配合。这里增加了一个设置AddDevice回调函数,此回调函数的作用是创建设备对象并由PNP(即插即用)管理器调用。并设置对IRP_MJ_PNP的IRP的回调函数。这都是NT和WDM驱动最大的不同点。而且在WDM驱动中,大部分卸载工作都不是由DriverUnload来处理,而是放在对IRP_MN_REMOVE_DEVICE的IRP的处理函数中处理。

三、头文件
  NT式的驱动程序要导入的头文件时NTDDK.H,而WDM式的驱动要导入的头文件为WDM.H.

四、服务形式
  通俗点NT式驱动,以服务的形式启动在系统里,WDM驱动加载需要inf文件,在C:\Windows下有一个名为INF的隐藏文件夹,我们可以找到很多*.INF、*.pnf格式的文件,前者即所谓的设备信息文件,后者是预编译信息文件。用记事本可以打开INF文件,其中记录了必要的硬件安装信息,包括设备类型、设备生产厂商名称、适用产品等信息,Windows可以据此自动安装驱动程序。

五、WDF与WDM关联和区别
  WDM是Win32设备驱动程序体系结构。Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编程复杂,初学者难以掌握其编程要领。为了解决这一问题,微软对WDM驱动程序的架构做了改进,形成了全新的WDF(Windows Driver Foundation)框架结构。它提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。从现在开始,掌握Windows设备驱动程序的开发人员,由过去的“专业”人士,将变为“普通”大众。WDF驱动程序包括两个类型,一个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS文件;另一个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

  WDM驱动模型和WDF驱动模型的最大的区别是:
    1) wdf驱动框架对WDM进行了一次封装,WDF框架就好像C++中的基类一样,且这个基类中的model,IO model ,pnp和电源管理模型;且提供了一些与操作系统相关的处理函数,这些函数好像C++中的虚函数一样,WDF驱动中能够对这些函数进行override;特别是Pnp管理和电源管理!基本上都由WDF框架做了,而WDF的功能驱动几乎不要对它进行特殊的处理;
    2) WDF驱动模型 与WDM驱动模型的另外一个主要区别是:WDF驱动采用队列进行IO处理,而WDM中将所有的IO操作都用默认的队列进行处理,如果要进行IRp同步,必须使用StartIO;
    3) WDF是面向对象的,而WDM是面向过程的,WDF提供对象的封装,如将IRP封装成WDFREQUEST,对象提供方法和Event。

*********************************************************************************

    ZCZ总结:NT类似于C语言,没有固定格式;WDM类似于C++语言,基于C语言实现某些驱动类型的实现;WDF类似于MFC框架,基于C++做了进一步的封装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值