当前位置: 亚洲城ca88 > 亚洲城 > 正文

Windows的驱动开采模型,驱动开辟的部分基本概念

时间:2019-04-22 16:33来源:亚洲城
   1.  前言 WDK(Windows DriverKit)是1种截然集成的驱动程序开采种类,它含有 Windows DDK,用于测试Wi ndows 驱动器的可信性和平安性. Windows的驱动开垦模型 因工作上种类的内需,我须要做

   1.  前言

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

Windows的驱动开垦模型

因工作上种类的内需,我须要做驱动相关的开拓,此前并未接触过相关的知识,折腾一段时间下来,成效如需兑现了,也积攒了一些经历和意见,所以在此做番总括。

WDM 是 Win32装备驱动程序系列布局

 

对于驱动开拓的付出辅导,微软官方文书档案网址已经提供了很详细的学科文书档案,并且在Github上提供了1雨后苦笋标准的例程源码用于开辟职员参考。开辟人士在享有一定的驱动概念知识后,通过参考官方例程能够很轻便完结全数一定效能的驱动应用程序。

Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编制程序复杂,初学者难以掌握其编制程序
要领。为了消除这一难点,微软对WDM驱动程序的架构做了创新,形成了全新的WDF(Windows Driver F
oundation)框架结构。它提供了面向对象和事件驱动的驱动程序开垦框架,大大下落了费用难度。从现
在开首,理解Windows设备驱动程序的开垦人士,由过去的“专门的学问”人员,将改成“普通”大众。

    在Windows的例外版本上支出的驱动程序“模型”(模型那几个词语应该来自单词“Mode”。在Windows NT上,驱动程序被称呼Kernel Driver Mode驱动程序。作者感觉这一个Mode是指一种驱动程序的构造和平运动行的正统),有过分歧的名号。比方在Windows 玖x上的驱动程序,都称之为VXD,而在Windows NT上的驱动程序被叫做KDM驱动程序,Windows 玖八~两千这么些时期出现的新模型叫做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 3000,则VXD那种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的功底上加码了部分新的风味,制定了部分新的正经而作育的。绝大多数函数调用都是通用的。当然,Windows 九x种类的基本完全两样,所以VXD与之比较,就从未有过一个内核API函数是均等的。
    故而随着Windows 九x的打入冷宫,VXD难逃通透到底被淘汰的气数。Windows NT则提升成了新兴的Windows版本,KDM也变成了WDM而存在下去。当然,微软不会闲着,以往又推出了新的WDF。读者又不得不挂念:本书是用WDM写的依然用WDF写的啊?会不会刚刚学完又被淘汰呢?
    和VXD分裂,从KDM到WDM再到WDF是一脉相传的,基本上KDM程序员在读书WDM时曾经占尽了造福。到WDF也不例外,WDF与其说是新的驱动开采模型,还比不上说是在已有的内核API和数据结构的基本功上,又包装出壹套让使用者以为更简约、更易用的以Wdf-起始的1组API。由此,读者大可不必顾虑WDF的升高会让前边学习守旧型驱动的大力浅尝辄止。二个卓绝群伦的例子是:差不多在一九玖5年到壹玖93年间公布第一个本子的硬盘上层过滤diskperf的代码,18年过去了,明日还能够编写翻译并符合规律在新型版本的Vista上运转。
    本书对于绝大好些个不能够找到WDF实例的章节,都施用了古板型驱动进行表达。举个例子磁盘过滤、文件系统过滤和网络中间层驱动。其余为了从轻便入手,对于入门级的五个例证(串口和键盘)也利用了守旧型驱动。然则虚拟磁盘和虚拟网卡(第肆章和第一一章),使用了WDF版本的事例,请读者注意甄别。

Windows驱动程序入门:

WDF驱动程序包蕴七个体系,三个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS
文本;另三个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

Github:

 

 

 Windows的驱动开采模型

   2.  驱动类型

  在Windows的两样版本上支出的驱动程序 "模型"(模型那几个词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被称为KernelDriverMode驱动程序。
小编以为这些Mode是指壹种驱动程序的构造和
运作的正式),有过差别的名称。比方在Windows九x上的驱动程序,都称呼VXD,而在WindowsNT上的驱动
程序被誉为KDM驱动程序,Windows九八~三千以此时期出现的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的行为来说的。比如WDM驱动,必供给满意提供n种被要
求的性状(如电源管理、即插即用)才被喻为"WDM驱动"。假诺不提供那个功效,那么统1称为NT式驱动。
同样的,WDF驱动也有它的一文山会海标准。
  然而本书接纳简易的差别方法。将全部在Windows两千~WindowsVista下能通常运作且未调用WDF相
关的内核API函数的驱动都称为古板型驱动(包涵NT式和WDM)。如若调用了WDF相关的内核API则名叫WD
F驱动。
  请小心:WDF驱动是能够调用古板型驱动所调用的内核API的,WDF可以算得守旧型的进级版。
  模型的进化并不是和操作系统版本的进步齐步走的,而是有一个逐步替代的经过。比如Windows九八已
经援救部分的WDM驱动程序,不过又补助部分的VXD驱动。而到了Windows三千,则VXD那种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的底子上平添了有的新的表征,制定了有的新的正儿⑧经而造
就的。绝大多数函数调用都以通用的。当然,Windows九x类别的基业完全两样,所以VXD与之相比较,就没
有3个内核API函数是如出一辙的。
  故而随着Windows玖x的打入冷宫,VXD难逃深透被淘汰的天命。WindowsNT则发展成了后来的Windows版本
,KDM也成为了WDM而存在下去。当然,微软不会闲着,现在又推出了新的WDF。读者又不得不忧郁:本书
是用WDM写的照旧用WDF写的啊?会不会刚刚学完又被淘汰呢?
  和VXD不一样,从KDM到WDM再到WDF是世代相承的,基本上KDM程序猿在上学WDM时早就占尽了有利于。到
WDF也不例外,WDF与其说是新的驱动开荒模型,还不比说是在已部分内核API和数据结构的根底上,又封
装出一套让使用者感觉更简短、更易用的以Wdf-初叶的一组API。由此,读者大可不必担忧WDF的提升会
让前面学习守旧型驱动的拼命有始无终。三个独立的例证是:大致在一玖九二年到1994年间发表第叁个本子的
硬盘上层过滤diskperf的代码,18年过去了,明天依旧得以编写翻译并符合规律在新式版本的Vista上运营。
  本书对于大很多不能够找到WDF实例的章节,都应用了守旧型驱动举行认证。比方磁盘过滤、文件系统
过滤和互连网中间层驱动。别的为了从简单动手,对于入门级的多少个例子(串口和键盘)也使用了古板型
使得。可是虚拟磁盘和虚构网卡(第陆章和第二一章),使用了WDF版本的例证,请读者注意甄别。

 驱动分为如下几连串型:

 

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

劳务调整管理程序 SCM
类似于linux的护理进度(在linux也许unix操作系统中在系统的辅导的时候会张开大多服务,这么些服务
就叫做守护进程)

驱动程序不是自然必要与硬件通信,就算急需拜访操作系统大旨数据,往往应用程序未有充足的权力,那种气象则供给在基本方式下张开走访。就地点七种驱动类型,笔者参考着微软的驱动例子开荒过 鼠标键盘设备过滤驱动互联网过滤软件驱动程序,所以对驱动开拓的精晓仍在浅水区,如在读书进度中窥见有误的地方,还请不吝建议。

 

运用的驱动类型涉及到代码的兑现(需不需求思虑PNP和电源管理)和驱动的装置( NT式驱动程序以 service 的款型运转,其余驱动供给接纳通用的INF文件安装),微软的合法文书档案那样提到:

windows服务在系统运营是加载,用户需在劳动调控平台开启或然关闭服务
Driver 瑟维斯是劳动的多少个特例,遵从windows服务的批评
加载和睦在NT驱动分为八个步骤:
1.为NT驱动创造新的劳动
2.敞开此项服务
三.闭馆此项服务
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请求包)用于win3二和驱动程序通讯,NT内核有2个零部件叫做IO管理器。IO管理器顶住IRP的分发
,驱动程序里创制好设备并且成立好标记链接后,Win3二就能够加载驱动了。而要让1个使得能够管理I
RP,必需给驱动增加IRP管理例程。

Visual Studio WDK(Windows Driver Kit)

足够的章程就是再DriverEntry里面对驱动对象DriverObject操作。该参数是1个指南针,指向驱动对象,
使得对象内部有2个MajorFunction数组,该数组的类型是
NTSTATUS (*PDRIVER_DISPATCH) (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp) 。那是五个函数指
针,指向各类IRP对于的管理例程。最终正是为全数必要管理的IRP达成对应的例程。

中间WDK供给协和手动下载安装

 

笔者是在Windows平台上开采,使用的开荒条件为 Visual Studio 20壹三 WDK 八.一

 

   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 输出
  • 与应用程序的通信:调节代码、IHighlanderQ,请求队列

 

   5.  驱动安装

 

测试碰着下安装驱动前

支出的驱动程序未有进展具名恐怕应用测试具名,则需求在配备上开启测试格局,具体操作为:张开调节台,输入:

bcdedit /set testsigning on

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

倘使要关张测试方式,则需在调节台输入:

bcdedit /set testsigning off

回车,一样会提示:操作成功完成。 重启设备后则会开采桌面右下角的水印消失。

 

以服务的花样运行

NT式的驱动程序允许以 service 的情势运维, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv 工程,或许参考作者写的关于进度互连网监督的驱动例程的开源代码

 

选择INF文件安装

道具相关的驱动装置能够挑选INF实行设置,INF安装文件的编纂提出从 WDF Sample 中找到合适的INF文件实行修改,倘使您想理解INF的语法,能够参见这里

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

开采调控台,输入 devmgmt 回车,那是开荒设备管理器的其中一种方法,其他措施比如右键系统菜单栏图标均能够张开职分管理器,只是利用命令行的章程比较少见,那Ritter别记下一下。找到感兴趣的 器械节点,右键 属性(或更新驱动程序软件),切换成 驱动程序,能够开始展览感兴趣的操作。那里所阅览所提供的选项,后续等你纯熟了驱动装置的接口后,你会意识都有相应的接口对应每种作用选项。

  • 透进度序达成自动安装

能够参考 WDF Sample 中的Driver Install Frameworks API (DIFxAPI) SampleDevice Console (DevCon) Tool 四个工程,分别提供了分歧调用接口的驱动装置情势,Device Console (DevCon) Tool 生成的devcon.exe 是1个功效壮大的工具,不仅可用于驱动(包)的安装和卸载,还足以获得道具的硬件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...>,则在编写翻译时会自动生成测试具名证书。

 

生产条件

从Win拾起始,驱动文件包不仅要求展开扩张验证 (EV) 代码签字,还亟需提交到硬件开采基本仪表盘,具体操作指南能够参照此处,你能够在该文书档案上找到驱动签字所需的其余内容。

 

编辑:亚洲城 本文来源:Windows的驱动开采模型,驱动开辟的部分基本概念

关键词: 亚洲城ca88