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
SDK来开垦Windows应用程序。那么,程序猿有必不可少知道Windows
SDK中的基本要素,诸如音讯分发机制、各个图片功能等。在此种景观下,阅读一些卓越的例证程序代码往往能起到高速引领入门的成效。近似地,C/C++程序员假如局限于C/C++语言自身,很难编写出高水平的实用程序。他们不唯有要了然C/C++运营库中等学园函授数和项目标用法,以致还要通晓那几个函数和品种的完结机理。尽管源代码层面上的库,比如STL(C++的科班模板库卡塔尔国,也急需领会其代码完成本领灵活自如地用好那个库(举例STL中的种种容器数据结构、迭代器或算法卡塔 尔(英语:State of Qatar)。

Windows驱动程序入门:

WDF驱动程序包蕴多少个类型,叁个是内核级的,称为KMDF(Kernel-Mode Driver
Framework卡塔 尔(阿拉伯语:قطر‎,为SYS
文本;另四个是顾客级的,称为UMDF(User-Mode
Driver Framework卡塔尔,为DLL文件。

那便是说,对于系统软件程序猿,“内功”是怎么样吧?系统软件是指操作系统自己依旧依据于操作系统上为运用软件提供劳务的软件。系统软件也许有机缘跟硬件直接打交道,那给与了程序猿更加强的调整本事,他们有机会到场操作系统的一坐一起逻辑,以致更正操作系统的一言一行特征。但随之而来的是对系统软件代码的更加高必要。当代操作系统为利用软件提供了很强的容错技能,应用程序的倒闭平时不会涉嫌到操作系统自己的和谐,但操作系统对系统软件的容错技能却相比较单薄,终归系统软件运转起来然后可能被融合到操作系统的试行逻辑中成为操作系统的豆蔻梢头有个别。因此,驾驭和摆布操作系统的运维机制作而成为系统程序猿编写出准确、高效的系统软件的基本前提。所谓“内功”,便着落在那。

Github:

 

在Windows平台上开采软件,编写Windows内核驱动程序是非常核准程序猿“内功”的。内核驱动程序的代码量平常比相当小,但驱动程序框架中的任何三个函数,以致那个函数中其余大器晚成行代码背后都大概包括着复杂的逻辑,可能隐式的渴求和要是。固然驱动程序编写者在纯粹自行定义的函数中,也必得谨严地关爱一些与情况有关的成分,举个例子代码是或不是可被中止、是或不是可重入,可能所引用的内部存储器是不是被换来到外部存款和储蓄器。其他方面,APP开拓中的超多概念,比如地址空间、内部存储器管理、相当处理和四十五线程并发等,在驱动程序开辟中只怕须要有两样的精通方法。其余,常用的C运维库函数基本上不再符合于驱动程序了,驱动程序编写者必需面前境遇二个全新的尾部景况和帮忙平台。因而,要编写制定可科学运转的驱动程序,程序猿不仅仅要通晓地掌握驱动程序所指向的指标设备或效益(只怕满含硬件设施的各样特色卡塔 尔(阿拉伯语:قطر‎,还要调控Windows内核是何等与驱动程序打交道的,以致基本湖南中国广播公司大管理和平运动行机制,特别是内部存款和储蓄器处理、线程调解和产出调整。

 

 Windows的驱动开垦模型

当Windows内核驱动程序被加载到底蕴中何况运营之后,它们形成了Windows内核的少年老成某个,驱动程序中的接口函数在方便的随即被基本调用,那是Windows驱动程序的着力专门的职业措施。Microsoft定义了WDM(Windows驱动程序模型卡塔尔来分明驱动程序的构造,以致Windows内核如何与WDM驱动程序打交道。WDM不止包含I/O微处理机定义的驱动程序框架,还定义了在驱动程序中怎么着支撑PnP(Plug
and Play,即插即用卡塔尔国、电源管理和WMI(Windows Management
Instrumentation,Windows管理标准卡塔 尔(英语:State of Qatar)。由此,若要编写三个通通帮衬WDM的驱动程序,也急需领悟WDM中所涉及的顺序内核组件。

   2.  驱动类型

  在Windows的比不上版本上付出的驱动程序
“模型”(模型那一个词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被叫做KernelDriverMode驱动程序。
作者以为那个Mode是指豆蔻梢头种驱动程序的布局和
运营的正统卡塔 尔(英语:State of Qatar),有过差别的称谓。比方在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的腾飞会
让前面学习守旧型驱动的竭力半途而返。叁个超人的例子是:大概在壹玖玖壹年到1992年间公布第三个版本的
硬盘上层过滤diskperf的代码,18年过去了,前不久照旧得以编写翻译并正常在新式版本的Vista上运维。
  本书对于大多无法找到WDF实例的章节,都应用了古板型驱动进行求证。举例磁盘过滤、文件系统
过滤和网络中间层驱动。别的为了从简单入手,对于入门级的七个例证(串口和键盘卡塔尔国也利用了守旧型
使得。可是设想磁盘和编造网卡(第5章和第11章卡塔尔,使用了WDF版本的例子,请读者注意识别。

Windows内核驱动程序与底蕴的严苛关联性使得驱动程序的调护医治极为不平价,从某种意义上讲,驱动程序的调整等同于Windows内核的调解。而且,对于某个特定的逻辑错误,内核调节和测验器以至是敬谢不敏的。正因为那些缘故,内核驱动程序的代码尽或然简练,从软件设计角度来讲,应最大程度地把效果代码放到应用程序中,在驱动程序中只留下最供给的效率逻辑。那样的安插性也得以使Windows内核被不科学驱动程序代码牵连而以致牢固性难点的可能率相对降低。

 驱动分为如下几体系型:

 

为了便于Windows驱动程序的支付,Microsoft定义了一个驱动程序框架,称为WDF(Windows
Driver Foundation卡塔尔,当中针对内核驱动程序的部分称作KMDF(Kernel-Mode
Driver
Framework卡塔尔国。KMDF实际上是叁个库,它包裹了WDM中有个别大旨的代码逻辑,进而使工程师能够进一层有利地编写出WDM驱动程序。KMDF能够部分地简化Windows内核驱动程序的支付职务,可是精气神儿上它并不曾下跌内核驱动程序的冗杂,以至必要工程师付出额外的求学努力。

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

劳动调节管理程序 SCM
就疑似于linux的医生和护士进度(在linux或然unix操作系统中在系统的教导的时候会展开非常多服务,这一个服务
就称为守护进度卡塔尔国

总体上看,作为一名系统程序猿,你须要看清指标操作系统中与你的软件打交道的逐个构件,也要那些通晓地领会你所依附的开拓工具是何等接济您完了这或多或少的。系统程序猿往往面对着比使用程序猿更加长的学习曲线,可是,系统技术员从编写程序中得到的野趣也是在运用层上麻烦心得获得的。我相信,当你发掘自个儿编写的软件模块已经与操作系统内核融为风流倜傥体时,那一刻你的以为自然是手心里攥着八个操作系统——操作系统尽在您的掌握控制中了。

驱动程序不是自然需求与硬件通信,假如急需拜望操作系统主旨数据,往往应用程序未有丰硕的权力,这种状态则须求在基本情势下实行访谈。就地方5种驱动类型,我参考着微软的驱动例子开采过
鼠标键盘设备过滤驱动
互连网过滤软件驱动程序,所以对驱动开荒的知情仍在浅水区,如在翻阅过程中窥见有误之处,还请不吝提议。

 

那本书《竹林蹊径——深入显出Windows驱动开辟》是四人笔者张佩、马勇和董鉴源的新式力作,他们将和谐在施行中积存起来的经历收拾成册,以期望后读书人能少走弯路,减少Windows驱动程序开采的上学之路。那本书根本介绍了KMDF、USB/1394和音频驱动程序的开销,以致设备驱动程序的批发和装置。提议有必然Windows驱动程序开拓基本功的读者看豆蔻梢头看那本书,特别是,假若你正筹划接受KMDF,可能正在致力与USB/1394或音频驱动程序相关的编程专门的学问,那么,那本书就是生龙活虎份宝贵的实行辅导了。

利用的驱动类型涉及到代码的落到实处(需不必要构思PNP和电源管理卡塔尔和驱动的安装(
NT式驱动程序以 service
的花样运营,别的驱动必要动用通用的INF文件安装卡塔尔,微软的官方文书档案那样提到:

windows服务在系统运转是加载,顾客需在劳动调整平台开启恐怕关闭服务
Driver 瑟维斯是劳动的叁个特例,服从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月5日于香岛西二旗

   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完成对应的例程。

竹林蹊径:深入显出Windows驱动开垦

当中WDK要求和睦手动下载安装

 

张佩 马勇 董鉴源 编著

小编是在Windows平台上付出,使用的支出条件为
Visual Studio 二〇一二 + WDK 8.1

ISBN 978-7-121-12555-3

 

2011年2月出版

   4.  实现方式

定价:69.00元

 

16开

WDM vs WDF

对于刚同志接触驱动开垦的新手来讲,笔者不建议利用WDM(Windows
驱动程序模型卡塔尔国进行开采。最近在互连网能找到的有关驱动开荒的普通话图书基本上都以围绕WDM形式开展描述的,而至于WDF(Windows
驱动框架卡塔尔国开拓的书籍异常少,《竹林溪径——深入显出Window驱动开荒》和《Developing
Drivers with the Windows Driver
Foundation》算是两本汇报基于WDF开采驱动的书籍,两个都能在网络找到电子书能源。

 

532页

据书上说WDF的驱动开荒

WDF的支出必要坚守一定的家有家规,开辟达成时索要思量超多的内幕,由于篇幅有限,作者凭着本人的资历临时稍做列举,后续将写意气风发篇针对WDF驱动开垦的小说。

  • PNP和电源管理(WDF已经扶植封装了半数以上的接口卡塔尔;
  • 种种对象:驱动对象,设备对象,WDF对象,文件对象,队列对象;
  • 使得上下文:一时称为设备扩大,用于存款和储蓄特定设备对象的相干消息的数据结构;
  • 对象的放出:须要构思差异属性对象释放的机会;
  • 中断伏乞等第:管理不当易招致蓝屏;
  • 分页与非分页内部存储器;
  • 同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等;
  • 日志追踪记录:
    调试的必备,能够应用 WPP(Windows软件追踪预微处理机卡塔尔国或简捷的
    DebugPrint 输出
  • 与应用程序的简报:调整代码、I陆风X8Q,恳求队列

 

   5.  驱动安装

 

测量检验景况下安装驱动前

开辟的驱动程序未有张开签订合同或然选择测验签字,则必要在道具上开启测量检验情势,具体操作为:展开调节台,输入:

bcdedit /set testsigning on

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

就算要关门测量检验格局,则需在决定台输入:

bcdedit /set testsigning off

回车,相符会提示:操作成功完成。
重启设备后则会发觉桌面右下角的水印消失。

 

本书是小编根据连年的干活学习涉世,总计的第一手驱动开拓资料。本书越多的是经验之谈,一些实行中的小发现小意外,颇为书中内容添彩。

以服务的款型运营

NT式的驱动程序允许以 service
的款式运转, 服务安装的例程能够参照他事他说加以考察 WDF Sample 中的 Eventdrv
工程,只怕参谋小编写的有关进度互连网监控的驱动例程的开源代码

 

本书的特点之一,是对WDF框架做了相当多的切入。本书第二个举足轻重内容是(第3~7章卡塔 尔(英语:State of Qatar)围绕WDF而打开研究,侧入眼各有不一样。第3章以框架为商讨的中坚;第4、5两章以WDF框架开荒USB和1394驱动;第6章叙述内核C++编制程序,也以WDF框架为底本;第7章呈报WDF驱动的测量检验和调度。

动用INF文件安装

配备相关的驱动装置能够选择INF进行安装,INF安装文件的编辑提议从
WDF Sample
中找到符合的INF文件实行修正,假如你想明白INF的语法,能够参谋这里

  • 经过设备微机手工业安装

开辟调控台,输入 devmgmt
回车,那是张开设备微型机的中间大器晚成种办法,别的方法比方右键系统菜单栏Logo均可以打开任务微处理机,只是接收命令行的法子相当少见,那Ritter别记下一下。找到感兴趣的
设施节点,右键 属性(或更新驱动程序软件卡塔 尔(英语:State of Qatar),切换成
驱动程序,能够拓宽感兴趣的操作。这里所观察所提供的选项,后续等你纯熟了驱动装置的接口后,你会意识都有对应的接口对应每一种功用选项。

  • 经进度序达成自动安装

可以参照他事他说加以考查 WDF Sample
中的Driver Install Frameworks API (DIFxAPI) Sample
Device Console (DevCon) Tool
多少个工程,分别提供了不相同调用接口的驱动装置形式,Device Console (DevCon) Tool
生成的devcon.exe
是叁个功用强盛的工具,不止可用来驱动(包卡塔 尔(阿拉伯语:قطر‎的设置和卸载,还足以获得器材的硬件ID,描述符以至设备所设置的驱动列表等音讯,开垦职员能够从当中黄金年代窥毕竟。

在使得的安装进度中,系统会自动记录安装的日记,在INF目录(路线平时在 C:Windowsinf下卡塔尔国下能够找到七个日志文件
setupapi.app.logSetupapi.dev.log
,查看那四个日志文件有帮忙驾驭驱动装置的试行进程,同不时间也造福排查驱动装置进程中现身的十二分。

使得的装置涉及到驱动文件的校验(有限支撑驱动文件的完整性和合法性卡塔 尔(英语:State of Qatar),驱动的先行级计算(选用最优的驱动去相称当前识别到的新的设施卡塔 尔(英语:State of Qatar),驱动的停放目录(Driver
Store卡塔 尔(英语:State of Qatar)等剧情。开拓职员熟知驱动装置逻辑有助于驱动的费用,感兴趣能够透过此处扩充问询。

 

   6.  驱动签名

 

其次个重大内容是有关音摄像驱动开拓(第10~11章卡塔尔。音录像驱动包涵AVStream架构,本书做了较详细的阐述。第10章呈报使用AVStream小端口框架结构,第11章汇报ASIO音频驱动开拓。

测量试验境遇

经过VS集成开采条件成立 Driver
应用方案后会生成多少个类别,右键属性展开 XXX Package,侧边选中
Driver Signing ,在左边栏 Sign Mode 选择 Test Sign,在
Test Certificate选择
<Create test certificate...>,则在编写翻译时会自动生成测量试验签字证书。

 

其八个珍视内容是有关设备驱动装置(第12~14章卡塔尔。第12章讲系统安装模块,从全体角度演说系统和设施驱动怎么样协作完好地打开工作;第13章呈报INF安装文件的内幕,包蕴种种域的效果与利益,以至广大安装指令的运用。第14章讲哪些编写驱动装置软件。

接续后代遭遇

从Win10初步,驱动文件包不独有必要进行扩充验证
(EV)
代码签字,还索要付出到硬件开垦基本仪表盘,具体操作指南能够参照此处,你可以在该文书档案上找到驱动具名所需的其它内容。

 

剩余的有的章节,分别是有关驱动入门(第1、2章卡塔尔国、Windbg调节和测试命令(第8章卡塔 尔(英语:State of Qatar)、内核同步(第9章卡塔尔等剧情。

本书相符日常入门级内核程序猿,对WDF有意思味,打算开辟USB或1394设施驱动者,本书特别有用。本书对于入行较久,阅世丰硕的程序猿,也颇有一定的参照他事他说加以调查价值。

相关文章