Windows驱动开发入门指引,驱动开发的一些基本概念

   1.  前言

WDK(Windows Driver
Kit)是一种截然集成的驱动程序开荒体系,它包罗 Windows DDK,用于测试
Wi
ndows 驱动器的可信性和安宁性.

因工作上项指标急需,小编要求做驱动相关的支出,此前并从未接触过相关的学识,折腾一段时间下来,功用如需兑现了,也积存了有的经历和眼光,所以在此做番计算。

WDM 是 Win32装置驱动程序连串布局

对于驱动开采的支出指导,微软官方文书档案网址已经提供了很详细的课程文书档案,并且在Github上提供了一体系规范的例程源码用于开采人士参考。开垦人士在装有一定的驱动概念知识后,通过参谋官方例程能够很轻松达成全数一定成效的驱动应用程序。

Windows设备驱动程序,过去是WDM(Windows
Driver Model)框架,编制程序复杂,初学者难以精晓其编制程序
大旨。为了减轻这一主题材料,微软对WDM驱动程序的架构做了改进,产生了全新的WDF(Windows
Driver F
oundation)架构。它提供了面向对象和事件驱动的驱动程序开拓框架,大大降低了付出难度。从现
在始发,领悟Windows设备驱动程序的开辟人士,由过去的“专门的学问”职员,将成为“普通”大众。

Windows驱动程序入门:

WDF驱动程序包罗五个品种,一个是内核级的,称为KMDF(Kernel-Mode Driver
Framework),为SYS
文本;另三个是用户级的,称为UMDF(User-Mode
Driver Framework),为DLL文件。

Github:

 

 

 Windows的驱动开荒模型

   2.  驱动类型

  在Windows的例外版本上开荒的驱动程序
“模型”(模型这几个词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被叫作KernelDriverMode驱动程序。
小编以为那些Mode是指一种驱动程序的布局和
运转的正经),有过不一样的名号。比方在Windows9x上的驱动程序,都称为VXD,而在WindowsNT上的驱动
次第被称作KDM驱动程序,Windows98~3000以此时期出现的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的一言一动来讲的。比方WDM驱动,必需要满意提供n种被要
求的表征(如电源管理、即插即用)才被称得上”WDM驱动”。假如不提供这个意义,那么统一称为NT式驱动。
大同小异的,WDF驱动也会有它的一多三朝式。
  然则本书选拔精炼的差别方法。将全部在Windows贰仟~WindowsVista下能符合规律运作且未调用WDF相
关的内核API函数的驱动都称呼守旧型驱动(蕴涵NT式和WDM)。借使调用了WDF相关的内核API则名称为WD
F驱动。
  请小心:WDF驱动是足以调用古板型驱动所调用的内核API的,WDF能够视为守旧型的晋级版。
  模型的进步并不是和操作系统版本的晋级齐步走的,而是有多少个慢慢代替的长河。举个例子Windows98已
经匡助部分的WDM驱动程序,不过又支持部分的VXD驱动。而到了Windows3000,则VXD这种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的基本功上平添了一些新的性状,制定了一些新的正儿八经而造
就的。绝大多数函数调用都以通用的。当然,Windows9x类别的根本完全差异,所以VXD与之比较,就没
有三个内核API函数是均等的。
  故而随着Windows9x的打入冷宫,VXD难逃深透被淘汰的天数。WindowsNT则向上成了新生的Windows版本
,KDM也酿成了WDM而留存下来。当然,微软不会闲着,以往又推出了新的WDF。读者又不得不顾忌:本书
是用WDM写的照旧用WDF写的呢?会不会刚刚学完又被淘汰呢?
  和VXD分化,从KDM到WDM再到WDF是世代相承的,基本上KDM技士在求学WDM时曾经占尽了实惠。到
WDF也不例外,WDF与其说是新的驱动开采模型,还不及说是在已有的内核API和数据结构的功底上,又封
装出一套让使用者以为更简便、更易用的以Wdf-开首的一组API。因而,读者不须要担忧WDF的前行会
让前方学习古板型驱动的卖力半涂而废。三个杰出的事例是:大致在一九九二年到1994年间发布第二个版本的
硬盘上层过滤diskperf的代码,18年过去了,前日还能够编写翻译并平常在新型版本的Vista上运转。
  本书对于大多数无法找到WDF实例的章节,都应用了古板型驱动进行验证。比如磁盘过滤、文件系统
过滤和互联网中间层驱动。别的为了从轻便出手,对于入门级的五个例证(串口和键盘)也应用了古板型
使得。不过虚拟磁盘和虚拟网卡(第5章和第11章),使用了WDF版本的事例,请读者注意鉴定区别。

 驱动分为如下两种等级次序:

 

  • 设施函数驱动程序
  • 设备筛选器驱动程序
  • 软件驱动程序
  • 文件系统筛选器驱动程序
  • 文件系统驱动程序

劳动调控管理程序 SCM
好像于linux的照拂进度(在linux可能unix操作系统中在系统的辅导的时候会开启诸多劳务,这个劳务
就称为守护进度)

驱动程序不是必然供给与硬件通信,假使须要拜访操作系统大旨数据,往往应用程序未有丰盛的权能,这种情景则须要在基础形式下进展走访。就地方5种驱动类型,小编参照他事他说加以调查着微软的驱动例子开垦过
鼠标键盘设备过滤驱动
网络过滤软件驱动程序,所以对驱动开垦的明亮仍在浅水区,如在阅读进程中开掘有误的地点,还请不吝建议。

 

利用的驱动类型涉及到代码的落到实处(需无需考虑PNP和电源管理)和驱动的安装(
NT式驱动程序以 service
的花样运维,别的驱动需求动用通用的INF文件安装),微软的官方文书档案那样提到:

windows服务在系统运维是加载,用户需在劳动调控平台开启恐怕关闭服务
Driver Service是劳动的三个特例,听从windows服务的批评
加载和睦在NT驱动分为五个步骤:
1.为NT驱动创造新的劳动
2.开启此项服务
3.苏息此项服务
4.剔除NT驱动成立的劳动
上述多个步骤都以因而SCM建立的劳动来贯彻的。

style=”font-family: ‘Microsoft YaHei’;”>有关软件驱动程序,你的七个选项为
KMDF 和根本方式 Windows NT 驱动程序模型。 使用 KMDF 和根本方式 Windows
NT 模型,你能够编写制定驱动程序,而无需思索即插即用 (PnP) 和电源管理。
你能够改为专心于驱动程序的首要职务上。 使用 KMDF,你不用思念 PnP
和电源,因为框架会为您管理 PnP 和电源。 使用基本形式 Windows NT
模型,你不用思量 PnP 和电源,因为基本形式服务在与 PnP
和电源管理完全非亲非故的遭逢中运维。

 

   3.  开发环境

IO请求包-IRP

 

IRP(IO恳求包)用于win32和驱动程序通信,NT内核有贰个零部件叫做IO管理器。IO管理器担当IRP的分发
,驱动程序里成立好器具并且创造好标识链接后,Win32就能够加载驱动了。而要让一个使得能够处理I
RP,必需给驱动增加IRP处理例程。

发表评论

电子邮件地址不会被公开。 必填项已用*标注