>

使得开采的部分基本概念,Windows驱动开垦入门辅

- 编辑:www.bifa688.com -

使得开采的部分基本概念,Windows驱动开垦入门辅

   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中的各类容器数据结构、迭代器或算法)。

Windows驱动程序入门:

WDF驱动程序蕴涵多少个等级次序,八个是内核级的,称为KMDF(Kernel-Mode Driver Framework卡塔 尔(阿拉伯语:قطر‎,为SYS
文本;另三个是客商级的,称为UMDF(User-Mode Driver Framework卡塔 尔(英语:State of Qatar),为DLL文件。

那正是说,对于系统软件技士,“内功”是怎样吧?系统软件是指操作系统本人依然依赖于操作系统上为运用软件提供劳务的软件。系统软件大概有时机跟硬件直接打交道,那给与了程序员越来越强的调整技术,他们有时机到场操作系统的一举一动逻辑,以致改革操作系统的一颦一笑特征。但随之而来的是对系统软件代码的更加高须求。现代操作系统为利用软件提供了很强的容错才能,应用程序的战败平时不会涉嫌到操作系统本人的安居,但操作系统对系统软件的容错技能却相比单薄,终归系统软件运营起来然后只怕被融入到操作系统的实行逻辑中成为操作系统的一片段。因而,精通和调控操作系统的运转搭乘飞机制作而成为系统程序员编写出正确、高效的系统软件的基本前提。所谓“内功”,便着落在那。

Github:

 

在Windows平台上开辟软件,编写Windows内核驱动程序是Infiniti核准技术员“内功”的。内核驱动程序的代码量常常非常小,但驱动程序框架中的任何贰个函数,以至这几个函数中别的朝气蓬勃行代码背后都只怕蕴涵着复杂的逻辑,只怕隐式的渴求和要是。即使驱动程序编写者在纯粹自行定义的函数中,也不得不事缓则圆地关爱一些与情状有关的成分,举例代码是还是不是可被中断、是还是不是可重入,只怕所引述的内部存款和储蓄器是不是被换来到外部存款和储蓄器。另一面,应用程式开垦中的相当多定义,比方地址空间、内部存储器管理、卓殊管理和多线程并发等,在驱动程序开辟中可能需求有不一样的了然方法。其它,常用的C运营库函数基本上不再适合于驱动程序了,驱动程序编写者必需面临二个簇新的平底景况和支撑平台。因而,要编写可科学生运动维的驱动程序,技术员不仅仅要清楚地精晓驱动程序所指向的对象设备或效果与利益(大概包蕴硬件装置的各类风味卡塔尔国,还要调节Windows内核是怎么与驱动程序打交道的,以致水源山西中国广播公司大管理和平运动行机制,非常是内部存款和储蓄器管理、线程调治和产出调节。

 

 Windows的驱动开垦模型

当Windows内核驱动程序被加载到根本中而且运转以后,它们成为了Windows内核的风度翩翩有的,驱动程序中的接口函数在适宜的每天被基本调用,那是Windows驱动程序的基本工作格局。Microsoft定义了WDM(Windows驱动程序模型卡塔 尔(英语:State of Qatar)来鲜明驱动程序的布局,以至Windows内核怎么样与WDM驱动程序打交道。WDM不仅仅满含I/O微型机定义的驱动程序框架,还定义了在驱动程序中怎么着帮助PnP(Plug and Play,即插即用卡塔 尔(英语:State of Qatar)、电源管理和WMI(Windows Management Instrumentation,Windows管理专门的学问卡塔尔国。因而,若要编写七个完全扶助WDM的驱动程序,也亟需掌握WDM中所涉及的生机勃勃意气风发内核组件。

   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的前进会
让前边学习守旧型驱动的用力浅尝辄止。三个天下第一的例子是:差十分少在一九九四年到一九九一年间发布第五个本子的
硬盘上层过滤diskperf的代码,18年过去了,前日照例能够编写翻译并平常在新式版本的Vista上运行。
  本书对于超过五成不能够找到WDF实例的章节,都施用了守旧型驱动举行求证。举个例子磁盘过滤、文件系统
过滤和网络中间层驱动。其余为了从轻易入手,对于入门级的四个例子(串口和键盘卡塔 尔(阿拉伯语:قطر‎也运用了守旧型
使得。可是设想磁盘和设想网卡(第5章和第11章卡塔尔国,使用了WDF版本的事例,请读者注意甄别。

Windows内核驱动程序与底工的牢牢关联性使得驱动程序的调节和测量检验极为不方便人民群众,从某种意义上讲,驱动程序的调养等同于Windows内核的调解。何况,对于有个别特定的逻辑错误,内核调节和测量试验器以致是敬敏不谢的。正因为这一个缘故,内核驱动程序的代码尽可能精短,从软件设计角度来说,应最大程度地把效果与利益代码放到应用程序中,在驱动程序中只留下最需要的作用逻辑。那样的设计也得以使Windows内核被不得法驱动程序代码牵连而诱致稳固性难点的可能率绝对减弱。

 驱动分为如下几体系型:

 

为了便于Windows驱动程序的付出,Microsoft定义了贰个驱动程序框架,称为WDF(Windows Driver Foundation卡塔 尔(英语:State of Qatar),当中针对内核驱动程序的部分称作KMDF(Kernel-Mode Driver Framework卡塔尔。KMDF实际上是二个库,它包裹了WDM中有的基本的代码逻辑,进而使程序猿能够进一层平价地编写出WDM驱动程序。KMDF能够部分地简化Windows内核驱动程序的付出任务,可是精气神上它并未减退内核驱动程序的千头万绪,以至需求技术员付出额外的就学努力。

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

劳务调控管理程序 SCM
好像于linux的医生和医护人员进度(在linux可能unix操作系统中在系统的携带的时候会打开超多劳务,那么些劳务
就称为守护进度卡塔 尔(英语:State of Qatar)

不问可见,作为一名系统技士,你要求看清指标操作系统中与您的软件打交道的逐大器晚成构件,也要充裕清楚地领会您所信任的开采工具是怎么着扶持你成功这点的。系统程序猿往往面前蒙受着比接纳程序员更加长的上学曲线,然则,系统程序猿从编写程序中赢得的意趣也是在应用层上难以心得获得的。笔者言听计用,当你发现自身编写的软件模块已经与操作系统内核融为黄金年代体时,那一刻你的认为自然是手心里攥着一个操作系统——操作系统尽在您的掌握控制中了。

驱动程序不是料定须要与硬件通信,如若要求探问操作系统宗旨数据,往往应用程序未有丰富的权杖,这种景观则需求在根本形式下进行访谈。就地方5种驱动类型,小编参谋着微软的驱动例子开荒过 鼠标键盘设备过滤驱动网络过滤软件驱动程序,所以对驱动开拓的了然仍在浅水区,如在翻阅进程中窥见有误的地点,还请不吝提出。

 

那本书《竹林蹊径——深入显出Windows驱动开垦》是三人小编张佩、马勇和董鉴源的最新力作,他们将团结在奉行中积累起来的资历整理成册,以期望后读书人能少走弯路,缩小Windows驱动程序开辟的读书之路。那本书入眼介绍了KMDF、USB/1394和音频驱动程序的支出,以致配备驱动程序的批发和设置。提议有早晚Windows驱动程序开拓底子的读者看风度翩翩看那本书,尤其是,假诺您正计划利用KMDF,可能正在从事与USB/1394或音频驱动程序相关的编制程序专业,那么,那本书正是少年老成份宝贵的举办引导了。

行使的驱动类型涉及到代码的得以完毕(需不须要思虑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 和电源管理完全非亲非故的情状中运维。

 

二〇〇八年八月5日于东京(Tokyo卡塔尔西二旗

   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 驱动程序模型卡塔 尔(英语:State of Qatar)进行开拓。如今在网络能找到的有关驱动开拓的华语图书基本上都以围绕WDM形式开展描述的,而有关WDF(Windows 驱动框架卡塔尔开垦的图书十分少,《竹林溪径——深入浅出Window驱动开垦》和《Developing Drivers with the Windows Driver Foundation》算是两本陈述基于WDF开垦驱动的图书,两个都能在英特网找到E-BOOK财富。

 

532页

依照WDF的驱动开采

WDF的支付供给依据一定的平整,开拓完毕时索要思谋非常多的细节,由于篇幅有限,作者凭着自身的阅历权且稍做列举,后续将写风流倜傥篇针对WDF驱动开拓的篇章。

  • PNP和电源管理(WDF已经扶持封装了超多的接口卡塔尔;
  • 各样对象:驱动对象,设备对象,WDF对象,文件对象,队列对象;
  • 使得上下文:不常称为设备扩展,用于存款和储蓄特定设备对象的相干消息的数据结构;
  • 对象的释放:要求思虑不一样属性对象释放的机缘;
  • 中断诉求等第:管理不当易招致蓝屏;
  • 分页与非分页内部存款和储蓄器;
  • 同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等;
  • 日志追踪记录: 调试的必不可少,能够行使 WPP(Windows软件跟踪预微机卡塔 尔(英语:State of Qatar)或简捷的 DebugPrint 输出
  • 与应用程序的简报:调节代码、I奥德赛Q,央求队列

 

   5.  驱动安装

 

测验情状下安装驱动前

开辟的驱动程序未有展开签订左券恐怕接受测验签字,则需求在道具上开启测量检验格局,具体操作为:张开调控台,输入:

bcdedit /set testsigning on

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

假诺要关张测量试验方式,则需在调控台输入:

bcdedit /set testsigning off

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

 

本书是作者根据连年的办事学习资历,总计的第一手驱动开垦资料。本书愈来愈多的是经历之谈,一些实施中的小开采小意外,颇为书中内容添彩。

以服务的款型运维

NT式的驱动程序允许以 service 的款型运维, 服务安装的例程能够参谋 WDF Sample 中的 Eventdrv 工程,大概仿效小编写的有关进度互联网监控的驱动例程的开源代码

 

本书的特点之黄金年代,是对WDF框架做了非常多的切入。本书第三个举足轻重内容是(第3~7章卡塔 尔(阿拉伯语:قطر‎围绕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) SampleDevice Console (DevCon) Tool 多少个工程,分别提供了差异调用接口的驱动装置格局,Device Console (DevCon) Tool 生成的devcon.exe 是贰个效用强盛的工具,不止可用于驱动(包卡塔 尔(阿拉伯语:قطر‎的装置和卸载,还足以赢得器械的硬件ID,描述符以至设备所设置的驱动列表等音讯,开垦职员能够从当中生机勃勃窥毕竟。

在使得的设置进度中,系统会自动记录安装的日记,在INF目录(路线经常在 C:Windowsinf下卡塔 尔(英语:State of Qatar)下能够找到七个日志文件 setupapi.app.logSetupapi.dev.log ,查看这四个日志文件有助于掌握驱动装置的奉行进度,同时也利于各种审核驱动装置进程中现身的特别。

使得的设置涉及到驱动文件的校验(保障驱动文件的完整性和合法性卡塔尔国,驱动的优先级总结(选拔最优的驱动去匹配当前识别到的新的装置卡塔尔国,驱动的放置目录(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章卡塔 尔(阿拉伯语:قطر‎、内核同步(第9章卡塔 尔(英语:State of Qatar)等剧情。

本书切合日常入门级内核程序猿,对WDF风乐趣,计划开垦USB或1394装置驱动者,本书非常有用。本书对于入行较久,阅历丰盛的程序员,也兼具自然的仿照效法价值。

本文由bifa688.com发布,转载请注明来源:使得开采的部分基本概念,Windows驱动开垦入门辅