菜单

Windows驱动开发入门带领

2019年2月12日 - LINUX

   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地图