Windows驱动开发入门指导

据悉WDF的驱动开发

WDF的开支必要依照一定的条条框框,开发完结时索要考虑较多的细节,由于篇幅有限,我凭着本人的阅历一时稍做列举,后续将写一篇针对WDF驱动开发的小说。

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

 

   5.  驱动安装

 

Windows的驱动开发模型

驱动程序不是必然须求与硬件通信,假设急需拜访操作系统宗旨数据,往往应用程序没有充裕的权位,那种状态则须要在基本方式下进展走访。就地点5种驱动类型,我参考着微软的驱动例子开发过
鼠标键盘设备过滤驱动
网络过滤软件驱动程序,所以对驱动开发的掌握仍在浅水区,如在阅读进度中发觉有误的地方,还请不吝指出。

   
在Windows的例外版本上付出的驱动程序“模型”(模型那几个词语应该来自单词“Mode”。在Windows
NT上,驱动程序被称之为Kernel Driver
Mode驱动程序。我认为那几个Mode是指一种驱动程序的构造和运转的标准),有过差距的名号。比如在Windows
9x上的驱动程序,都叫作VXD,而在Windows
NT上的驱动程序被叫做KDM驱动程序,Windows
98~三千那些时期出现的新模型叫做WDM。
   
Windows的驱动模型概念,本来是就驱动程序的行为而言的。比如WDM驱动,必须求满意提供n种被须要的表征(如电源管理、即插即用)才被称为WDM驱动。若是不提供那些效用,那么统一称为NT式驱动。同样的,WDF驱动也有它的一多种专业。
    然则本书拔取精炼的分别方法。将全体在Windows 3000~Windows
Vista下能健康运作且未调用WDF相关的内核API函数的驱动都称为传统型驱动(包含NT式和WDM)。若是调用了WDF相关的内核API则称之为WDF驱动。
请留心:WDF驱动是可以调用古板型驱动所调用的内核API的,WDF可以说是古板型的升级版。
   
模型的升华并不是和操作系统版本的晋级齐步走的,而是有1个逐渐替代的经过。比如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的迈入会让前方学习古板型驱动的拼命浅尝辄止。一个特出的例证是:大致在1994年到一九九一年间公布第四个本子的硬盘上层过滤diskperf的代码,18年过去了,今淮南旧得以编译并不奇怪在新式版本的Vista上运营。
   
本书对于多数不可以找到WDF实例的章节,都采纳了古板型驱动举行表达。比如磁盘过滤、文件系统过滤和网络中间层驱动。其它为了从简单入手,对于入门级的五个例证(串口和键盘)也使用了古板型驱动。但是虚拟磁盘和虚构网卡(第四章和第二,1章),使用了WDF版本的例证,请读者注意甄别。

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

 

对于驱动开发的支出辅导,微软官方文档网站已经提供了很详细的教程文档,并且在Github上提供了一七种典型的例程源码用于开发人员参考。开发人士在拥有一定的驱动概念知识后,通过参考官方例程可以很简单完结全部一定功用的驱动应用程序。

利用的驱动类型涉及到代码的落到实处(需不必要考虑PNP和电源管理)和驱动的装置(
NT式驱动程序以 service
的款型运转,其余驱动必要运用通用的INF文件安装),微软的法定文档那样提到:

测试环境下安装驱动前

付出的驱动程序没有开展签约只怕应用测试签名,则要求在配备上打开测试格局,具体操作为:打开控制台,输入:

bcdedit /set testsigning on

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

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

bcdedit /set testsigning off

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

 

因工作上类其余内需,我需求做驱动相关的开发,从前并不曾接触过相关的学问,折腾一段时间下来,效率如需兑现了,也积累了一部分经历和意见,所以在此做番统计。

 驱动分为如下几种类型:

以劳动的款型运转

NT式的驱动程序允许以 service
的花样运行, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv
工程,大概参考小编写的有关经过互连网监督的驱动例程开源代码

 

 

   2.  驱动类型

选取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
是2个功用强大的工具,不仅可用于驱动(包)的装置和卸载,还是可以拿到装备的硬件ID,描述符以及配备所设置的驱动列表等消息,开发人士可以从中一窥毕竟。

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

使得的安装涉及到驱动文件的校验(保障驱动文件的完整性和合法性),驱动的优先级统计(选用最优的驱动去匹配当前识别到的新的装置),驱动的停放目录(Driver
Store)等情节。开发人士纯熟驱动装置逻辑有利于驱动的支付,感兴趣可以通过此处进展询问。

 

   6.  驱动签名

 

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

WDM vs WDF

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

 

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

 

生产环境

从Win10方始,驱动文件包不仅需求开展增加验证
(EV)
代码签名,还亟需付出到硬件开发主导仪表盘,具体操作指南可以参照此处,你可以在该文档上找到驱动签名所需的其余内容。

 

   1.  前言

作者是在Windows平台上支付,使用的支出条件为
Visual Studio 2011 + WDK 8.1

 

个中WDK须要协调手动下载安装

 

测试环境

由此VS集成开发环境创制 Driver
解决方案后会生成八个门类,右键属性打开 XXX Package,右边选中
Driver Signing ,在右侧栏 Sign Mode 选择 Test Sign,在
Test Certificate选择
<Create test certificate...>,则在编译时会自动生成测试签名证书。

 

   4.  实现方式

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

Visual Studio +
WDK(Windows Driver Kit)

   3.  开发环境

发表评论

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

网站地图xml地图