Windows驱动开发入门指引,驱动开发的一些基本概

作者: 计算机工程  发布:2019-09-20

   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~三千以此时期出现的新模型叫做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 Service是劳务的一个特例,服从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 二零一三 + 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 输出
  • 与应用程序的简报:调整代码、IRQ,央浼队列

 

   5.  驱动安装

 

测验情形下安装驱动前

开拓的驱动程序未有举办具名恐怕使用测验签名,则须要在装置上开启测验格局,具体操作为:张开控制台,输入:

bcdedit /set testsigning on

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

万一要关张测验方式,则需在调控台输入:

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) 代码具名,还索要付出到硬件开垦基本仪表盘,具体操作指南可以参见此处,你可以在该文书档案上找到驱动具名所需的别样内容。

 

本文由贝博体育app发布于计算机工程,转载请注明出处:Windows驱动开发入门指引,驱动开发的一些基本概

关键词:

上一篇:找不到网络名
下一篇:DHCP服务器搭建