Windows的驱动开发模型

以劳动的形式运转

NT式的驱动程序允许以 service
的样式运营, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv
工程,可能参考小编写的关于进程互联网监督的驱动例程开源代码

 

Windows的驱动开发模型

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

   
在Windows的两样版本上付出的驱动程序“模型”(模型那几个词语应该来自单词“Mode”。在Windows
NT上,驱动程序被叫做Kernel Driver
Mode驱动程序。笔者认为这些Mode是指一种驱动程序的构造和平运动行的规范),有过不一致的名号。比如在Windows
9x上的驱动程序,都称为VXD,而在Windows
NT上的驱动程序被号称KDM驱动程序,Windows
98~三千那些时期出现的新模型叫做WDM。
   
Windows的驱动模型概念,本来是就驱动程序的作为而言的。比如WDM驱动,必须求满意提供n种被须求的特征(如电源管理、即插即用)才被誉为WDM驱动。如若不提供那一个意义,那么统一称为NT式驱动。同样的,WDF驱动也有它的一层层标准。
    不过本书选取精炼的区别方法。将整个在Windows 三千~Windows
Vista下能符合规律运维且未调用WDF相关的内核API函数的驱动都叫作守旧型驱动(包蕴NT式和WDM)。假诺调用了WDF相关的内核API则号称WDF驱动。
请留意:WDF驱动是能够调用守旧型驱动所调用的内核API的,WDF能够算得守旧型的升级版。
   
模型的开拓进取并不是和操作系统版本的晋升齐步走的,而是有一个稳步取代的经过。比如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的上进会让前边学习古板型驱动的极力一噎止餐。二个超人的例子是:差不离在一九九二年到一九九一年间公布第一个版本的硬盘上层过滤diskperf的代码,18年过去了,前几日还是能编写翻译并平常在风行版本的Vista上运维。
   
本书对于绝大多数不只怕找到WDF实例的章节,都施用了守旧型驱动进行表达。比如磁盘过滤、文件系统过滤和互联网中间层驱动。其它为了从简单入手,对于入门级的八个例证(串口和键盘)也应用了守旧型驱动。可是虚拟磁盘和虚拟网卡(第⑤章和第31章),使用了WDF版本的事例,请读者注意甄别。

动用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.  驱动签名

 

 

WDM vs WDF

对此刚接触驱动开发的新手来说,小编不提议利用WDM(Windows
驱动程序模型)实行开发。近日在网上能找到的有关驱动开发的中文图书基本上都以围绕WDM情势开始展览描述的,而至于WDF(Windows
驱动框架)开发的图书寥寥无几,《竹林溪径——深远浅出Window驱动开发》和《Developing
Drivers with the Windows Driver
Foundation
》算是两本讲述基于WDF开发驱动的书籍,两者都能在网上找到电子书财富。

 

测试环境下安装驱动前

支出的驱动程序没有进展签订契约或许采取测试签名,则须要在装备上开启测试形式,具体操作为:打开控制台,输入:

bcdedit /set testsigning on

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

比方要关闭测试方式,则需在决定台输入:

bcdedit /set testsigning off

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

 

对此驱动开发的支出辅导,微软官方文档网站已经提供了很详细的科目文档,并且在Github上提供了一多级典型的例程源码用于开发职员参考。开发人士在具备一定的驱动概念知识后,通过参考官方例程可以很简单完成全数一定功用的驱动应用程序。

   3.  开发环境

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

 

小编是在Windows平台上支付,使用的付出环境为
Visual Studio 二零一二 + WDK 8.1

 

   2.  驱动类型

接纳的驱动类型涉及到代码的达成(需不要求考虑PNP和电源管理)和驱动的装置(
NT式驱动程序以 service
的款型运维,其余驱动须求选拔通用的INF文件安装),微软的合法文书档案那样提到:

因工作上种类的内需,笔者供给做驱动相关的成本,在此之前并没有接触过相关的知识,折腾一段时间下来,功效如需兑现了,也积累了一些经历和理念,所以在此做番总计。

驱动程序不是自然须求与硬件通信,若是供给拜访操作系统主旨数据,往往应用程序没有丰盛的权位,那种情形则供给在基本形式下展开走访。就地点5种驱动类型,我参考着微软的驱动例子开发过
鼠标键盘设备过滤驱动
互联网过滤软件驱动程序,所以对驱动开发的接头仍在浅水区,如在翻阅进度中窥见有误的地点,还请不吝提出。

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

 驱动分为如下二种档次:

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

当中WDK需求团结手动下载安装

生儿育女环境

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

 

Visual Studio +
WDK(Windows Driver Kit)

   1.  前言

 

   4.  实现方式

测试环境

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

 

据说WDF的驱动开发

WDF的开销要求遵从一定的条条框框,开发完结时需求考虑较多的细节,由于篇幅有限,作者凭着自个儿的阅历暂时稍做列举,后续将写一篇针对WDF驱动开发的小说。

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

 

   5.  驱动安装

 

 

发表评论

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

网站地图xml地图