菜单

Windows驱动开发入门引导

2019年2月11日 - UNIXSolaris

   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 2000~Windows
Vista下能健康运作且未调用WDF相关的内核API函数的驱动都称呼古板型驱动(包蕴NT式和WDM)。如若调用了WDF相关的内核API则称之为WDF驱动。
请留心:WDF驱动是可以调用传统型驱动所调用的内核API的,WDF可以说是古板型的升级版。
   
模型的开拓进取并不是和操作系统版本的升迁齐步走的,而是有一个逐时期替的历程。比如Windows
98已经匡助部分的WDM驱动程序,可是又支持部分的VXD驱动。而到了Windows
2000,则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的进步会让目前学习古板型驱动的奋力废不过返。一个超人的例子是:几乎在1991年到1992年间公布第一个版本的硬盘上层过滤diskperf的代码,18年过去了,明毕节旧可以编译并正常在新型版本的Vista上运行。
   
本书对于半数以上不能找到WDF实例的章节,都应用了古板型驱动举办验证。比如磁盘过滤、文件系统过滤和互连网中间层驱动。其余为了从简单出手,对于入门级的多个例子(串口和键盘)也选用了古板型驱动。不过虚拟磁盘和编造网卡(第5章和第11章),使用了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 2013 + WDK 8.1

 

   4.  实现方式

 

WDM vs WDF

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

 

按照WDF的驱动开发

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

 

   5.  驱动安装

 

测试环境下安装驱动前

支出的驱动程序没有进展签约可能使用测试签名,则须求在装置上开启测试形式,具体操作为:打开控制台,输入:

bcdedit /set testsigning on

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

比方要关张测试形式,则需在控制台输入:

bcdedit /set testsigning off

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

 

以服务的样式运行

NT式的驱动程序允许以 service
的款式运行, 服务安装的例程可以参考 WDF Sample 中的 Eventdrv
工程,恐怕参考我写的有关经过互联网监督的驱动例程开源代码

 

行使INF文件安装

设施相关的驱动装置可以采用INF举行安装,INF安装文件的编写提议从
WDF Sample
中找到确切的INF文件举办修改,假如您想询问INF的语法,能够参照这里

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

可以参考 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地图