1.  前言

Windows的驱动开采模型

[序言]
众三个人都对驱动开拓风野趣,但一再找不到科学的求学方式.当然那跟驱动开辟的本土壤化学资料稀有关系.非常多学的驱动开辟资料都以土耳其共和国(The Republic of Turkey)语为主,这样让好多驱动初读书人很发烧.自身从事驱动开荒时间相当短也非常长,大致也就3~4年时间.大多人都感到会使得开荒的都是牛人,高手之类的.其实高手,牛人不是如此定义的.我们在读书驱动开辟以前,一定要知道三个道理:术业有专攻,不要盲目跟随大众.

 

从前从未做过驱动开荒,一切从〇开始。断断续续看了些书,windows设备驱动程序wdf开垦等。然则接连云里雾里的。所以想一点一点的集合下在使得方面包车型地铁知识。

因职业上项指标须求,小编须要做驱动相关的费用,从前并不曾接触过有关的文化,折腾一段时间下来,作用如需兑现了,也储存了一部分经历和思想,所以在这里做番计算。

 

[贡献者]
1> defddr   看雪高校
2> StudyRush看雪学院

1. Framework Object Model

图片 1

首先自个儿将记录下怎么搭建调节和测量检验境况?前提是wmware已装完成,已有两台guest os.
(xp 和win7)。上面针对两类系统的调节和测验进行认证。

对于驱动开采的开支指点,微软官方文书档案网址已经提供了很详细的课程文书档案,何况在Github上提供了一层层标准的例程源码用于开荒职员参谋。开辟人士在颇有一定的驱动概念知识后,通过参谋官方例程能够很轻巧达成全体一定效率的驱动应用程序。

   
在Windows的不如版本上支出的驱动程序“模型”(模型那么些词语应该来自单词“Mode”。在Windows
NT上,驱动程序被称为Kernel Driver
Mode驱动程序。作者以为那个Mode是指一种驱动程序的构造和平运动行的科班),有过区别的称呼。比如在Windows
9x上的驱动程序,都称呼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能够视为古板型的晋级版。
   
模型的上进并不是和操作系统版本的升迁齐步走的,而是有二个逐步代替的进度。举例Windows
98已经帮助部分的WDM驱动程序,但是又辅助部分的VXD驱动。而到了Windows
两千,则VXD这种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的底子上加码了一些新的表征,拟定了部分新的科班而培育的。绝半数以上函数调用都以通用的。当然,Windows
9x连串的基础完全分裂,所以VXD与之相比,就不曾多少个内核API函数是千篇一律的。
    故而随着Windows 9x的打入冷宫,VXD难逃通透到底被淘汰的天命。Windows
NT则提升成了后来的Windows版本,KDM也改为了WDM而留存下去。当然,微软不会闲着,今后又推出了新的WDF。读者又不得不管一二虑:本书是用WDM写的依然用WDF写的吗?会不会刚刚学完又被淘汰呢?
   
和VXD不一致,从KDM到WDM再到WDF是一脉相传的,基本上KDM程序员在就学WDM时曾经占尽了有益。到WDF也不例外,WDF与其说是新的驱动开荒模型,还不比说是在已部分内核API和数据结构的基础上,又包装出一套让使用者感觉更简便易行、更易用的以Wdf-开首的一组API。由此,读者完全没有必要顾虑WDF的进步会让前边学习守旧型驱动的极力半途而废。三个超级的例证是:大概在1995年到1993年间发布第4个本子的硬盘上层过滤diskperf的代码,18年过去了,后营口例能够编写翻译并符合规律在新型版本的Vista上运营。
   
本书对于大多数不或者找到WDF实例的章节,都利用了守旧型驱动进行认证。例如磁盘过滤、文件系统过滤和互联网中间层驱动。其他为了从简单入手,对于入门级的多少个例证(串口和键盘)也选拔了古板型驱动。可是设想磁盘和编造网卡(第5章和第11章),使用了WDF版本的例子,请读者注意辨别。

[本内容适用条件及工具]
1> Windows系统下
2> VS贰零零零本子以上
3> Windows驱动开垦包(DDK(老版本) WDK(新本子))
4> 有力量着能够设置VMWare

2. KMDF程序结构

KMDF属于即插即用驱动程序的驱动模型:

1.一个DriverEntry例程。

2.一个EvtDriverDeviceAdd例程,类似于WDM的AddDevice例程。

3.贰个或七个IO队列。

4.贰个活八个IO事件回调例程,类似于WDM的DispatchXxx。

5.支撑的即插即用和电源管理回调例程。

6.支撑的WMI回调例程,用于管理Computer连串

7.别的回调例程,如指标的破除例程、中断管理例程、DMA例程。

 

  • 本着xp驱动调节和测量试验的装置(参谋:)

Windows驱动程序入门:

[本内容适用群众体育]
1> 具有C/C++语言基础的人
2> 具备80×86汇编基础的人
3> 具备高中以上文化品位的逻辑思索

使得开辟最棒应用vmware设想机,好处十分的少说了。首先针对vmware设想机的设置(保障虚拟机是关机状态)

Github:

[具备Windows系统理论书籍]
1> Windows主旨编制程序
2> Win32十二线程程序设计
3> 浓烈剖析Windows操作系统
4> Windows操作系统原理

1.
装置VM与Windbg通讯的串口

 

FAQ1:为啥须要[持有Windows系统理论书籍]这4本书?
答:驱动是Windows系统的贰个生死攸关的组成都部队分,浓重Windows系统主题的一个系统,就因为驱动跟系统基本联系得不得了紧密,所以涉及了无数系统的基础理论以致原理.因而在求学驱动开荒此前必须先明了Windows系统的底蕴开辟理论,Windows系统的运行规律,Windows系统的架构连串.那么笔者提供的上面4本书是当前市面上笔者感觉最杰出最完美的图书了.

开发指标连串的**Virtual
Machine Setting选项,在Hardware中增添新硬件:1)采纳Serial
Port;2)serial
Port Type 选择“Output
to named pipe”;3)Specify
Socket的选项如图1吗;4)最后的布局结果如图2所示。然后运维VM的靶子种类吧。**

   2.  驱动类型

[有着Windows驱动开采书籍]
1> Windows驱动开拓本事详解
2> Windows设备驱动程序WDF开拓

注意事项:日常情况下是串口2:Serial Port
2,原因是暗中同意VM安装虚构打字与印刷机占用Serial Port
1.

 驱动分为如下几种类型:

FAQ2:为啥要求[抱有Windows驱动开荒书籍]这2本书?
答:倘令你对Windows系统的基础理论扎实了,也看完了所说的[Windows系统理论书籍]那4本书,而且你还致力开辟过Windows程序依旧大程序的经验者.那么你踏入Windows驱动开荒的时候,要求一本美貌的驱动入门开拓书籍就可以正确入门.未来自己提供了[Windows驱动开垦书籍]那2本书完完全全针对Windows驱动开拓入门而编辑的书籍.当然作者第一推荐<Windows驱动开采详解>那本书.本书的剧情在近些日子以来,针对驱动开拓的上书时十二分到位了.包蕴了驱动开垦理论
配置 驱动系统
等等……是一本八斗之才的好书.那么第2本,其实有一些老婆当军,不过他个中有少少涉及到WDF那些新型的驱动开辟理论的批注,我们也就凑合着吧.

图片 2 

> > 图1

图片 3

> > 图2

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

[不无Windows调节和测量检验基础理论书籍]
1> 软件调节和测验
2> Windows顾客态程序高效排错

2. 装置Guest
OS的运维项

驱动程序不是迟早须要与硬件通信,假若须求拜候操作系统宗旨数据,往往应用程序未有丰硕的权柄,这种场馆则要求在基础格局下开展访谈。就地方5种驱动类型,作者参谋着微软的驱动例子开采过
鼠标键盘设备过滤驱动
网络过滤软件驱动程序,所以对驱动开拓的知晓仍在浅水区,如在阅读进程中发觉有误的地方,还请不吝提议。

FAQ3:为啥要求[全数Windows调节和测量试验基础理论书籍]这2本书?
答:在开采驱动的地方下,你少不了要调治驱动程序.那么如何调整驱动程序呢?
Windows已为你思索到那么些标题了并付出了一套强有力的调节和测验工具:Windbg
.怎么样学习那一个工具的调护治疗呢?那么今后市道上独有那2本书针对Windbg讲明得还相比到位,最少针对调节和测验命令的应用,已经用中文解说了,我们能够透过2本书先大致了然Windbg的调治命令,然后再进一步举行GOOGLE寻觅并长远学习.

跻身WinXP的虚构机操作系统,展开系统盘(C:\),将文件夹查看选项全开了,那在C盘根目录下有三个叫boot.ini的运维项文件,先去掉只读属性,以文件文件的措施展开,拷贝原来的运行项,作如下修改:

利用的驱动类型涉及到代码的落实(需不供给思索PNP和电源管理)和驱动的安装(
NT式驱动程序以 service
的花样运转,别的驱动须要动用通用的INF文件安装),微软的官方文书档案那样提到:

[全数汇编基础理论书籍]
1> 汇编语言 小编:王爽
2> 80×86汇编语言程序设计教程[绿皮版 或者 黑皮版]

Multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft
Windows XP Professional” /noexecute=optin /fastdetect /debug
/debugport=com2 /baudrate=115200

style=”font-family: ‘Microsoft YaHei’;”>有关软件驱动程序,你的七个选项为
KMDF 和根本情势 Windows NT 驱动程序模型。 使用 KMDF 和基本情势 Windows
NT 模型,你能够编写驱动程序,而无需思量即插即用 (PnP) 和电源管理。
你能够改为静心于驱动程序的首要职务上。 使用 KMDF,你不要怀想 PnP
和电源,因为框架会为你管理 PnP 和电源。 使用基础形式 Windows NT
模型,你不要思量 PnP 和电源,因为基本情势服务在与 PnP
和电源管理完全非亲非故的蒙受中运行。

FAQ4:为何要求[享有汇编基础理论书籍]这2本书?
答:由于在Windows情状下支付驱动,进而有个破绽,正是Windows的WDK,DDK文书档案少得分外,很多验证多是混淆的.因此导致大家付出的驱动极度不安静,那时就须要逆向Windows驱动的编写制定来加深精通.在多个出于驱动的不平稳,会导致系统蓝屏,有的时候错误并不会一贯固定到你的代码,那时就要求汇编来深入分析错误的缘由.就好像小编近来介绍的[怀有Windows调节和测验基础理论书籍]着力是用汇编语言来阐释调节和测量试验技巧.

注意事项:要是手续第11中学的serial port选取的是serial
port 1是话,此处为com1.若是是serial port
2的话此处为com2.

   3.  开发环境

[使得开垦增添书籍]
1> 寒江独钓-Windows内核安全编制程序
2> Windows内核原理与落实
3> Rootkit Windows内核安全防范
4> Windows内核情景解析

3.布置WinDbg的连忙方式

 

FAQ5:为什么供给[使得开荒扩大书籍]这4本书?
答:熟话说:学无边无际,驱动开采世界是二个很宏大的种类,那归根于驱动框架三种化而决定的.驱动包括了:文件驱动,磁盘驱动,显卡驱动,互联网驱动,等等分化的种类,每一连串正是贰个天地,你调整你的力量急需扩张到多地点,那么你可以思虑先本身那边提供的这4本书来上学,通过阅读那3本书,你会意识驱动可以做过多您出人意料的事情.本身从事开荒驱动将近4年,也只有涉及
文件驱动,磁盘驱动以至一些微型驱动而已.这个的上学小编也无非是基于必要来展开分选性学习.各类人都有和睦的工夫极限,大家要以螳当车.

在winddk的安装目录(C:\WinDDK\7600.16385.0\Debuggers)找到windbg.exe试行顺序。在桌面创立快捷方式,何况修改属性如下:

Visual Studio +
WDK(Windows Driver Kit)

源于为知笔记(Wiz)

“C:\WinDDK\7600.16385.0\Debuggers\windbg.exe”
-b -k com:port=\\.\pipe\com_1,baud=115200,pipe

中间WDK须求协和手动下载安装

注意事项:host os
使用相应的windbg.exe,原因是windbg.exe有32和陆11人之分。

作者是在Windows平台上支出,使用的支出条件为
Visual Studio 二〇一三 + WDK 8.1

  • 针对win7驱动调节和测量检验的装置

 

1. WM和windbg的通讯串口设置(同guest os为xp的装置同一)

   4.  实现方式

2. 设置guest os 启动项

 

第一,运转msconfig步入指点tab页,点击高端选项,将调试选上,何况注意调节和测量检验端口要和通讯串口的装置保持一致,重启guest
os.

WDM vs WDF

对于刚(Yu-Gang)接触驱动开辟的新手来讲,小编不提议选择WDM(Windows
驱动程序模型)实行开采。最近在网络能找到的有关驱动开拓的华语图书基本上都以围绕WDM形式开展描述的,而至于WDF(Windows
驱动框架)开采的图书十分少,《竹林溪径——深入显出Window驱动开采》和《Developing
Drivers with the Windows Driver
Foundation》算是两本汇报基于WDF开采驱动的图书,两个都能在英特网找到电子书能源。

 

其次, 方法一:运维guest os后,以管理人权限运营dbgview.exe。

传说WDF的驱动开拓

WDF的开采要求遵照一定的平整,开荒落成时索要思索非常多的内情,由于篇幅有限,笔者凭着本人的经历临时稍做列举,后续将写一篇针对WDF驱动开辟的稿子。

  • PNP和电源管理(WDF已经匡助封装了多数的接口);
  • 种种对象:驱动对象,设备对象,WDF对象,文件对象,队列对象;
  • 使得上下文:有的时候称为设备扩大,用于存款和储蓄特定设备对象的相关新闻的数据结构;
  • 对象的刑满释放解除劳教:须要考虑差异属性对象释放的火候;
  • 中断央浼品级:管理不当易导致蓝屏;
  • 分页与非分页内部存款和储蓄器;
  • 同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等;
  • 日志追踪记录:
    调节和测量试验的画龙点睛,能够接纳 WPP(Windows软件追踪预管理器)或简捷的
    DebugPrint 输出
  • 与应用程序的广播发表:调节代码、I大切诺基Q,诉求队列

 

   5.  驱动安装

 

办法二:要是想调节和测验Kdprint的话能够修改注册表

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

支付的驱动程序未有实行签字大概选择测量试验具名,则要求在设施上展开测验格局,具体操作为:展开调整台,输入:

bcdedit /set testsigning on

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

假设要关闭测量检验格局,则需在决定台输入:

bcdedit /set testsigning off

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

 

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session
Manager/Debug Print Filter] DEFAULT=dword:0000000f

以服务的格局运营

NT式的驱动程序允许以 service
的样式运维, 服务安装的例程能够参照他事他说加以考察 WDF Sample 中的 Eventdrv
工程,可能仿效作者写的关于经过互连网监督的驱动例程的开源代码

 

3. 布置windbg的火速格局(同guest os为xp的设置同样)**

使用INF文件安装

道具相关的驱动装置能够选取INF举行设置,INF安装文件的编辑撰写提议从
WDF Sample
中找到确切的INF文件实行更动,要是你想打听INF的语法,能够参照这里

  • 透过配备管理器手工业安全装

张开调整台,输入 devmgmt
回车,那是开采设备管理器的中间一种艺术,其余办法比如右键系统菜单栏Logo均能够张开职务管理器,只是选拔命令行的法子比少之甚少见,那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.  驱动签名

 

  •  单步调节和测量试验

测验境况

经过VS集成开拓遇到创造 Driver
应用方案后会生成七个门类,右键属性打开 XXX Package,左侧选中
Driver Signing ,在侧面栏 Sign Mode 选择 Test Sign,在
Test Certificate选择
<Create test certificate...>,则在编译时会自动生成测验签字证书。

 

  1.  加载符号文件

生儿育女景况

从Win10发端,驱动文件包不唯有要求举行扩大验证
(EV)
代码签字,还索要交给到硬件开辟主导仪表盘,具体操作指南能够参谋此处,你可以在该文书档案上找到驱动签字所需的别的内容。

 

在windbg上键入:.reload

键入:ld charsample

键入:lm l 

2.  安装断点

点击菜单“File”-> ”OpenSource File…”,
选取驱动程序目录下的源文件queue.cpp并展开。将光标移动到某吩咐地方,使用F9设置断点,则该处代码展现为棕红,就意味着断点已经安装了。

3. 利用F11可进行单步调节和测量检验

发表评论

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

网站地图xml地图