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

内部WDK供给自个儿手动下载安装

IRP(IO供给包卡塔尔国用于win32和驱动程序通信,NT内核有贰个组件叫做IO管理器。IO管理器肩负IRP的散发
,驱动程序里创设好装备並且创立好标识链接后,Win32就足以加载驱动了。而要让二个使得能够管理I
RP,必得给驱动增多IRP管理例程。

本书适合日常入门级内核工程师,对WDF有野趣,酌量付出USB或1394装置驱动者,本书特别有用。本书对于入行较久,经历足够的技术员,也存有一定的参谋价值。

驱动程序不是必然须求与硬件通信,如若急需拜望操作系统宗旨数据,往往应用程序未有丰富的权能,这种情景则要求在根本方式下进展寻访。就地点5种驱动类型,笔者仿照效法着微软的驱动例子开拓过
鼠标键盘设备过滤驱动
网络过滤软件驱动程序,所以对驱动开垦的接头仍在浅水区,如在阅读进程中发觉有误的地点,还请不吝建议。

 

本条思想既适用于采纳软件工程师,也适用于系统软件程序猿。对于利用软件程序猿,低层的运用开采平台是支撑应用开采的底工,举例,基于Windows
SDK来开采Windows应用程序。那么,技术员有要求驾驭Windows
SDK中的基本要素,诸如信息分发机制、各个图片效能等。在此种情形下,阅读一些卓绝的例证程序代码往往能起到火速引领入门的效应。同样地,C/C++程序猿假使局限于C/C++语言本人,很难编写出高素质的实用程序。他们非但要了然C/C++运转库中等学园函授数和花色的用法,以至还要精通那些函数和档案的次序的贯彻机理。纵然源代码层面上的库,举个例子STL(C++的正经模板库卡塔尔国,也急需明白其代码完毕本事灵活自如地用好那个库(比如STL中的各样容器数据结构、迭代器或算法卡塔 尔(英语:State of Qatar)。

使用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
,查看那多个日志文件有助于掌握驱动装置的进行进度,同期也许有益于逐个审查驱动装置进程中现身的可怜。

使得的安装涉及到驱动文件的校验(保障驱动文件的完整性和合法性卡塔 尔(阿拉伯语:قطر‎,驱动的先行级计算(接收最优的驱动去相配当前识别到的新的器械卡塔尔,驱动的放置目录(Driver
Store)等剧情。开采职员纯熟驱动装置逻辑有助于驱动的付出,感兴趣能够经过此处拓宽问询。

 

   6.  驱动签名

 

 Windows的驱动开荒模型

532页

 

WDF驱动程序蕴含三个项目,三个是内核级的,称为KMDF(Kernel-Mode Driver
Framework卡塔 尔(英语:State of Qatar),为SYS
文本;另三个是顾客级的,称为UMDF(User-Mode
Driver Framework卡塔尔国,为DLL文件。

   4.  实现方式

加上的主意就是再DriverEntry里面对驱动对象DriverObject操作。该参数是二个指针,指向驱动对象,
使得对象内部有三个MajorFunction数组,该数组的体系是
NTSTATUS (*PDRIVER_DISPATCH) (IN PDEVICE_OBJECT DeviceObject,IN PIRP
Irp) 。那是叁个函数指
针,指向各类IRP对于的拍卖例程。最后正是为全体供给管理的IRP完结对应的例程。

当Windows内核驱动程序被加载到根本中并且运行将来,它们成为了Windows内核的一片段,驱动程序中的接口函数在适用的每天被基本调用,那是Windows驱动程序的主旨专门的学问办法。Microsoft定义了WDM(Windows驱动程序模型卡塔尔国来规定驱动程序的组织,以致Windows内核如何与WDM驱动程序打交道。WDM不止囊括I/O微机定义的驱动程序框架,还定义了在驱动程序中哪些帮忙PnP(Plug
and Play,即插即用卡塔 尔(阿拉伯语:قطر‎、电源管理和WMI(Windows Management
Instrumentation,Windows管理专门的学问卡塔尔国。由此,若要编写八个全然帮忙WDM的驱动程序,也亟需了解WDM中所涉及的相继内核组件。

 

WDK(Windows Driver
基特卡塔尔是豆蔻梢头种截然集成的驱动程序开采种类,它包涵 Windows DDK,用于测试Wi
ndows 驱动器的可信赖性和长治久安性.

定价:69.00元

   3.  开发环境

Windows设备驱动程序,过去是WDM(Windows
Driver Model卡塔尔国框架,编制程序复杂,初读书人难以调节其编制程序
要领。为了缓慢解决这一难题,微软对WDM驱动程序的架构做了改进,形成了崭新的WDF(Windows
Driver F
oundation卡塔 尔(阿拉伯语:قطر‎架构。它提供了面向对象和事件驱动的驱动程序开辟框架,大大减少了付出难度。从现
在始发,明白Windows设备驱动程序的开采职员,由过去的“职业”职员,将产生“普通”大众。

张佩 马勇 董鉴源 编著

 驱动分为如下几体系型:

劳动调节管理程序 SCM
好像于linux的照管进程(在linux也许unix操作系统中在系统的教导的时候会敞开相当多劳务,那一个劳务
就称为守护进度卡塔 尔(英语:State of Qatar)

为了有助于Windows驱动程序的支出,Microsoft定义了贰个驱动程序框架,称为WDF(Windows
Driver Foundation卡塔 尔(阿拉伯语:قطر‎,当中针对内核驱动程序的生机勃勃部分可以称作KMDF(Kernel-Mode
Driver
Framework卡塔 尔(英语:State of Qatar)。KMDF实际上是二个库,它包裹了WDM中有的骨干的代码逻辑,进而使程序猿能够更进一层有益于地编写出WDM驱动程序。KMDF能够部分地简化Windows内核驱动程序的支出职分,但是精气神儿上它并不曾缩小内核驱动程序的纷纷,以至要求程序员付出额外的就学努力。

依据WDF的驱动开荒

WDF的支付供给依据一定的平整,开辟完毕时索要思谋比较多的细节,由于篇幅有限,作者凭着自个儿的经验权且稍做列举,后续将写生机勃勃篇针对WDF驱动开拓的篇章。

  • PNP和电源管理(WDF已经支持封装了好多的接口卡塔 尔(英语:State of Qatar);
  • 各样对象:驱动对象,设备对象,WDF对象,文件对象,队列对象;
  • 使得上下文:有时称为设备扩大,用于存款和储蓄特定设备对象的相关音讯的数据结构;
  • 指标的获释:要求考虑分化种性别质对象释放的时机;
  • 中断央求品级:管理不当易诱致蓝屏;
  • 分页与非分页内存;
  • 同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等;
  • 日记追踪记录:
    调节和测量检验的必备,能够动用 WPP(Windows软件追踪预微处理器卡塔尔国或简捷的
    DebugPrint 输出
  • 与应用程序的电视发表:调整代码、I库罗德Q,央求队列

 

   5.  驱动安装

 

IO请求包-IRP

Windows内核驱动程序与基本的风姿罗曼蒂克体关联性使得驱动程序的调节和测量试验极为不便于,从某种意义上讲,驱动程序的调治将养等同于Windows内核的调治将养。并且,对于某个特定的逻辑错误,内核调节和测验器甚至是无能为力的。正因为那个缘故,内核驱动程序的代码尽恐怕简洁明了,从软件设计角度来讲,应最大程度地把效能代码放到应用程序中,在驱动程序中只留下最至关重要的效果逻辑。那样的布署性也能够使Windows内核被不得法驱动程序代码牵连而产生稳固性难点的概率相对收缩。

生育情状

从Win10方始,驱动文件包不止必要开展扩张验证
(EV)
代码签名,还亟需付出到硬件开拓为主仪表盘,具体操作指南能够参见此处,你能够在该文书档案上找到驱动签字所需的此外内容。

 

 

对此驱动开垦的支付指导,微软官方文档网址已经提供了很详细的教程文书档案,而且在Github上提供了一有滋有味规范的例程源码用于开荒人士参考。开拓人士在具备一定的驱动概念知识后,通过参照他事他说加以考查官方例程能够比较轻巧达成全体一定作用的驱动应用程序。

WDM 是 Win32设施驱动程序类别布局

本书是小编依据连年的做事学习经历,计算的间接驱动开辟资料。本书更加的多的是经验之谈,一些实行中的小开采小意外,颇为书中内容添彩。

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

 

2011年2月出版

 

windows服务在系统运行是加载,客商需在劳动调整平台开启或许关闭服务
Driver Service是服务的叁个特例,服从windows服务的商业事务
加载协和在NT驱动分为多个步骤:
1.为NT驱动创建新的服务
2.拉开此项服务
3.关闭此项服务
4.刨除NT驱动成立的服务
以上八个步骤都以经过SCM创设的服务来落到实处的。

ISBN 978-7-121-12555-3

以劳动的方式运营

NT式的驱动程序允许以 service
的样式运营, 服务安装的例程能够参考 WDF Sample 中的 Eventdrv
工程,可能参谋作者写的关于经过网络监督的驱动例程的开源代码

 

  在Windows的差别版本上开荒的驱动程序
“模型”(模型那些词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被喻为KernelDriverMode驱动程序。
小编以为那些Mode是指生龙活虎种驱动程序的布局和
运维的科班卡塔 尔(英语:State of Qatar),有过分歧的名称。举个例子在Windows9x上的驱动程序,都称呼VXD,而在WindowsNT上的驱动
前后相继被称为KDM驱动程序,Windows98~二零零二以那个时候期现身的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的一言一行来讲的。比方WDM驱动,一定要满意提供n种被要
求的风味(如电源管理、即插即用卡塔 尔(阿拉伯语:قطر‎才被称作”WDM驱动”。假使不提供这个效应,那么统后生可畏称为NT式驱动。
后生可畏致的,WDF驱动也许有它的意气风发连串正式。
  可是本书接收简约的界别方法。将全部在Windows2003~WindowsVista下能健康运作且未调用WDF相
关的内核API函数的驱动都称为守旧型驱动(包罗NT式和WDM卡塔 尔(英语:State of Qatar)。要是调用了WDF相关的内核API则可以称作WD
F驱动。
  请小心:WDF驱动是足以调用古板型驱动所调用的内核API的,WDF能够视为守旧型的升级版。
  模型的开采进取并非和操作系统版本的进级齐步走的,而是有叁个稳步代替的历程。譬喻Windows98已
经支持部分的WDM驱动程序,但是又支持部分的VXD驱动。而到了Windows二零零二,则VXD这种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的功底上扩展了黄金年代部分新的特征,制订了一些新的标准而造
就的。绝当先47%函数调用都是通用的。当然,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版本的例证,请读者注意辨别。

第一个至关心重视要内容是有关音录像驱动开荒(第10~11章卡塔 尔(英语:State of Qatar)。音录制驱动包蕴AVStream架构,本书做了较详细的阐明。第10章叙述使用AVStream小端口架构,第11章陈述ASIO音频驱动开采。

使用的驱动类型涉及到代码的兑现(需不须求思谋PNP和电源管理卡塔 尔(阿拉伯语:قطر‎和驱动的装置(
NT式驱动程序以 service
的花样运行,其余驱动须求选用通用的INF文件安装卡塔尔国,微软的合法文档那样提到:

 

总的说来,作为一名系统技师,你须要看清目的操作系统中与你的软件打交道的次第构件,也要极度掌握地通晓你所依赖的开辟工具是什么扶植您做到那或多或少的。系统程序猿往往面对着比使用程序猿更加长的读书曲线,可是,系统技师从编写程序中收获的意趣也是在动用层上麻烦心得获得的。小编深信,当您发现本身编写的软件模块已经与操作系统内核融为后生可畏体时,那一刻你的认为一定是手心里攥着多个操作系统——操作系统尽在你的掌握控制中了。

测量试验情状

经过VS集成开拓情状成立 Driver
应用方案后会生成四个项目,右键属性张开 XXX Package,左边选中
Driver Signing ,在左侧栏 Sign Mode 选择 Test Sign,在
Test Certificate选择
<Create test certificate...>,则在编写翻译时会自动生成测量检验具名证书。

 

 

那正是说,对于系统软件程序猿,“内功”是哪些吗?系统软件是指操作系统自己照旧依赖于操作系统上为运用软件提供劳务的软件。系统软件大概有机会跟硬件直接打交道,那授予了程序猿更加强的调整本领,他们有机缘到场操作系统的行事逻辑,以致校正操作系统的表现特征。但随之而来的是对系统软件代码的更加高须要。现代操作系统为利用软件提供了很强的容错技艺,应用程序的诉讼失败日常不会涉及到操作系统本身的地西泮,但操作系统对系统软件的容错工夫却比较单薄,终归系统软件运营起来然后或然被融合到操作系统的实践逻辑中成为操作系统的生机勃勃局地。由此,精通和左右操作系统的运行机制作而成为系统技术员编写出正确、高效的体系软件的基本前提。所谓“内功”,便着落在这里。

Github:

驱网大旨手艺丛书

WDM vs WDF

对Yu Gang接触驱动开采的生手来讲,笔者不建议选取WDM(Windows
驱动程序模型卡塔 尔(阿拉伯语:قطر‎实行支付。最近在网络能找到的有关驱动开辟的普通话图书基本上都以围绕WDM方式展开描述的,而关于WDF(Windows
驱动框架卡塔 尔(英语:State of Qatar)开辟的书本非常的少,《竹林溪径——出浅入深Window驱动开拓》和《Developing
Drivers with the Windows Driver
Foundation》算是两本陈说基于WDF开垦驱动的书本,两个都能在网络找到E-BOOK财富。

 

 

Visual Studio +
WDK(Windows Driver Kit)

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

Windows驱动程序入门:

那本书《竹林蹊径——深入显出Windows驱动开辟》是肆人笔者张佩、马勇和董鉴源的新型力作,他们将和谐在执行中积攒起来的经历收拾成册,以期望后读书人能少走弯路,降低Windows驱动程序开拓的求学之路。这本书根本介绍了KMDF、USB/1394和拍子驱动程序的开垦,以至设备驱动程序的批发和装置。提议有肯定Windows驱动程序开垦底蕴的读者看意气风发看那本书,尤其是,假若你正思虑利用KMDF,恐怕正在致力与USB/1394或音频驱动程序相关的编制程序职业,那么,那本书就是大器晚成份难得的推行辅导了。

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

2008年4月5日于首都西二旗

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

开采的驱动程序未有张开签约只怕利用测量试验具名,则需求在配备上开启测量检验情势,具体操作为:张开调整台,输入:

bcdedit /set testsigning on

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

风度翩翩经要关闭测量试验形式,则需在决定台输入:

bcdedit /set testsigning off

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

 

16开

   1.  前言

本人间接以为,编写程序是大器晚成件很奇怪的事情,它能够带给创设和垄断(monopoly卡塔 尔(阿拉伯语:قطر‎的私欲。每当自身阅读大概编写后生可畏段代码时,脑子里自然地就能够虚构这段代码如何造成预订的逻辑。当面对二个不熟悉的成本条件,或许一个新的根基平台时,首先要清楚那一个条件仍旧平台是哪些做事的,以致提供了怎么着功用。代码本人可能特别复杂,以致奥密无穷,但平时状态下,真正赏心悦指标高素质代码往往是大约的、易于理解的。对于代码编写者或然维护者来讲,真正见武术之处不在于代码本人,而介于对下层开采平台的知情和通晓技巧,或许那正是俗称的“内功”。

style=”font-family: ‘Microsoft YaHei’;”>有关软件驱动程序,你的八个选用为
KMDF 和底工格局 Windows NT 驱动程序模型。 使用 KMDF 和水源格局 Windows
NT 模型,你能够编写驱动程序,而无需思索即插即用 (PnP) 和电源管理。
你能够改为潜心于驱动程序的首要任务上。 使用 KMDF,你不要思虑 PnP
和电源,因为框架会为你管理 PnP 和电源。 使用底子形式 Windows NT
模型,你不要酌量 PnP 和电源,因为根本格局服务在与 PnP
和电源管理完全非亲非故的意况中运营。

其八个举足轻重内容是有关设备驱动装置(第12~14章卡塔尔。第12章讲系统设置模块,从总体角度阐释系统和设备驱动如何合营完好地扩充专门的学问;第13章呈报INF安装文件的内部原因,富含各种域的效劳,甚至大多设置指令的应用。第14章讲如何编写驱动装置软件。

因专门的学业上类别的急需,作者须求做驱动相关的费用,从前并从未接触过有关的学问,折腾生龙活虎段时间下来,效能如需兑现了,也积存了少年老成部分阅世和见地,所以在这做番总括。

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

 

潘爱民

   2.  驱动类型

本书的特点之风姿浪漫,是对WDF框架做了很多的切入。本书第三个主要内容是(第3~7章卡塔 尔(英语:State of Qatar)围绕WDF而张开研究,侧重视各有不一致。第3章以框架为商量的大旨;第4、5两章以WDF框架开垦USB和1394使得;第6章陈述内核C++编制程序,也以WDF框架为蓝本;第7章陈诉WDF驱动的测量试验和调治。

在Windows平台上开垦软件,编写Windows内核驱动程序是但是查验程序员“内功”的。内核驱动程序的代码量平时比非常小,但驱动程序框架中的任何贰个函数,以至那么些函数中别的风度翩翩行代码背后都大概包罗着复杂的逻辑,可能隐式的渴求和就算。即便驱动程序编写者在纯粹自行定义的函数中,也必得严谨地关爱一些与情况有关的成分,比如代码是不是可被中止、是或不是可重入,也许所引述的内部存款和储蓄器是还是不是被换来到外部存款和储蓄器。另一面,APP开采中的非常多概念,譬如地址空间、内部存款和储蓄器管理、十分管理和多线程并发等,在驱动程序开荒中恐怕需求有两样的掌握方法。别的,常用的C运营库函数基本上不再适合于驱动程序了,驱动程序编写者必需直面三个簇新的平底情形和扶助平台。由此,要编写可科学生运动转的驱动程序,技师不独有要清楚地领略驱动程序所针没有错对象设备或效益(可能富含硬件器具的种种风味卡塔 尔(英语:State of Qatar),还要调整Windows内核是什么与驱动程序打交道的,以致基本中多数拘押和平运动行机制,特别是内部存款和储蓄器管理、线程调治和现身调节。

发表评论

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