Windows的驱动开发模型

   1.  前言

Windows的驱动开发模型

因工作上类别的急需,作者需求做驱动相关的费用,在此以前并从未接触过有关的知识,折腾一段时间下来,功效如需兑现了,也积累了一部分经验和观点,所以在此做番计算。

 

对此驱动开发的支出指点,微软官方文书档案网站已经提供了很详细的科目文书档案,并且在Github上提供了一名目繁多典型的例程源码用于开发人士参考。开发职员在颇具一定的驱动概念知识后,通过参考官方例程能够很不难达成全体一定功效的驱动应用程序。

   
在Windows的不如版本上支出的驱动程序“模型”(模型这么些词语应该来自单词“Mode”。在Windows
NT上,驱动程序被叫作Kernel Driver
Mode驱动程序。我觉得那一个Mode是指一种驱动程序的结构和平运动转的科班),有过分歧的名目。比如在Windows
9x上的驱动程序,都号称VXD,而在Windows
NT上的驱动程序被称呼KDM驱动程序,Windows
98~2000以此时代出现的新模型叫做WDM。
   
Windows的驱动模型概念,本来是就驱动程序的一坐一起而言的。比如WDM驱动,必须求知足提供n种被供给的表征(如电源管理、即插即用)才被誉为WDM驱动。要是不提供这一个职能,那么统一称为NT式驱动。同样的,WDF驱动也有它的一多如牛毛标准。
    可是本书选取精炼的分别方法。将全体在Windows 3000~Windows
Vista下能健康运作且未调用WDF相关的内核API函数的驱动都叫作守旧型驱动(包涵NT式和WDM)。借使调用了WDF相关的内核API则号称WDF驱动。
请留心:WDF驱动是足以调用守旧型驱动所调用的内核API的,WDF能够视为传统型的升级版。
   
模型的向上并不是和操作系统版本的晋升齐步走的,而是有3个日渐替代的进度。比如Windows
98已经援助部分的WDM驱动程序,不过又支持部分的VXD驱动。而到了Windows
三千,则VXD那种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的根基上平添了部分新的天性,制定了有个别新的正儿八经而培育的。绝超越十分之五函数调用都以通用的。当然,Windows
9x体系的基础完全两样,所以VXD与之相比较,就平昔不二个内核API函数是相同的。
    故而随着Windows 9x的打入冷宫,VXD难逃彻底被淘汰的时局。Windows
NT则向上成了新生的Windows版本,KDM也化为了WDM而存在下去。当然,微软不会闲着,今后又推出了新的WDF。读者又不得不担心:本书是用WDM写的依然用WDF写的呢?会不会刚刚学完又被淘汰呢?
   
和VXD差别,从KDM到WDM再到WDF是一脉相通的,基本上KDM程序员在读书WDM时早就占尽了便于。到WDF也不例外,WDF与其说是新的驱动开发模型,还不比说是在已有的内核API和数据结构的底子上,又装进出一套让使用者觉得更简便、更易用的以Wdf-先河的一组API。因而,读者大可不必担心WDF的向上会让眼前学习守旧型驱动的奋力有始无终。三个独立的事例是:大约在1992年到1993年间发布第二个本子的硬盘上层过滤diskperf的代码,18年过去了,明日依旧得以编写翻译并不奇怪在风行版本的Vista上运维。
   
本书对于半数以上不可能找到WDF实例的章节,都应用了古板型驱动举办认证。比如磁盘过滤、文件系统过滤和网络中间层驱动。其它为了从不难出手,对于入门级的七个例证(串口和键盘)也运用了古板型驱动。但是虚拟磁盘和虚拟网卡(第4章和第贰1章),使用了WDF版本的事例,请读者注意辨别。

Windows驱动程序入门:
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/

Github:
https://github.com/Microsoft/Windows-driver-samples

 

   2.  驱动类型

 驱动分为如下几连串型:

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

驱动程序不是大势所趋须求与硬件通信,假设必要拜访操作系统大旨数据,往往应用程序没有丰盛的权柄,那种景观则需求在基础方式下实行访问。就地点5种驱动类型,小编参考着微软的驱动例子开发过
鼠标键盘设备过滤驱动
网络过滤软件驱动程序,所以对驱动开发的掌握仍在浅水区,如在翻阅进度中发觉有误的地点,还请不吝提议。

行使的驱动类型涉及到代码的贯彻(需不必要考虑PNP和电源管理)和驱动的设置(
NT式驱动程序以 service
的样式运转,别的驱动须要运用通用的INF文件安装),微软的法定文书档案那样提到:

style=”font-family: ‘Microsoft YaHei’;”>有关软件驱动程序,你的七个挑选为
KMDF 和根本方式 Windows NT 驱动程序模型。 使用 KMDF 和基本情势 Windows
NT 模型,你能够编写驱动程序,而无需考虑即插即用 (PnP) 和电源管理。
你能够改为专心于驱动程序的重要职务上。 使用 KMDF,你不要考虑 PnP
和电源,因为框架会为你处理 PnP 和电源。 使用基础情势 Windows NT
模型,你不要考虑 PnP 和电源,因为基础形式服务在与 PnP
和电源管理完全非亲非故的环境中运维。

   3.  开发环境

 

Visual Studio +
WDK(Windows Driver Kit)

里头WDK需求团结手动下载安装

作者是在Windows平台上支付,使用的耗费环境为
Visual Studio 二〇一二 + WDK 8.1

 

   4.  实现方式

 

WDM vs WDF

对此刚接触驱动开发的新手来说,小编不建议选拔WDM(Windows
驱动程序模型)进行支付。最近在网上能找到的关于驱动开发的华语图书基本上都是环绕WDM格局展开描述的,而至于WDF(Windows
驱动框架)开发的书籍寥寥无几,《竹林溪径——深远浅出Window驱动开发》和《Developing
Drivers with the Windows Driver
Foundation
》算是两本讲述基于WDF开发驱动的图书,两者都能在网上找到电子书资源。

 

基于WDF的驱动开发

WDF的付出必要依据一定的规则,开发完成时必要考虑较多的细节,由于篇幅有限,小编凭着本身的阅历暂时稍做列举,后续将写一篇针对WDF驱动开发的篇章。

  • PNP和电源管理(WDF已经扶助封装了大部分的接口);
  • 各个对象:驱动对象,设备对象,WDF对象,文件对象,队列对象;
  • 使得上下文:有时称为设备扩张,用于存款和储蓄特定设备对象的连锁消息的数据结构;
  • 对象的放出:要求考虑分歧属性对象释放的机遇;
  • 中断请求级别:处理不当易导致蓝屏;
  • 分页与非分页内部存款和储蓄器;
  • 同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等;
  • 日记跟踪记录:
    调节和测试的必需,能够使用 WPP(Windows软件追踪预处理器)或简捷的
    DebugPrint 输出
  • 与应用程序的报纸发表:控制代码、ICRUISERQ,请求队列

 

   5.  驱动安装

 

测试环境下安装驱动前

支付的驱动程序没有进展签订契约或许利用测试签名,则须求在装备上打开测试方式,具体操作为:打开控制台,输入:

bcdedit /set testsigning on

回车,会提示:操作成功完成。
然后重启设备,开机后会在电脑桌面右下方突显有“测试格局”字样内容的水印。

假定要关门测试情势,则需在决定台输入:

bcdedit /set testsigning off

回车,同样会唤起:操作成功完成。
重启设备后则会意识桌面右下角的水印消失。

 

以服务的花样运行

NT式的驱动程序允许以 service
的格局运转, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv
工程,或许参考笔者写的有关进度网络监督的驱动例程开源代码

 

应用INF文件安装

设施相关的驱动装置能够选取INF进行设置,INF安装文件的编排提出从
WDF Sample
中找到适当的INF文件进行修改,假诺您想打听INF的语法,能够参见这里

  • 因此配备管理器手工业安装

开拓控制台,输入 devmgmt
回车,那是打开设备管理器的中间一种艺术,其余办法比如右键系统菜单栏图标均能够打开职分管理器,只是利用命令行的点子比较少见,那Ritter别记下一下。找到感兴趣的
设施节点,右键 属性(或更新驱动程序软件),切换成
驱动程序,可以展开感兴趣的操作。这里所见到所提供的选项,后续等你熟习了驱动装置的接口后,你会发觉都有相应的接口对应每个效率选项。

  • 因而程序达成自动安装

能够参考 WDF Sample
中的Driver Install Frameworks API (DIFxAPI) Sample
Device Console (DevCon) Tool
七个工程,分别提供了区别调用接口的驱动装置方式,Device Console (DevCon) Tool
生成的devcon.exe
是一个效能强大的工具,不仅可用于驱动(包)的装置和卸载,还能收获装备的硬件ID,描述符以及配备所设置的驱动列表等新闻,开发人士能够从中一窥毕竟。

在驱动的装置进程中,系统会自动记录安装的日志,在INF目录(路径一般在 C:\Windows\inf下)下得以找到多个日志文件
setupapi.app.logSetupapi.dev.log
,查看那多个日志文件有利于精晓驱动装置的施行进程,同时也有利于排查驱动装置进度中冒出的不胜。

使得的安装涉及到驱动文件的校验(保证驱动文件的完整性和合法性),驱动的预先级总计(选拔最优的驱动去匹配当前识别到的新的配备),驱动的放置目录(Driver
Store)等内容。开发职员熟稔驱动装置逻辑有利于驱动的花费,感兴趣可以由此此处开始展览摸底。

 

   6.  驱动签名

 

测试环境

通过VS集成开发条件制造 Driver
化解方案后会生成八个档次,右键属性打开 XXX Package,左边选中
Driver Signing ,在左侧栏 Sign Mode 选择 Test Sign,在
Test Certificate选择
<Create test certificate...>,则在编写翻译时会自动生成测试签名证书。

 

生育条件

从Win10从头,驱动文件包不仅要求进行扩张验证
(EV)
代码签名,还索要交给到硬件开发主导仪表盘,具体操作指南能够参考此处,你可以在该文书档案上找到驱动签名所需的别的内容。

 

发表评论

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

网站地图xml地图