Windows驱动开发入门指引太阳集团所有网址16877

   1.  前言

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

Windows的驱动开拓模型

因工作上项目标内需,作者须要做驱动相关的支付,此前并未接触过有关的学问,折腾一段时间下来,功效如需兑现了,也积累了1些经验和思想,所以在此做番总计。

WDM 是 Win32装备驱动程序种类布局

 

对于驱动开垦的支出带领,微软官方文书档案网址已经提供了很详细的课程文书档案,并且在Github上提供了1雨后春笋典型的例程源码用于开拓人士参考。开拓职员在具有一定的驱动概念知识后,通过参考官方例程能够很轻便完成全数一定成效的驱动应用程序。

Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编制程序复杂,初学者难以调节其编制程序
要领。为了缓解那1主题材料,微软对WDM驱动程序的架构做了改正,变成了全新的WDF(Windows Driver F
oundation)架构。它提供了面向对象和事件驱动的驱动程序开垦框架,大大下跌了支付难度。从现
在始发,驾驭Windows设备驱动程序的开采职员,由过去的“专业”职员,将成为“普通”大众。

    在Windows的不如版本上支付的驱动程序“模型”(模型这几个词语应该来自单词“Mode”。在Windows NT上,驱动程序被叫作Kernel Driver Mode驱动程序。作者感到这么些Mode是指一种驱动程序的布局和周转的规范),有过区别的名称。比如在Windows 九x上的驱动程序,都号称VXD,而在Windows NT上的驱动程序被称呼KDM驱动程序,Windows 98~三千以此时代出现的新模型叫做WDM。
    Windows的驱动模型概念,本来是就驱动程序的行为来讲的。比如WDM驱动,必须求知足提供n种被需要的特征(如电源管理、即插即用)才被誉为WDM驱动。假设不提供那几个职能,那么统一称为NT式驱动。同样的,WDF驱动也有它的一文山会海专业。
    不过本书采纳轻巧的界别方法。将全部在Windows 三千~Windows Vista下能常常运维且未调用WDF相关的内核API函数的驱动都称呼古板型驱动(包涵NT式和WDM)。借使调用了WDF相关的内核API则称之为WDF驱动。
请留意:WDF驱动是能够调用守旧型驱动所调用的内核API的,WDF能够说是守旧型的晋级版。
    模型的升华并不是和操作系统版本的升官齐步走的,而是有贰个日益代替的长河。比如Windows 九八已经支撑部分的WDM驱动程序,不过又援助部分的VXD驱动。而到了Windows 三千,则VXD那种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的功底上平添了一部分新的风味,制定了壹部分新的标准而培养的。绝一大半函数调用都以通用的。当然,Windows 九x种类的基业完全两样,所以VXD与之相比较,就未有3个内核API函数是同样的。
    故而随着Windows 九x的打入冷宫,VXD难逃通透到底被淘汰的运气。Windows NT则向上成了新兴的Windows版本,KDM也改成了WDM而留存下来。当然,微软不会闲着,今后又推出了新的WDF。读者又不得不担忧:本书是用WDM写的依然用WDF写的吧?会不会刚刚学完又被淘汰呢?
    和VXD差异,从KDM到WDM再到WDF是一脉相通的,基本上KDM程序员在就学WDM时曾经占尽了有益。到WDF也不例外,WDF与其说是新的驱动开垦模型,还不比说是在已部分内核API和数据结构的底蕴上,又包装出一套让使用者感觉更简便易行、更易用的以Wdf-起头的一组API。由此,读者大可不必顾忌WDF的升华会让后面学习守旧型驱动的拼命有始无终。3个宏儒硕学的例证是:大概在一9九二年到一9九一年间公布第多个本子的硬盘上层过滤diskperf的代码,18年过去了,前几天照例能够编写翻译并平常在新型版本的Vista上运维。
    本书对于超过一半不能找到WDF实例的章节,都施用了守旧型驱动进行认证。比如磁盘过滤、文件系统过滤和互连网中间层驱动。其余为了从轻便入手,对于入门级的七个例证(串口和键盘)也利用了守旧型驱动。可是虚拟磁盘和虚拟网卡(第6章和第二壹章),使用了WDF版本的事例,请读者注意辨别。

Windows驱动程序入门:

WDF驱动程序包括四个品种,四个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS
文件;另3个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

Github:

 

 

 Windows的驱动开辟模型

   2.  驱动类型

  在Windows的例外版本上支付的驱动程序 "模型"(模型那些词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被誉为KernelDriverMode驱动程序。
作者认为那一个Mode是指一种驱动程序的结构和
运维的行业内部),有过不相同的名号。比如在Windows9x上的驱动程序,都称为VXD,而在WindowsNT上的驱动
次第被叫做KDM驱动程序,Windows九八~两千以此时代出现的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的一颦一笑来说的。比如WDM驱动,必须求满意提供n种被要
求的天性(如电源管理、即插即用)才被叫作"WDM驱动"。假若不提供那一个意义,那么统一称为NT式驱动。
壹如既往的,WDF驱动也有它的一多种正式。
  然而本书选取简便易行的界别方法。将全方位在Windows两千~WindowsVista下能平常运作且未调用WDF相
关的内核API函数的驱动都叫作古板型驱动(包涵NT式和WDM)。假使调用了WDF相关的内核API则称之为WD
太阳集团所有网址16877,F驱动。
  请留意:WDF驱动是能够调用古板型驱动所调用的内核API的,WDF可以算得古板型的晋级版。
  模型的腾飞并不是和操作系统版本的升级齐步走的,而是有一个渐渐替代的历程。比如Windows98已
经支持部分的WDM驱动程序,可是又支持部分的VXD驱动。而到了Windows3000,则VXD那种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的基础上平添了部分新的特点,制定了有个别新的正规而造
就的。绝超越五成函数调用都以通用的。当然,Windows玖x体系的内核完全分歧,所以VXD与之相比较,就没
有二个内核API函数是均等的。
  故而随着Windows玖x的打入冷宫,VXD难逃深透被淘汰的流年。WindowsNT则向上成了新生的Windows版本
,KDM也产生了WDM而留存下来。当然,微软不会闲着,未来又推出了新的WDF。读者又不得不忧虑:本书
是用WDM写的依旧用WDF写的呢?会不会刚刚学完又被淘汰呢?
  和VXD不相同,从KDM到WDM再到WDF是世代相承的,基本上KDM程序员在念书WDM时早就占尽了有利于。到
WDF也不例外,WDF与其说是新的驱动开拓模型,还不比说是在已部分内核API和数据结构的基础上,又封
装出1套让使用者感觉更简便易行、更易用的以Wdf-伊始的1组API。由此,读者完全没供给担忧WDF的迈入会
让日前学习守旧型驱动的不竭一曝十寒。二个第一名的事例是:大概在19九2年到一九九一年间发表首个版本的
硬盘上层过滤diskperf的代码,1八年过去了,明铜仁旧得以编写翻译并平常在最新版本的Vista上运营。
  本书对于诸多不能够找到WDF实例的章节,都应用了守旧型驱动进行求证。比如磁盘过滤、文件系统
过滤和网络中间层驱动。其它为了从轻松入手,对于入门级的多个例子(串口和键盘)也利用了古板型
使得。可是虚拟磁盘和虚构网卡(第6章和第三一章),使用了WDF版本的例证,请读者注意甄别。

 驱动分为如下三种档次:

 

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

劳务调控管理程序 SCM
看似于linux的看护进度(在linux也许unix操作系统中在系统的指点的时候会开启多数服务,这个劳务
就叫做守护进度)

驱动程序不是必定需求与硬件通讯,如若急需拜访操作系统核心数据,往往应用程序未有丰硕的权限,那种情景则必要在基础形式下进展走访。就地点两种驱动类型,小编参考着微软的驱动例子开采过 鼠标键盘设备过滤驱动网络过滤软件驱动程序,所以对驱动开辟的知道仍在浅水区,如在阅读进程中发现成误的地方,还请不吝提议。

 

选拔的驱动类型涉及到代码的达成(需不供给考虑PNP和电源管理)和驱动的装置( NT式驱动程序以 service 的款型运转,别的驱动需求运用通用的INF文件安装),微软的法定文书档案那样提到:

windows服务在系统运维是加载,用户需在劳动调整平台开启也许关闭服务
Driver Service是服务的2个特例,遵循windows服务的商谈
加载和谐在NT驱动分为三个步骤:
一.为NT驱动创制新的劳动
二.敞开此项服务
3.闭馆此项服务
四.去除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内核有二个零件叫做IO管理器。IO管理器担负IRP的分发
,驱动程序里创造好装备并且创办好标记链接后,Win3二就足以加载驱动了。而要让3个使得能够处理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 201三 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 输出
  • 与应用程序的通信:调控代码、I中华VQ,请求队列

 

   5.  驱动安装

 

测试环境下安装驱动前

支出的驱动程序未有开始展览具名或许接纳测试具名,则必要在设施上开启测试格局,具体操作为:展开调节台,输入:

bcdedit /set testsigning on

回车,会提示:操作成功完成。 然后重启设备,开机后会在Computer桌面右下方突显有“测试形式”字样内容的水印。

假使要关门测试情势,则需在决定台输入:

bcdedit /set testsigning off

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

 

以劳动的花样运维

NT式的驱动程序允许以 service 的方式运营, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv 工程,可能参考作者写的有关过程互连网监察和控制的驱动例程的开源代码

 

选用INF文件安装

配备相关的驱动装置能够选取INF实行设置,INF安装文件的编排建议从 WDF Sample 中找到确切的INF文件举行改换,假诺你想询问INF的语法,可以参考这里

  • 由此配备管理器手工业安装

开发调整台,输入 devmgmt 回车,那是开采设备管理器的中间1种艺术,其余方式比如右键系统菜单栏Logo均能够展开任务管理器,只是利用命令行的方法相比少见,那里尤其记下一下。找到感兴趣的 配备节点,右键 属性(或更新驱动程序软件),切换来 驱动程序,能够开展感兴趣的操作。这里所看到所提供的选项,后续等你熟谙了驱动装置的接口后,你会意识都有相应的接口对应每一个功效选项。

  • 经进程序完成自动安装

能够参考 WDF Sample 中的Driver Install Frameworks API (DIFxAPI) SampleDevice Console (DevCon) Tool 四个工程,分别提供了不相同调用接口的驱动装置格局,Device Console (DevCon) Tool 生成的devcon.exe 是2个功用庞大的工具,不仅可用来驱动(包)的设置和卸载,还足以博得装备的硬件ID,描述符以及配备所设置的驱动列表等新闻,开拓职员能够从中1窥终究。

在驱动的设置进程中,系统会自动记录安装的日记,在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) 代码签字,还亟需付出到硬件开荒主导仪表盘,具体操作指南能够参见此处,你能够在该文书档案上找到驱动签字所需的其余内容。

 

本文由太阳集团所有网址16877发布于www.16877.com,转载请注明出处:Windows驱动开发入门指引太阳集团所有网址16877

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