澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

Windows驱动开发入门指引,Windows的驱动开发模型

   1.  前言

WDK(Windows Driver Kit)是一种截然集成的驱动程序开辟连串,它涵盖 Windows DDK,用于测试 Wi
ndows 驱动器的可信赖性和国家长期加强性.

Windows的驱动开采模型

因工作上类其他内需,作者需求做驱动相关的开荒,以前并不曾接触过相关的知识,折腾一段时间下来,效率如需兑现了,也积攒了一部分经历和见解,所以在此做番计算。

WDM 是 Win3②装置驱动程序连串布局

自己直接以为,编写程序是一件很稀奇的事体,它能够带来创设和调整的私欲。每当自身阅读也许编写1段代码时,脑子里自然地就能够设想这段代码怎么样产生预订的逻辑。当面对3个不熟悉的费用条件,或许2个新的功底平台时,首先要领悟这么些蒙受如故平台是怎么办事的,以及提供了什么样效率。代码本人大概分外复杂,乃至奥秘无穷,但经常状态下,真正好看的高品质代码往往是大致的、易于明白的。对于代码编写者或然维护者来讲,真正见武术的地点不在于代码本身,而在于对下层开拓平台的知情和明白技巧,恐怕那正是俗称的“内功”。

 

WDK(Windows Driver Kit)是壹种截然集成的驱动程序开垦连串,它含有 Windows DDK,用于测试 Windows 驱动器的可信赖性和平静性. 

对此驱动开辟的开拓辅导,微软官方文档网址已经提供了很详细的课程文书档案,并且在Github上提供了1多元标准的例程源码用于开辟人士参考。开垦职员在有着一定的驱动概念知识后,通过参考官方例程能够很轻便实现全体一定功能的驱动应用程序。

Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编制程序复杂,初学者难以调控其编制程序
中央。为了缓和那一主题材料,微软对WDM驱动程序的架构做了改良,产生了斩新的WDF(Windows Driver F
oundation)架构。它提供了面向对象和事件驱动的驱动程序开拓框架,大大降低了费用难度。从现
在开首,掌握Windows设备驱动程序的开垦人员,由过去的“专门的学业”职员,将变为“普通”大众。

本条意见既适用于选取软件工程师,也适用于系统软件程序猿。对于利用软件程序员,低层的运用开荒平台是支撑应用开采的底蕴,譬如,基于Windows SDK来开荒Windows应用程序。那么,技师有至关重要领悟Windows SDK中的基本要素,诸如消息分发机制、各类图片功用等。在那种情状下,阅读一些头一无2的例证程序代码往往能起到便捷引领入门的功效。同样地,C/C 技师借使局限于C/C 语言本人,很难编写出高素质的实用程序。他们不但要通晓C/C 运营库中等高校函授数和档案的次序的用法,乃至还要理解这一个函数和种类的贯彻机理。尽管源代码层面上的库,举例STL(C 的标准模板库),也急需理解其代码达成才能灵活自如地用好那些库(举个例子STL中的各样容器数据结构、迭代器或算法)。

    在Windows的不一致版本上开荒的驱动程序“模型”(模型这一个词语应该来自单词“Mode”。在Windows NT上,驱动程序被叫做Kernel Driver Mode驱动程序。作者以为这么些Mode是指一种驱动程序的布局和周转的正规化),有过分歧的名称。比方在Windows 九x上的驱动程序,都叫作VXD,而在Windows NT上的驱动程序被号称KDM驱动程序,Windows 98~两千那个时代出现的新模型叫做WDM。
    Windows的驱动模型概念,本来是就驱动程序的一举一动来讲的。举例WDM驱动,必要求满足提供n种被要求的特点(如电源管理、即插即用)才被称之为WDM驱动。假如不提供这个作用,那么统壹称为NT式驱动。同样的,WDF驱动也有它的一文山会海专门的学问。
    不过本书选用简单的区分方法。将全数在Windows 两千~Windows Vista下能健康运营且未调用WDF相关的内核API函数的驱动都号称守旧型驱动(包蕴NT式和WDM)。假如调用了WDF相关的内核API则名称叫WDF驱动。
请留意:WDF驱动是能够调用古板型驱动所调用的内核API的,WDF能够算得守旧型的升级版。
    模型的迈入并不是和操作系统版本的晋级换代齐步走的,而是有2个日益代替的历程。比方Windows 玖八已经扶助部分的WDM驱动程序,不过又帮忙部分的VXD驱动。而到了Windows 3000,则VXD那种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的功底上扩展了有的新的风味,制定了一部分新的正规化而构建的。绝大多数函数调用都是通用的。当然,Windows 玖x种类的基石完全区别,所以VXD与之相比较,就从未四个内核API函数是如出1辙的。
    故而随着Windows 九x的打入冷宫,VXD难逃通透到底被淘汰的运气。Windows NT则向上成了新生的Windows版本,KDM也形成了WDM而留存下来。当然,微软不会闲着,未来又推出了新的WDF。读者又不得不顾虑:本书是用WDM写的依然用WDF写的吧?会不会刚刚学完又被淘汰呢?
    和VXD不一样,从KDM到WDM再到WDF是一脉相通的,基本上KDM程序猿在上学WDM时1度占尽了有利于。到WDF也不例外,WDF与其说是新的驱动开辟模型,还不比说是在已有的内核API和数据结构的基本功上,又包装出1套让使用者感到更简单、更易用的以Wdf-初始的一组API。因而,读者不须求顾忌WDF的升华会让日前学习古板型驱动的大力半上落下。1个独占鳌头的事例是:大致在19九4年到一9玖四年间公布第七个版本的硬盘上层过滤diskperf的代码,18年过去了,昨淮南旧能够编写翻译并经常在风靡版本的Vista上运营。
    本书对于绝大好多不可能找到WDF实例的章节,都施用了古板型驱动举办表明。例如磁盘过滤、文件系统过滤和网络中间层驱动。其它为了从轻巧入手,对于入门级的七个例证(串口和键盘)也应用了古板型驱动。不过虚拟磁盘和虚拟网卡(第陆章和第二1章),使用了WDF版本的事例,请读者注意甄别。

WDM 是 Win3二配备驱动程序连串布局

Windows驱动程序入门:

WDF驱动程序包涵多个品种,3个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS
文本;另三个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

那就是说,对于系统软件程序员,“内功”是怎么着吗?系统软件是指操作系统自己还是依靠于操作系统上为使用软件提供劳动的软件。系统软件大概有机遇跟硬件直接打交道,那给予了程序猿更加强的调整本领,他们有时机插足操作系统的行为逻辑,以至改变操作系统的作为特征。但随之而来的是对系统软件代码的更加高供给。今世操作系统为使用软件提供了很强的容错本事,应用程序的曲折平时不会涉及到操作系统本人的安静,但操作系统对系统软件的容错技能却相比轻巧,毕竟系统软件运维起来未来也许被融合到操作系统的推行逻辑中产生操作系统的一有的。由此,了解和精晓操作系统的运转机制成为系统程序员编写出精确、高效的体系软件的基本前提。所谓“内功”,便着落在此。

Github:

 

在Windows平台上开采软件,编写Windows内核驱动程序是极端考验技术员“内功”的。内核驱动程序的代码量平时比很小,但驱动程序框架中的任何二个函数,以致这个函数中别的一行代码背后都或许包蕴着复杂的逻辑,或然隐式的供给和倘若。就算驱动程序编写者在纯粹自行定义的函数中,也必须谨慎地钟情一些与遭逢有关的要素,譬如代码是不是可被中断、是或不是可重入,也许所引述的内部存款和储蓄器是不是被换来到外部存储器。另1方面,应用程式开垦中的大多定义,比方地址空间、内部存款和储蓄器管理、相当管理和二十八线程并发等,在驱动程序开辟中大概要求有不一样的了然方法。其余,常用的C运营库函数基本上不再适合于驱动程序了,驱动程序编写者必须面对三个斩新的平底碰着和支撑平台。由此,要编写可科学生运动转的驱动程序,程序猿不仅要明白地领略驱动程序所指向的靶子设备或效益(也许包含硬件配备的各个风味),还要调控Windows内核是何许与驱动程序打交道的,以及水源中诸多处理和平运动行机制,尤其是内部存款和储蓄器管理、线程调治和产出调节。

CreateFile函数创立或展开下列对象,并重临一个足以用来访问那些目标的句柄。

 

 Windows的驱动开荒模型

当Windows内核驱动程序被加载到基本中并且运转之后,它们形成了Windows内核的1有些,驱动程序中的接口函数在方便的时刻被基本调用,那是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是指1种驱动程序的结交涉
运转的正式),有过分裂的名目。比方在Windows玖x上的驱动程序,都号称VXD,而在WindowsNT上的驱动
先后被称为KDM驱动程序,Windows九8~三千这一个时代出现的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的一举一动来说的。举个例子WDM驱动,必须求满意提供n种被要
求的表征(如电源处理、即插即用)才被号称"WDM驱动"。假若不提供这么些意义,那么统一称为NT式驱动。
如出一辙的,WDF驱动也有它的壹密密麻麻正式。
  但是本书采取简便易行的分别方法。将全体在Windows3000~WindowsVista下能健康运转且未调用WDF相
关的内核API函数的驱动都称呼守旧型驱动(包蕴NT式和WDM)。如若调用了WDF相关的内核API则称为WD
F驱动。
  请留意:WDF驱动是足以调用古板型驱动所调用的内核API的,WDF能够说是古板型的晋级版。
  模型的开垦进取并不是和操作系统版本的提拔齐步走的,而是有一个稳步代替的长河。比方Windows玖8已
经辅助部分的WDM驱动程序,不过又支持部分的VXD驱动。而到了Windows3000,则VXD那种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的底子上加码了一些新的风味,制定了部分新的专门的学业而造
就的。绝大多数函数调用都以通用的。当然,Windows玖x类别的根本完全差别,所以VXD与之相比较,就没
有多少个内核API函数是同样的。
  故而随着Windows九x的打入冷宫,VXD难逃通透到底被淘汰的运气。WindowsNT则进步成了新兴的Windows版本
,KDM也改为了WDM而留存下来。当然,微软不会闲着,现在又推出了新的WDF。读者又不得不忧郁:本书
是用WDM写的仍旧用WDF写的呢?会不会刚刚学完又被淘汰呢?
  和VXD不一致,从KDM到WDM再到WDF是世代相承的,基本上KDM程序猿在上学WDM时曾经占尽了便宜。到
WDF也不例外,WDF与其说是新的驱动开辟模型,还不比说是在已部分内核API和数据结构的根基上,又封
装出壹套让使用者感到更简约、更易用的以Wdf-初阶的壹组API。由此,读者大可不必顾虑WDF的迈入会
让前边学习古板型驱动的竭力一曝拾寒。贰个优良的例子是:大致在一玖玖二年到一玖九二年间发表第四个版本的
硬盘上层过滤diskperf的代码,1八年过去了,前几天依然得以编写翻译并正常在风行版本的Vista上运营。
  本书对于绝大好些个不可能找到WDF实例的章节,都使用了守旧型驱动进行验证。举例磁盘过滤、文件系统
过滤和互连网中间层驱动。别的为了从轻松动手,对于入门级的四个例证(串口和键盘)也使用了古板型
使得。可是虚拟磁盘和编造网卡(第陆章和第1一章),使用了WDF版本的例子,请读者注意鉴定分别。

Windows内核驱动程序与基础的牢牢关联性使得驱动程序的调治将养极为不方便人民群众,从某种意义上讲,驱动程序的调度等同于Windows内核的调治。而且,对于一些特定的逻辑错误,内核调节和测试器以致是心有余而力不足的。正因为那几个原因,内核驱动程序的代码尽可能精简,从软件设计角度来说,应最大程度地把效益代码放到应用程序中,在驱动程序中只留下最须要的效果逻辑。那样的宏图也得以使Windows内核被不科学驱动程序代码牵连而致使稳定性难题的概率相对减弱。

 pipes

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

 

为了方便Windows驱动程序的支出,Microsoft定义了3个驱动程序框架,称为WDF(Windows Driver Foundation),其中针对内核驱动程序的一些号称KMDF(Kernel-Mode Driver Framework)。KMDF实际上是一个库,它包裹了WDM中部分中坚的代码逻辑,从而使程序员能够更进一步便利地编写出WDM驱动程序。KMDF能够部分地简化Windows内核驱动程序的支出职责,不过精神上它并不曾降低内核驱动程序的纷纷,以致须要程序猿付出额外的上学努力。

 邮槽

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

劳务调控管理程序 SCM
看似于linux的医生和医护人员进度(在linux大概unix操作系统中在系统的指引的时候会打开诸多服务,这一个服务
就称为守护进度)

一句话来说,作为一名系统技术员,你供给看清目的操作系统中与您的软件打交道的依次部件,也要非凡精晓地领略您所正视的开采工具是怎么样扶持你成功那点的。系统程序员往往面临着比采纳技术员更长的上学曲线,可是,系统技士从编写程序中获得的意趣也是在行使层上难以体会获得的。小编深信不疑,当你开采本人编写的软件模块已经与操作系统内核融为壹体时,那一刻你的感到自然是手心里攥着1个操作系统——操作系统尽在您的掌握控制中了。

 通讯财富

驱动程序不是任其自流需求与硬件通信,如若须要拜访操作系统核心数据,往往应用程序未有丰硕的权柄,那种状态则需求在基础方式下进行访问。就地点八种驱动类型,小编参考着微软的驱动例子开垦过 鼠标键盘设备过滤驱动互连网过滤软件驱动程序,所以对驱动开垦的精晓仍在浅水区,如在阅读进程中发觉有误的地点,还请不吝提出。

 

那本书《竹林蹊径——深刻浅出Windows驱动开垦》是二个人小编张佩、马勇和董鉴源的时尚力作,他们将团结在实践中储存起来的阅历整理成册,以期待后学者能少走弯路,减弱Windows驱动程序开荒的读书之路。那本书根本介绍了KMDF、USB/13九四和旋律驱动程序的支出,以及设备驱动程序的批发和设置。提出有早晚Windows驱动程序开荒基础的读者看1看这本书,特别是,要是你正筹算动用KMDF,可能正在致力与USB/13玖四或音频驱动程序相关的编制程序职业,那么,这本书就是1份宝贵的试行教导了。

 磁盘驱动器(仅适用于windowsNT)

使用的驱动类型涉及到代码的兑现(需没有须要考虑PNP和电源管理)和驱动的装置( NT式驱动程序以 service 的样式运转,其余驱动要求选取通用的INF文件安装),微软的合法文书档案那样提到:

windows服务在系统运营是加载,用户需在劳动调控平台开启大概关闭服务
Driver Service是劳动的1个特例,遵从windows服务的说道
加载和煦在NT驱动分为多个步骤:
一.为NT驱动创制新的劳动
二.敞开此项服务
3.闭馆此项服务
四.去除NT驱动创立的劳动
上述四个步骤都以通过SCM创立的劳动来落到实处的。

潘爱民

 控制台

style="font-family: 'Microsoft YaHei';">有关软件驱动程序,你的七个选项为 KMDF 和根本格局 Windows NT 驱动程序模型。 使用 KMDF 和基本情势 Windows NT 模型,你可以编写驱动程序,而无需思虑即插即用 (PnP) 和电源管理。 你能够改为专心于驱动程序的重要职责上。 使用 KMDF,你不要思考 PnP 和电源,因为框架会为你管理 PnP 和电源。 使用基础情势 Windows NT 模型,你不要思索 PnP 和电源,因为基本情势服务在与 PnP 和电源管理完全非亲非故的遇到中运维。

 

二零零六年3月十七日于首都西二旗

 文件夹(仅用于展开)

   3.  开发环境

IO请求包-IRP

 

 HANDLE CreateFile(

 

IRP(IO请求包)用于win3二和驱动程序通信,NT内核有二个组件叫做IO管理器。IO管理器担任IRP的分发
,驱动程序里创制好设施并且创办好标记链接后,Win32就足以加载驱动了。而要让3个使得能够管理I
RP,必需给驱动增添IRP管理例程。

驱网宗旨才干丛书

 LPCTSTEnclave lpFileName,    //指向文件名的指针

Visual Studio WDK(Windows Driver Kit)

丰裕的主意正是再DriverEntry里面对驱动对象DriverObject操作。该参数是1个指南针,指向驱动对象,
使得对象内部有2个MajorFunction数组,该数组的品种是
NTSTATUS (*PDRIVER_DISPATCH) (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp) 。那是贰个函数指
针,指向每一个IRP对于的拍卖例程。最后正是为全数必要管理的IRP实现对应的例程。

竹林蹊径:浓厚浅出Windows驱动开拓

 DWOPRADOD dwDesiredAccess,    //访问方式(写/读)

其间WDK须要和谐手动下载安装

 

张佩 马勇 董鉴源 编著

 DWO奥迪Q5D dwShareMode,    //共享情势

作者是在Windows平台上开垦,使用的付出处境为 Visual Studio 201三 WDK 八.一

ISBN 978-7-121-12555-3

 LPSECURITY_ATT猎豹CS陆IBUTES lpSecurityAttributes, //指向白城品质的指针

 

2011年2月出版

 DWOPRADOD dwCreationDisposition,   //怎样创立

   4.  实现方式

定价:69.00元

 DWO本田UR-VD dwFlagsAndAttributes,   //文件属性

 

16开

 HANDLE hTemplateFile    //用于复制文件句柄

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 输出
  • 与应用程序的简报:调节代码、IKugaQ,请求队列

 

   5.  驱动安装

 

测试境况下安装驱动前

开辟的驱动程序未有张开签名也许采纳测试签名,则供给在设施上开启测试情势,具体操作为:展开调控台,输入:

bcdedit /set testsigning on

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

只要要关门测试方式,则需在决定台输入:

bcdedit /set testsigning off

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

 

澳门新浦京娱乐场网站,本书是小编依据连年的做事学习经历,总计的直接驱动开荒资料。本书越多的是经验之谈,一些施行中的小发掘小意外,颇为书中内容添彩。

 CreateFile展开三个道具,图谋张开数据传输。重临3个与设备相关的句柄。 

以服务的格局运维

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

 

本书的特色之1,是对WDF框架做了较多的切入。本书第三个至关心重视要内容是(第3~七章)围绕WDF而展开切磋,侧注重各有差别。第二章以框架为研讨的基本;第肆、伍两章以WDF框架开采USB和13九4驱动;第肆章讲述内核C 编制程序,也以WDF框架为蓝本;第十章讲述WDF驱动的测试和调治将养。

 CloseHandle关闭3个由CreateFile展开的配备。 

行使INF文件安装

设施相关的驱动装置能够挑选INF举行安装,INF安装文件的编辑建议从 WDF Sample 中找到确切的INF文件举办修改,如若你想询问INF的语法,能够参考这里

  • 由此配备管理器手工业安装

开采调整台,输入 devmgmt 回车,那是开辟设备管理器的中间壹种艺术,其余办法比如右键系统菜单栏Logo均能够张开义务管理器,只是使用命令行的诀窍比较少见,那Ritter别记下一下。找到感兴趣的 设施节点,右键 属性(或更新驱动程序软件),切换来 驱动程序,能够打开感兴趣的操作。这里所观望所提供的选项,后续等你领会了驱动装置的接口后,你会意识都有对应的接口对应各个效能选项。

  • 通进程序完结自动安装

能够参考 WDF Sample 中的Driver Install Frameworks API (DIFxAPI) SampleDevice Console (DevCon) Tool 多个工程,分别提供了分歧调用接口的驱动装置格局,Device Console (DevCon) Tool 生成的devcon.exeWindows驱动开发入门指引,Windows的驱动开发模型。 是三个成效庞大的工具,不仅可用以驱动(包)的安装和卸载,还是能够获得道具的硬件ID,描述符以及配备所设置的驱动列表等音信,开垦人士能够从中壹窥终归。

在使得的安装进度中,系统会自动记录安装的日记,在INF目录(路线一般在 C:Windowsinf下)下可以找到三个日志文件 setupapi.app.logSetupapi.dev.log ,查看那五个日志文件有利于明白驱动装置的实施进程,同时也有益于排查驱动装置进程中出现的百般。

使得的安装涉及到驱动文件的校验(保证驱动文件的完整性和合法性),驱动的先期级计算(选拔最优的驱动去相配当前识别到的新的道具),驱动的停放目录(Driver Store)等剧情。开采人员纯熟驱动装置逻辑有利于驱动的付出,感兴趣能够通过此处张开驾驭。

 

   6.  驱动签名

 

首个相当重要内容是有关音摄像驱动开采(第八~11章)。音录像驱动包罗AVStream架构,本书做了较详细的演讲。第8章讲述使用AVStream小端口架构,第3壹章讲述ASIO音频驱动开垦。

 ReadFile从设备读取数据。 

测试意况

通过VS集成开辟条件创造 Driver 消除方案后会生成五个档案的次序,右键属性展开 XXX Package,左边选中 Driver Signing ,在右手栏 Sign Mode 选择 Test Sign,在 Test Certificate选择 <Create test certificate...>,则在编写翻译时会自动生成测试签名证书。

 

其多个首要内容是关于设备驱动装置(第2二~1四章)。第一2章讲系统装置模块,从全部角度演说系统和器具驱动如何协作完好地开展职业;第贰3章讲述INF安装文件的细节,包蕴各类域的机能,以及众多装置指令的接纳。第二四章讲什么编写驱动装置软件。

 WriteFile向设施写多少。 

生产条件

从Win10发端,驱动文件包不仅须求开始展览扩展验证 (EV) 代码具名,还亟需付出到Windows驱动开发入门指引,Windows的驱动开发模型。硬件开垦中央仪表盘,具体操作指南能够参照此处,你能够在该文书档案上找到驱动具名所需的其余内容。

 

余下的片段章节,分别是有关驱动入门(第二、二章)、Windbg调节和测试命令(第七章)、内核同步(第十章)等剧情。

 "DeviceIoControl"对器具实香港行政局地自定义的操作,举个例子改动设置等。

本书适合一般入门级内核技士,对WDF有意思味,策动付出USB或1394器械驱动者,本书尤其有用。本书对于入行较久,经验充足的技士,也具备自然的参考价值。

 

v   

驱动程序对象(DriverObject)

该目标在驱动程序被运行时由I/O管理器创造,保存有该程序管理各个请求的经过入口、该程序所驱动的全方位器械对象的链表等。

DriverObject 正是你所写的驱动对应的DKoleosIVELAND_OBJECT, 是系统在加载你的驱动时候所分配的。RegisteryPath 是专用于你记录您的驱动相关参数的注册表路线。那多头都由系统一分配配并通过那五个参数字传送递给您。DriverObject 首要之处,在于它装有一组函数指针,称为dispatch functions.

开拓驱动的关键职分便是亲手撰写这几个dispatch functions.当系统用到你的驱动,会向您的驱动发送IRP(那是windows 全数驱动的一路专业措施)。你的职务是在dispatch function 中管理那个请求。你能够让irp 退步,也能够成功重临,也得以修改这一个irp,以致能够团结产生irp。

 

配备对象(DeviceObject)

每开采多个得以使得的设施,驱动程序调用IoCreateDevice创设多个该对象。该对象有八个指针Device Extension指向1块由驱动程序定义的布局,在那之中保存有关此设备的如端口号,中断向量等1切音信

设施对象则是指DEVICE_OBJECT.上边简称DO.

不过其实各类irp 都是对准DO 发出的。唯有针对由该驱动所生成的DO 的IRP, 才会发放该驱动来管理。具体的分发函数,决定于DO 下的DriverObject 域。

当2个应用程序展开文件并读写文件的时候,windows 系统将这个请求变成irp 发送给文件系统驱动。

 

v  

劳动调节管理程序 SCM

好像于linux的守护进度(在linux也许unix操作系统中在系统的指导的时候会开启多数劳务,那几个劳动

就叫做守护进程)

windows服务在系统运行是加载,用户需在劳务调整平台开启或许关闭服务

Driver 瑟维斯是劳务的三个特例,遵从windows服务的合计

v  

编写翻译意况计划安装:

设置DDK,输入路线,build编写翻译出。Sys文件。

加载进程:

手动加载&编写程序加载。

NT驱动程序的加载:
壹:为NT驱动创设新的服务.
二:开启此项服务
叁:关闭此项服务
四:删除NT驱动创造的劳动
(1)打开SCM管理器
SC_HANDLE WINAPI OpenSCManager();
中标重临SCM管理器句柄.不然赶回NULL
(二)创立服务
SC_HANDLE WINAPI CreateService();
(三)展开服务
SC_HANDLE WINAPI OpenService();
(四)控克服务
BOOL WINAPI ControlService();
(5)关闭SCM管理器
BOOL WINAPI CloseServiceHandle();

v  

NT式程序的基本结构:

主导数据结构上面有介绍。驱动对象和设备对象

DriverEntry:入口函数,对驱动程序举行伊始化职业,它是由系统经过所调用。

使得加载的时候,系统经过运转新的线程,调用实践体组件中的对象管理器,创制叁个使得对象。其它,系统经过调用实施体组件中的配置管理程序,查询此驱动程序对应的注册表中的项。 

DriverEntry 中,应该做什么职业。

先是步.生成3个决定配备。当然在此之前你不能够不给调节装置钦命名称。

第二步.设置Dispatch Functions.

第三步.设置Fast Io Functions.

第陆步.编写一个FileSystemNotify 回调函数,在其间绑定刚激活的FS CDO.

第肆步.使用IoRegisterFsRegistrationChange 调用注册这几个回调函数。

v  

瞩目一下几点:

1) 习于旧贯使用UNICODE_ST哈弗ING 字符串。这一个字符串用ENVISIONtl…种类的函数来操作。你应有阅读DDK 扶助,然后熟稔那么些字符串的用法。

贰) 用KdPrint(())来顶替printf 输出新闻。那一个信息方可在DbgView 中观望。KdPrint(())自个儿是叁个宏,为了全部传入参数所以采取了两重括弧。那么些比DbgPrint 调用要稍好。因为在free 版不被编写翻译。

三) 查看DDK 协理领会变化设备对象IoCreateDevice 的用法。

v  

    首先须要精通的是:法斯特Io 是单身于一般性的处理IRP 的散发函数之外的另一组接口。然则他们的功能是千篇一律的,正是由驱动管理外部给予的请求。而且所拍卖的央浼也基本同样。NT 下FASTIO 是壹套IO 管理器 与DEVICE D牧马人IVELacrosse 沟通的此外一套API,在开始展览基于IRP 为底蕴的接口调用前, IO 管理器会尝试运用FAST IO 接口来增长速度种种IO 操作.

    其次,文件系统的平凡分发例程和fastio 例程都随时有非常大可能被调用。做好的过滤驱动显著应该而且过滤这两套接口。可是,一般都只介绍IRP 过滤的点子。法斯特io 接口极度复杂。可是与IRP 过滤是大旨顺序对应的

 

 
 

 

v  

FastIo的接口:(相比重大,可查阅)

法斯特IoCheckIfPossible, 此调用并不是IO MANAGE奥德赛 直接调用. 而是被Fs奥迪Q7tlXXX 体系函数调用. 用于确认读写操作是或不是能够用FASTIO 接口进行.

法斯特IoRead/法斯特IoWrite, 很醒目, 是读写管理的调用.

法斯特IoQueryBasicInfo/法斯特IoQueryStandardInfo, 用于获取各个文件音信. 举例创立,修改日期等.

FastIoLock/FastIoUnlockSingle/法斯特IoUnlockAll/法斯特IoUnlockAllByKey,用于对文件的锁定操作,NT 中.有二 中锁定须要存在.壹.排他性锁. 二.共享锁. 排他性锁在写操作前获取,不准别的进度获得写操作权限, 而共享锁则象征要求读文件某区间. 禁止有写动作出现. 在一样地方上, 若是有八个共享锁请求, 那是被允许的.

法斯特IoDeviceControl 用于提供NtDeviceIoControlFile 的帮忙.

AcquireFileForNtCreateSection/ReleaseFileForNtCreateSection 是NTFS 在绚烂文件内容到内部存储器页面

前进行的操作.

法斯特IoDetachDevice, 当REMOVABLE 介质被拿走后, FILE SYSTEM 的DEVICE 对象会在随便的每一天被销毁. 唯有正确管理这一个调用工夫把上层DEVICE 和将在销毁的DEVICE 脱钩. 固然不消除那些函数, 系统会当.

法斯特IoQueryNetworkOpenInfo, 当CIFS 也便是英特网邻居,校正确的乃是互联网重定向驱动尝试获得文件新闻,会选择那几个调用. 该调用是因为各类历史由来而发生. 当时安排CIFS 时为防止频繁在网络传输文件消息请求, 在NT四 时传输协议增添了一个FileNetworkOpenInformation 的网络文件请求. 而FSD 则增添了这么些接口. 用于在一次操作中获得全体的文件消息. 客户段发送FileNetworkOpenInformation, 服务器端的FSD 用本接口达成消息填写.

法斯特IoAcquireForModWrite, Modified Page Writer 会调用那个接口来获得文件锁. 假若实现这么些接口. 则能使得文件锁定范围减小到调用内定的范围. 不完毕此接口, 整个文件被锁.

法斯特IoPrepareMdlWrite, FSD 提供MDL. 今后向此MDL 写入数据就意味着向文件写入数据. 调用参数中有FILE_BOJECT 描述要写的靶子文件.

法斯特IoMdlWriteComplete, 写操作已毕. FSD 回收MDL.

法斯特IoReadCompressed, 当此调用被调用时, 读到的多寡是减少后的.应该包容王宛平规的NT 提供的滑坡库. 因为调用者负担解压缩.

法斯特IoWriteCompressed,当此调用被调用时, 能够将数据是减弱后存款和储蓄.

法斯特IoMdlReadCompressed/法斯特IoMdlReadCompleteCompressed, MDL 版本的回落读. 当后三个接口被调用时,MDL 必须被释放.

法斯特IoMdlWriteCompressed/法斯特IoMdlWriteCompleteCompressed, MDL 版本的削减写.当后三个接口被调用时,MDL 必须被释放.

法斯特IoQueryOpen, 那不是开采文件的操作. 不过却提供了一个IRP_MJ_CREATE 的IRP. 作者在从前版本的SECUSTALX570 的软件中错误地落实了功用. 这么些操作是开垦文件/获取文件宗旨新闻/关闭文件的2个操作.

法斯特IoReleaseForModWrite,释放法斯特IoAcquireForModWrite 调用所占用的LOCK.

 
 

法斯特IoAcquireForCcFlush/法斯特IoReleaseForCcFlush FsLacrossetl 会调用此接口,在LAZY W冠道ITE 线程将在把修改后的公文数量写入前调用.获取文件锁.

 应用程序到驱动程序的步子:

v  

加载NT驱动的流水生产线:

 

 
 

v  

各种驱动程序有唯壹的驱动对象与之对应;

使得对象的布局:

 

 
 

 

 

 

 

 

各类驱动程序会创建3个或五个设备对象:

配备对象的构造:

 

 
 

v  

IRP与选派函数

IRP的拍卖体制就像是windows应用程序中的音讯管理机制,驱动程序接收到分歧等级次序的IRP后,会进入分裂的派遣函数,在派出函数中IRP得随处理。

上层应用程序与地层驱动程序通讯时,应用程序会发生I/O请求,操作系统讲I/O请求转化为相应的IRP数据。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

根本方面包车型客车知识:

第六章:windows I/O系统

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 

 

 

 

 

 
 

 

 

 

 

 

 

 

 

 

 

 

一,在windows模型下,用于调整外部设备的软件模块叫做设备驱动程序。

二,windowsI/O系统中国共产党第五次全国代表大会部件,I/O管理器,即插即用管理器,电源管理器,wmi例程以及配备驱动程序,

叁,I/O管理器:二种为主内核对象:驱动对象,设备对象,文件对象。I/O管理器担当管理和和煦那三种对象

四,设备驱动程序的归类

即插即用驱动程序(总线驱动,成效驱动,过滤驱动)

水源扩展驱动程序

文件系统驱动程序

五,二种过滤驱动程序:总线过滤驱动,上层过滤驱动,下层过滤驱动。

 

 

 

 

 

 

 

 

 

 

 

 

本文由澳门新浦京娱乐场网站发布于澳门新浦京娱乐场网站,转载请注明出处:Windows驱动开发入门指引,Windows的驱动开发模型