Windows驱动开发入门指点

发布时间:2019-02-19  栏目:LINUX  评论:0 Comments

   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 两千~Windows
Vista下能健康运作且未调用WDF相关的内核API函数的驱动都称之为传统型驱动(包含NT式和WDM)。若是调用了WDF相关的内核API则称为WDF驱动。
请留心:WDF驱动是可以调用传统型驱动所调用的内核API的,WDF可以说是古板型的升级版。
   
模型的上扬并不是和操作系统版本的提拔齐步走的,而是有2个逐步替代的进度。比如Windows
98已经支撑部分的WDM驱动程序,可是又帮忙部分的VXD驱动。而到了Windows
两千,则VXD那种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的底蕴上伸张了部分新的特征,制定了有个别新的正统而造就的。绝一大半函数调用都以通用的。当然,Windows
9x种类的基础完全两样,所以VXD与之相比较,就不曾3个内核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年间发表首个版本的硬盘上层过滤diskperf的代码,18年过去了,前天照旧得以编译并不荒谬在新型版本的Vista上运维。
   
本书对于大多数不可以找到WDF实例的章节,都使用了传统型驱动举办认证。比如磁盘过滤、文件系统过滤和网络中间层驱动。其余为了从简单出手,对于入门级的三个例证(串口和键盘)也运用了传统型驱动。不过虚拟磁盘和虚拟网卡(第六章和第二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

对于刚(yú gāng )接触驱动开发的新手来说,作者不提议拔取WDM(Windows
驱动程序模型)举办支付。如今在网上能找到的关于驱动开发的华语图书基本上都以围绕WDM形式进行描述的,而有关WDF(Windows
驱动框架)开发的图书寥寥无几,《竹林溪径——深远浅出Window驱动开发》和《Developing
Drivers with the Windows Driver
Foundation
》算是两本讲述基于WDF开发驱动的书本,两者都能在网上找到电子书能源。

 

依照WDF的驱动开发

WDF的支付须求依照一定的平整,开发完结时需求考虑较多的细节,由于篇幅有限,我凭着自个儿的经验一时稍做列举,后续将写一篇针对WDF驱动开发的作品。

  • PNP和电源管理(WDF已经帮忙封装了绝大部分的接口);
  • 种种对象:驱动对象,设备对象,WDF对象,文件对象,队列对象;
  • 使得上下文:有时称为设备增加,用于存储特定设备对象的相关音讯的数据结构;
  • 目的的自由:须求考虑差距性质对象释放的时机;
  • 中断请求级别:处理不当易导致蓝屏;
  • 分页与非分页内存;
  • 同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等;
  • 日志跟踪记录:
    调试的必需,可以应用 WPP(Windows软件追踪预处理器)或简捷的
    DebugPrint 输出
  • 与应用程序的简报:控制代码、I瑞鹰Q,请求队列

 

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