菜单

驱动开发的一些基本概念,Windows驱动开发入门指引

2019年10月30日 - 4166m金沙

对于驱动开荒的支出辅导,微软官方文书档案网址已经提供了很详细的学科文书档案,并且在Github上提供了意气风发多重标准的例程源码用于开辟职员参照他事他说加以考察。开拓职员在富有一定的驱动概念知识后,通过参考官方例程能够比较轻巧达成全体一定作用的驱动应用程序。

 

简单来讲,作为一名系统技士,你需求看清指标操作系统中与你的软件打交道的各样部件,也要这多少个清楚地精晓您所依据的开辟工具是怎么样帮助您完了那或多或少的。系统程序猿往往面前境遇着比使用程序员越来越长的上学曲线,然则,系统技术员从编写程序中收获的野趣也是在接收层上麻烦体会获得的。作者信赖,当您发掘本身编写的软件模块已经与操作系统内核融为大器晚成体时,那一刻你的感到自然是手心里攥着贰个操作系统——操作系统尽在您的掌握控制中了。

行使的驱动类型涉及到代码的贯彻(需不要求考虑PNP和电源管理)和驱动的安装(
NT式驱动程序以 service
的款式运维,其余驱动须求利用通用的INF文件安装),微软的官方文书档案那样提到:

 

其一视角既适用于选择软件程序猿,也适用于系统软件技师。对于使用软件程序猿,低层的选拔开采平台是永葆应用开垦的底蕴,例如,基于Windows
SDK来开垦Windows应用程序。那么,程序猿有重中之重知道Windows
SDK中的基本要素,诸如音信分发机制、种种图片作用等。在这里种状态下,阅读一些卓尔不群的事例程序代码往往能起到高速引领入门的效益。相符地,C/C++程序猿假设局限于C/C++语言自己,很难编写出高水平的实用程序。他们不唯有要调控C/C++运转库中等高校函授数和等级次序的用法,甚至还要领会这个函数和种类的完毕机理。固然源代码层面上的库,举个例子STL(C++的行业内部模板库),也须要领会其代码达成技术灵活自如地用好那几个库(例如STL中的各类容器数据结构、迭代器或算法)。

   1.  前言

 Windows的驱动开荒模型

因职业上种类的急需,作者须要做驱动相关的支出,早先并从未接触过相关的知识,折腾生龙活虎段时间下来,功效如需兑现了,也积攒了生机勃勃部分经历和眼光,所以在这里做番总计。

 

其两个注重内容是有关设备驱动装置(第12~14章)。第12章讲系统安装模块,从完整角度论述系统和配备驱动怎样合营完好地拓宽专门的学业;第13章汇报INF安装文件的细节,包蕴各个域的意义,以及广大安装指令的行使。第14章讲哪些编写驱动装置软件。

驱动程序不是一定必要与硬件通信,如若急需会见操作系统核心数据,往往应用程序没有充足的权力,这种气象则供给在根本方式下张开造访。就地点5种驱动类型,笔者仿效着微软的驱动例子开拓过
鼠标键盘设备过滤驱动
互联网过滤软件驱动程序,所以对驱动开垦的通晓仍在浅水区,如在翻阅进程中窥见有误的地点,还请不吝建议。

 

为了有助于Windows驱动程序的支付,Microsoft定义了贰个驱动程序框架,称为WDF(Windows
Driver Foundation),此中针对内核驱动程序的某个称作KMDF(Kernel-Mode
Driver
Framework)。KMDF实际上是五个库,它包裹了WDM中一些焦点的代码逻辑,进而使程序员可以进一步有利地编写出WDM驱动程序。KMDF能够部分地简化Windows内核驱动程序的开支职务,可是精气神儿上它并未有下跌内核驱动程序的繁缛,以致须求技师付出额外的就学努力。

 

 

532页

style=”font-family: ‘Microsoft YaHei’;”>有关软件驱动程序,你的八个选项为
KMDF 和基础情势 Windows NT 驱动程序模型。 使用 KMDF 和水源情势 Windows
NT 模型,你能够编写制定驱动程序,而无需考虑即插即用 (PnP) 和电源管理。
你能够改为潜心于驱动程序的主要职责上。 使用 KMDF,你不要思考 PnP
和电源,因为框架会为你处理 PnP 和电源。 使用基础情势 Windows NT
模型,你不要考虑 PnP 和电源,因为基础方式服务在与 PnP
和电源管理完全毫不相关的情状中运转。

IRP(IO央求包)用于win32和驱动程序通信,NT内核有一个组件叫做IO处理器。IO管理器担负IRP的散发
,驱动程序里创立好设施并且创办好标记链接后,Win32就足以加载驱动了。而要让三个使得能够管理I
RP,必须给驱动增加IRP管理例程。

本书是作者遵照连年的劳作学习经验,计算的直白驱动开采资料。本书越多的是经验之谈,一些举行中的小开掘小意外,颇为书中剧情添彩。

   3.  开发环境

Windows设备驱动程序,过去是WDM(Windows
Driver Model)框架,编制程序复杂,初读书人难以调整其编制程序
要点。为理解决这风姿浪漫标题,微软对WDM驱动程序的架构做了修改,产生了崭新的WDF(Windows
Driver F
oundation)架构。它提供了面向对象和事件驱动的驱动程序开拓框架,大大减弱了开垦难度。从现
在起来,精通Windows设备驱动程序的开垦职员,由过去的“专门的工作”职员,将改为“普通”大众。

当Windows内核驱动程序被加载到根本中何况运转今后,它们成为了Windows内核的生龙活虎有的,驱动程序中的接口函数在适宜的天天被基本调用,那是Windows驱动程序的大旨工作方式。Microsoft定义了WDM(Windows驱动程序模型)来分明驱动程序的布局,以至Windows内核怎么样与WDM驱动程序打交道。WDM不独有满含I/O管理器定义的驱动程序框架,还定义了在驱动程序中什么扶植PnP(Plug
and Play,即插即用)、电源管理和WMI(Windows Management
Instrumentation,Windows管理职业)。由此,若要编写二个完全帮衬WDM的驱动程序,也要求掌握WDM中所涉及的风度翩翩大器晚成内核组件。

利用INF文件安装

配备相关的驱动装置能够挑选INF进行安装,INF安装文件的编制建议从
WDF Sample
中找到相符的INF文件举办校正,假若你想通晓INF的语法,可以参见这里

开采调控台,输入 devmgmt
回车,那是张开设备管理器的内部生机勃勃种方法,其余格局比如右键系统菜单栏图标均能够展开任务管理器,只是采取命令行的方式非常少见,那Ritter别记下一下。找到感兴趣的
器材节点,右键 属性(或更新驱动程序软件),切换成
驱动程序,能够展开感兴趣的操作。这里所见到所提供的选项,后续等你熟谙了驱动装置的接口后,你会开采都有对应的接口对应各类功用选项。

能够参照他事他说加以考察 WDF Sample
中的Driver Install Frameworks API (DIFxAPI) Sample
Device Console (DevCon) Tool
四个工程,分别提供了区别调用接口的驱动装置形式,Device Console (DevCon) Tool
生成的devcon.exe
是贰个作用强盛的工具,不独有可用以驱动(包)的安装和卸载,还足以获得器材的硬件ID,描述符以至设备所设置的驱动列表等音讯,开垦职员能够从当中大器晚成窥究竟。

在驱动的装置进程中,系统会自动记录安装的日记,在INF目录(路线日常在 C:\Windows\inf下)下能够找到八个日志文件
setupapi.app.logSetupapi.dev.log
,查看那五个日志文件有助于明白驱动装置的实行进度,同一时候也惠及排查驱动装置进度中冒出的不行。

使得的装置涉及到驱动文件的校验(保障驱动文件的完整性和合法性),驱动的预先级总结(选取最优的驱动去相称当前识别到的新的道具),驱动的停放目录(Driver
Store)等剧情。开采人士熟稔驱动装置逻辑有扶植驱动的付出,感兴趣能够由此此处进展询问。

 

   6.  驱动签名

 

增加的法门正是再DriverEntry里面前遭逢驱动对象DriverObject操作。该参数是一个指针,指向驱动对象,
使得对象内部有一个MajorFunction数组,该数组的品类是
NTSTATUS (*PDRIVER_DISPATCH) (IN PDEVICE_OBJECT DeviceObject,IN PIRP
Irp) 。那是叁个函数指
针,指向每一种IRP对于的拍卖例程。最终就是为全数要求管理的IRP实现对应的例程。

 驱动分为如下三种档案的次序:

IO请求包-IRP

驱网主题技能丛书

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图