2138acom太阳集团appWindows设备驱动程序,笔者需要

   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的升华会
让前方学习古板型驱动的拼命有始无终。二个天下第一的例证是:差不离在1993年到一九九八年间发布第三个本子的
硬盘上层过滤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 输出
  • 与应用程序的通信:调控代码、ICR-VQ,央求队列

 

   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) 代码具名,还亟需提交到硬件开辟核心仪表盘,具体操作指南能够参照此处,你能够在该文书档案上找到驱动具名所需的别的内容。

 

本文由2138acom太阳集团app发布于网站首页,转载请注明出处:2138acom太阳集团appWindows设备驱动程序,笔者需要

相关阅读