当前位置: 江苏11选五 > 江苏11选五操作系统 > 正文

竹林蹊径,驱动开荒的一对基本概念

时间:2019-09-21 02:02来源:江苏11选五操作系统
   1.  前言 WDK(Windows Driver基特)是一种截然集成的驱动程序开荒连串,它富含 Windows DDK,用于测试Wi ndows 驱动器的可相信性和安宁性. 推 荐 序 因专业上类别的须求,作者必要做驱动

   1.  前言

WDK(Windows Driver 基特)是一种截然集成的驱动程序开荒连串,它富含 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),为DLL文件。

那么,对于系统软件程序猿,“内功”是什么呢?系统软件是指操作系统自个儿依旧依赖于操作系统上为使用软件提供服务的软件。系统软件也有空子跟硬件直接打交道,那给予了技术员越来越强的调节技能,他们有时机参与操作系统的表现逻辑,以至改换操作系统的一言一行特征。但随之而来的是对系统软件代码的更加高供给。今世操作系统为使用软件提供了很强的容错技巧,应用程序的曲折常常不会波及到操作系统自个儿的安宁,但操作系统对系统软件的容错技术却相比轻易,究竟系统软件运转起来以往大概被融合到操作系统的实行逻辑中产生操作系统的一有的。由此,精晓和摆布操作系统的运维机制作而成为系统技士编写出准确、高效的系统软件的基本前提。所谓“内功”,便着落在此。

Github:

 

在Windows平台上开拓软件,编写Windows内核驱动程序是Infiniti考验程序员“内功”的。内核驱动程序的代码量常常十分的小,但驱动程序框架中的任何叁个函数,以致那个函数中其余一行代码背后都恐怕富含着复杂的逻辑,或许隐式的渴求和假若。尽管驱动程序编写者在纯粹自行定义的函数中,也亟须敬终慎始地关爱一些与情形有关的要素,举个例子代码是或不是可被中止、是或不是可重入,也许所引述的内部存款和储蓄器是或不是被换成到外部存款和储蓄器。另一方面,APP开辟中的相当多概念,例如地址空间、内部存款和储蓄器管理、万分管理和二十八线程并发等,在驱动程序开垦中恐怕需求有不相同的敞亮方法。其它,常用的C运转库函数基本上不再符合于驱动程序了,驱动程序编写者必需直面一个斩新的平底意况和支持平台。因此,要编写可科学生运动转的驱动程序,程序员不独有要精晓地知道驱动程序所针对的靶子设备或效益(只怕包括硬件装置的各类风味),还要调控Windows内核是哪些与驱动程序打交道的,以及基础中过多管制和平运动行机制,极度是内部存款和储蓄器管理、线程调解和现身调控。

 

 Windows的驱动开采模型

当Windows内核驱动程序被加载到基础中还要运营之后,它们形成了Windows内核的一片段,驱动程序中的接口函数在稳当的随时被基本调用,那是Windows驱动程序的为主专门的学问办法。Microsoft定义了WDM(Windows驱动程序模型)来规定驱动程序的构造,以及Windows内核如何与WDM驱动程序打交道。WDM不止囊括I/O管理器定义的驱动程序框架,还定义了在驱动程序中哪些支撑PnP(Plug and Play,即插即用)、电源管理和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式驱动。
江苏11选五,平等的,WDF驱动也可以有它的一文山会海正式。
  不过本书选拔简易的差别方法。将全部在Windows两千~WindowsVista下能符合规律运作且未调用WDF相
关的内核API函数的驱动都堪称守旧型驱动(富含NT式和WDM)。若是调用了WDF相关的内核API则称为WD
F驱动。
  请留神:WDF驱动是足以调用守旧型驱动所调用的内核API的,WDF能够算得守旧型的进级版。
  模型的上进并不是和操作系统版本的升高齐步走的,而是有一个逐步代替的历程。比方Windows98已
经协助部分的WDM驱动程序,不过又协助部分的VXD驱动。而到了Windows3000,则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年到一九九四年间公布第4个版本的
硬盘上层过滤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 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 和电源管理完全非亲非故的景况中运营。

 

2009年11月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 2012 + 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宝马X3Q,哀告队列

 

   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均能够张开任务管理器,只是使用命令行的方法很少见,这里极度记下一下。找到感兴趣的 道具节点,右键 属性(或更新驱动程序软件),切换来 驱动程序,能够开展感兴趣的操作。这里所观望所提供的选项,后续等你通晓了驱动装置的接口后,你会开掘皆有对应的接口对应每种成效选项。

  • 因此程序完毕自动安装

可以参谋 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.  驱动签名

 

其次个关键内容是关于音录制驱动开垦(第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章)等内容。

本书适合一般入门级内核程序猿,对WDF有意思味,盘算开拓USB或1394设备驱动者,本书尤其有用。本书对于入行较久,经验充分的程序猿,也保有一定的参谋价值。

编辑:江苏11选五操作系统 本文来源:竹林蹊径,驱动开荒的一对基本概念

关键词:

  • 上一篇:没有了
  • 下一篇:没有了