Windows驱动开发入门指导

 

Windows的驱动开发模型

驱动程序不是迟早须求与硬件通信,要是急需拜访操作系统宗旨数据,往往应用程序没有丰硕的权柄,那种景况则须要在基本形式下开始展览访问。就地方5种驱动类型,小编参考着微软的驱动例子开发过
鼠标键盘设备过滤驱动
网络过滤软件驱动程序,所以对驱动开发的明白仍在浅水区,如在翻阅进度中窥见有误的地点,还请不吝提议。

 

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能够说是古板型的升级版。
   
模型的进步并不是和操作系统版本的升官齐步走的,而是有2个日益替代的长河。比如Windows
98已经支撑部分的WDM驱动程序,不过又辅助部分的VXD驱动。而到了Windows
3000,则VXD这种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的功底上平添了一部分新的特色,制定了一些新的标准而创设的。绝超越50%函数调用都是通用的。当然,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的上进会让后边学习守旧型驱动的着力一噎止餐。1个卓绝的例证是:差不多在一九九二年到1991年间发布第7个版本的硬盘上层过滤diskperf的代码,18年过去了,今天依然得以编写翻译并符合规律在最新版本的Vista上运转。
   
本书对于超越二分之一无法找到WDF实例的章节,都采用了守旧型驱动举办认证。比如磁盘过滤、文件系统过滤和网络中间层驱动。别的为了从不难入手,对于入门级的五个例证(串口和键盘)也应用了古板型驱动。可是虚拟磁盘和虚拟网卡(第⑥章和第31章),使用了WDF版本的事例,请读者注意辨别。

 

 驱动分为如下三种类型:

 

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

因工作上种类的须求,笔者必要做驱动相关的支出,从前并不曾接触过相关的知识,折腾一段时间下来,功效如需兑现了,也积累了有的经历和理念,所以在此做番总括。

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

 

   3.  开发环境

测试环境下安装驱动前

支付的驱动程序没有举行签字可能应用测试签名,则要求在配备上开启测试情势,具体操作为:打开控制台,输入:

bcdedit /set testsigning on

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

比方要关闭测试形式,则需在支配台输入:

bcdedit /set testsigning off

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

 

根据WDF的驱动开发

WDF的花费必要服从一定的条条框框,开发达成时要求考虑较多的底细,由于篇幅有限,作者凭着本人的阅历一时稍做列举,后续将写一篇针对WDF驱动开发的作品。

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

 

   5.  驱动安装

 

 

对此驱动开发的开发教导,微软官方文档网站已经提供了很详细的课程文书档案,并且在Github上提供了一体系典型的例程源码用于开发职员参考。开发人士在有着一定的驱动概念知识后,通过参考官方例程能够很不难完成全体一定成效的驱动应用程序。

WDM vs WDF

对Yu Gang接触驱动开发的新手来说,小编不提出利用WDM(Windows
驱动程序模型)实行付出。近年来在网上能找到的有关驱动开发的普通话图书基本上都以围绕WDM情势举行描述的,而有关WDF(Windows
驱动框架)开发的书本寥寥无几,《竹林溪径——深切浅出Window驱动开发》和《Developing
Drivers with the Windows Driver
Foundation
》算是两本讲述基于WDF开发驱动的书本,两者都能在网上找到电子书能源。

 

Visual Studio +
WDK(Windows Driver Kit)

   4.  实现方式

测试环境

透过VS集成开发条件制造 Driver
消除方案后会生成七个种类,右键属性打开 XXX Package,左侧选中
Driver Signing ,在左边栏 Sign Mode 选择 Test Sign,在
Test Certificate选择
<Create test certificate...>,则在编写翻译时会自动生成测试签名证书。

 

   1.  前言

生育条件

从Win10初叶,驱动文件包不仅需求举办扩展验证
(EV)
代码签名,还索要交给到硬件开发为主仪表盘,具体操作指南能够参考此处,你可以在该文书档案上找到驱动签名所需的别的内容。

 

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

   2.  驱动类型

以劳动的花样运维

NT式的驱动程序允许以 service
的样式运维, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv
工程,恐怕参考笔者写的有关经过网络监督的驱动例程开源代码

 

运用的驱动类型涉及到代码的兑现(需不供给考虑PNP和电源管理)和驱动的设置(
NT式驱动程序以 service
的款型运营,别的驱动须求使用通用的INF文件安装),微软的法定文书档案那样提到:

作者是在Windows平台上付出,使用的费用环境为
Visual Studio 二〇一二 + WDK 8.1

中间WDK必要团结手动下载安装

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

发表评论

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

网站地图xml地图