首页

当前位置:新萄京娱乐场手机版 > 首页 > 笔者需要做驱动相关的开发,Windows设备驱动程序

笔者需要做驱动相关的开发,Windows设备驱动程序

来源:http://www.chrisproduction.com 作者:新萄京娱乐场手机版 时间:2019-10-05 16:46

   1.  前言

WDK(Windows Driver 基特)是一种截然集成的驱动程序开采种类,它满含 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驱动也可以有它的一体系专门的职业。
  可是本书采取简易的分歧方法。将全部在Windows3000~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年到一九九一年间发布第2个版本的
硬盘上层过滤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 输出
  • 与应用程序的通信:调整代码、IGL450Q,诉求队列

 

   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) 代码签字,还索要交给到硬件开垦为主仪表盘,具体操作指南能够参见此处,你能够在该文书档案上找到驱动具名所需的别样内容。

 

本文由新萄京娱乐场手机版发布于首页,转载请注明出处:笔者需要做驱动相关的开发,Windows设备驱动程序

关键词:

上一篇:没有了

下一篇:没有了