Windows驱动开拓入门指点,驱动开荒的片段基本概

   1.  前言

WDK(Windows Driver Kit)是一种截然集成的驱动程序开垦种类,它富含 Windows DDK,用于测试Wi
ndows 驱动器的可信赖性和安乐性.

因职业上项目标须求,笔者须求做驱动相关的费用,在此之前并从未接触过有关的学问,折腾一段时间下来,功能如需兑现了,也累积了一部分经验和眼光,所以在此做番总括。

WDM 是 Win32配备驱动程序体系布局

对此驱动开辟的开拓指导,微软官方文档网址已经提供了很详细的科目文档,何况在Github上提供了一文山会海标准的例程源码用于开辟人士参照他事他说加以考察。开辟人士在装有一定的驱动概念知识后,通过参考官方例程可以很轻巧完成全体一定效用的驱动应用程序。

Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编制程序复杂,初学者难以明白其编制程序
要点。为了消除这一主题材料,微软对WDM驱动程序的架构做了改革,产生了斩新的WDF(Windows Driver F
oundation)架构。它提供了面向对象和事件驱动的驱动程序开拓框架,大大裁减了支付难度。从现
在初始,精通Windows设备驱动程序的开采职员,由过去的“专门的工作”人员,将产生“普通”大众。

Windows驱动程序入门:

WDF驱动程序包罗四个品类,二个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS
文本;另一个是客商级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

Github:

 

 

 Windows的驱动开荒模型

   2.  驱动类型

  在Windows的两样版本上支付的驱动程序 "模型"(模型那个词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被称作KernelDriverMode驱动程序。
笔者认为这么些Mode是指一种驱动程序的布局和
运转的正规化),有过不相同的名目。比如在Windows9x上的驱动程序,都称之为VXD,而在WindowsNT上的驱动
前后相继被称呼KDM驱动程序,Windows98~3000这一个时代现身的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的一言一行来讲的。举个例子WDM驱动,必要求知足提供n种被要
求的特色(如电源处理、即插即用)才被叫做"WDM驱动"。假若不提供那些功效,那么统一称为NT式驱动。
大同小异的,WDF驱动也可能有它的一多种专门的职业。
  可是本书选拔精炼的区分方法。将全方位在Windows两千~WindowsVista下能健康运行且未调用WDF相
关的内核API函数的驱动都称呼守旧型驱动(包括NT式和WDM)。尽管调用了WDF相关的内核API则称之为WD
F驱动。
  请留意:WDF驱动是能够调用守旧型驱动所调用的内核API的,WDF可以说是古板型的升级版。
  模型的前进并不是和操作系统版本的进级换代齐步走的,而是有一个慢慢替代的长河。举例Windows98已
经扶助部分的WDM驱动程序,可是又帮助部分的VXD驱动。而到了Windows两千,则VXD这种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的功底上加码了一些新的风味,制定了部分新的科班而造
就的。绝大部分函数调用都是通用的。当然,Windows9x类别的根本完全区别,所以VXD与之比较,就没
有多个内核API函数是平等的。
  故而随着Windows9x的打入冷宫,VXD难逃深透被淘汰的运气。WindowsNT则发展成了新生的Windows版本
,KDM也化为了WDM而留存下来。当然,微软不会闲着,将来又推出了新的WDF。读者又不得不担心:本书
是用WDM写的依然用WDF写的呢?会不会刚刚学完又被淘汰呢?
  和VXD分歧,从KDM到WDM再到WDF是世代相承的,基本上KDM技士在上学WDM时早已占尽了福利。到
WDF也不例外,WDF与其说是新的驱动开辟模型,还不及说是在已有些内核API和数据结构的根底上,又封
装出一套让使用者感觉更轻松、更易用的以Wdf-起始的一组API。因而,读者完全没要求顾忌WDF的发展会
让如今学习古板型驱动的全力浅尝辄止。三个天下第一的事例是:大概在一九九一年到一九九七年间公布第三个本子的
硬盘上层过滤diskperf的代码,18年过去了,明天还是可以编写翻译并不荒谬在最新版本的Vista上运转。
  本书对于好多不可能找到WDF实例的章节,都选取了古板型驱动举办求证。举个例子磁盘过滤、文件系统
过滤和网络中间层驱动。其它为了从轻松入手,对于入门级的三个例证(串口和键盘)也使用了传统型
使得。然则设想磁盘和编造网卡(第5章和第11章),使用了WDF版本的例子,请读者注意识别。

 驱动分为如下几系列型:

 

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

劳务调控管理程序 SCM
类似于linux的照管进度(在linux也许unix操作系统中在系统的带领的时候会敞开非常多劳务,那个劳务
就称为守护进程)

驱动程序不是任其自流须求与硬件通信,借使供给拜望操作系统主旨数据,往往应用程序未有丰盛的权柄,这种景观则要求在基础格局下举行访谈。就地点5种驱动类型,小编参考着微软的驱动例子开辟过 鼠标键盘设备过滤驱动互连网过滤软件驱动程序,所以对驱动开荒的明亮仍在浅水区,如在阅读进度中发觉有误的地方,还请不吝提议。

 

动用的驱动类型涉及到代码的落到实处(需无需思念PNP和电源管理)和驱动的安装( NT式驱动程序以 service 的花样运维,别的驱动须求动用通用的INF文件安装),微软的官方文书档案那样提到:

windows服务在系统运营是加载,客商需在服务调节平台开启也许关闭服务
Driver 瑟维斯是劳务的贰个特例,遵守windows服务的合计
加载和煦在NT驱动分为多个步骤:
1.为NT驱动制造新的劳务
2.拉开此项服务
3.关闭此项服务
4.刨除NT驱动创立的劳务
如上七个步骤都以经过SCM建设构造的劳务来促成的。

style="font-family: 'Microsoft YaHei';">有关软件驱动程序,你的三个选项为 KMDF 和基础方式 Windows NT 驱动程序模型。 使用 KMDF 和水源方式 Windows NT 模型,你能够编写驱动程序,而不需求思索即插即用 (PnP) 和电源管理。 你能够改为静心于驱动程序的首要职务上。 使用 KMDF,你不要怀想 PnP 和电源,因为框架会为你管理 PnP 和电源。 使用基础方式 Windows NT 模型,你不用思虑 PnP 和电源,因为基础情势服务在与 PnP 和电源管理完全非亲非故的情况中运转。

 

   3.  开发环境

IO请求包-IRP

 

IRP(IO诉求包)用于win32和驱动程序通信,NT内核有贰个零件叫做IO管理器。IO管理器担任IRP的分发
,驱动程序里创设好器械並且创办好标识链接后,Win32就足以加载驱动了。而要让三个使得可以管理I
RP,必需给驱动增添IRP管理例程。

Visual Studio + WDK(Windows Driver Kit)

增添的章程正是再DriverEntry里面前碰着驱动对象DriverObject操作。该参数是叁个指南针,指向驱动对象,
使得对象内部有二个MajorFunction数组,该数组的档案的次序是
NTSTATUS (*PDRIVER_DISPATCH) (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp) 。那是一个函数指
针,指向每一个IRP对于的管理例程。最后就是为全部供给管理的IRP达成对应的例程。

里面WDK需求协和手动下载安装

 

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

 

   4.  实现方式

 

WDM vs WDF

对此刚接触驱动开荒的菜鸟来讲,作者不建议采纳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

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

只要要关闭测验情势,则需在决定台输入:

bcdedit /set testsigning off

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

 

以服务的花样运维

NT式的驱动程序允许以 service 的情势运维, 服务安装的例程可以参谋 WDF Sample 中的 Eventdrv 工程,恐怕参谋笔者写的有关进度互连网监察和控制的驱动例程的开源代码

 

利用INF文件安装

配备相关的驱动装置能够选拔INF实行安装,INF安装文件的编排提议从 WDF Sample 中找到合适的INF文件举行修改,如果您想打听INF的语法,可以参照这里

  • 经过设备管理器手工业安装

张开调整台,输入 devmgmt 回车,这是开荒设备管理器的当中一种办法,其余形式比方右键系统菜单栏Logo均能够张开职责处理器,只是使用命令行的主意比较少见,那Ritter别记下一下。找到感兴趣的 设施节点,右键 属性(或更新驱动程序软件),切换来 驱动程序,能够张开感兴趣的操作。这里所观察所提供的选项,后续等您熟谙了驱动装置的接口后,你会意识都有对应的接口对应每一种功能选项。

  • 通进程序达成自动安装

能够参谋 WDF Sample 中的Driver Install Frameworks API (DIFxAPI) SampleDevice Console (DevCon) Tool 多个工程,分别提供了差别调用接口的驱动装置方式,Device Console (DevCon) Tool 生成的devcon.exe 是多少个功用庞大的工具,不唯有可用于驱动(包)的安装和卸载,还足以博得器械的硬件ID,描述符以及设备所设置的驱动列表等音信,开荒职员能够从中一窥究竟。

在驱动的装置进度中,系统会自动记录安装的日志,在INF目录(路线一般在 C:Windowsinf下)下得以找到多少个日志文件 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) 代码签名,还索要交给到硬件开拓基本仪表盘,具体操作指南能够参见此处,你可以在该文书档案上找到驱动签字所需的别样内容。

 

本文由华夏彩票发布于操作系统,转载请注明出处:Windows驱动开拓入门指点,驱动开荒的片段基本概

您可能还会对下面的文章感兴趣: