cWindows设备驱动程序设计_第1页
cWindows设备驱动程序设计_第2页
cWindows设备驱动程序设计_第3页
cWindows设备驱动程序设计_第4页
cWindows设备驱动程序设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows设备驱动程序设计西北工业大学计算机学院周兴社谷建华倪红波

Windows2000/XP的设备驱动程序虚拟设备驱动程序(VDD)内核模式驱动程序文件系统驱动程序保留设备驱动程序PnP驱动程序显示驱动程序WDM驱动程序类驱动程序小驱动程序Windows2000/XP设备驱动程序的种类

虚拟设备驱动程序(VirtualDeviceDriver,VDD)可使DOS应用程序访问x86平台上的硬件,也可支持Windows9x下的对端口访问。

WDM驱动程序是一种遵循电源管理协议并能在Win98和Win2000上实现源代码级兼容的PnP驱动程序。WDM驱动程序又可分为类驱动程序(管理已定义类的设备)和小驱动程序(提供厂商专有的支持)。显示驱动程序是用于显示和打印设备的内核模式驱动程序。

文件系统驱动程序在本地磁盘或网络上实现标准PC文件系统模型(含多层次目录结构和命名文件概念)。保留设备驱动程序主要包括WindowsNT早期版本的驱动程序,它直接控制一个硬设备而不用其他驱动程序帮助,可以不做修改地在Windows2000中运行。

WDM的基本结构1、设备对象

设备对象:系统为帮助软件管理硬件而创建的一个数据结构(包括PDO、FDO、FiDO)。

PDO(物理设备对象):设备对象中的物理型对象。

FDO(功能设备对象):设备对象中的功能型对象。FiDO(过滤器设备对象):在I/O管理器、FDO和PDO间的监视、修改IRP流的过滤型对象,分上层过滤和下层过滤对象。设备对象栈:描述对设备对象内部处理请求的驱动层次的栈型结构IRPI/O系统服务Win32子系统应用程序用户态核心态I/O管理器FDO设备对象FiDOFiDOPDO设备对象栈上层过滤器驱动程序功能驱动程序下层过滤器驱动程序总线驱动程序

功能驱动程序:管理FDO所代表的设备,负责其初始化、处理I/O操作、I/O操作完成时产生中断事件,为用户提供一种适当的设备控制方式。

总线驱动程序:负责管理PDO硬件和计算机之间的连接。

过滤器驱动程序:管理FiDO所代表的设备,用于监视和修改IRP流,硬件或软件人员可利用过滤器驱动程序修改上级驱动程序的传递过来的操作。WDM设备驱动程序类型每种硬件设备的驱动程序由上述两到三种驱动程序组成(可以无过滤器驱动程序)。相同类型的总线共用一种总线驱动程序(如PCI总线驱动程序)。

设备对象与设备驱动程序关系每个功能设备对应一个设备对象(设备对象栈为设备对象内部属性),相同型号的多个功能设备对应多个设备对象。每个设备对象具有不同的私有属性值(如设备ID)。相同型号的多个功能设备共用一个过滤驱动程序和功能驱动程序,即只有一个驱动程序对象。

设备驱动程序与设备关系:

同类中成员函数与类实例关系。应用程序对设备对象的操作过程

操作接口:设备驱动程序的Win32API函数,或重载的设备驱动程序的Win32API回调函数。

操作参数:设备句柄、操作类型及其它信息。例:DeviceIoControl(hDevice,DIOC_MY_IO,NULL,0,NULL,0,NULL,NULL);

Win32子系统处理:将I/O操作转换后交I/O管理器处理,I/O管理器创建一个I/O请求包(IRP)后,送到设备对象栈的最上层设备对象对应的驱动程序。驱动程序处理:每层驱动程序都可决定如何处理IRP,既可直接处理完该IRP就不再向下传,也可处理完后继续向下传递,还可只做向下传递工作。下层处理完的返回信息又通过该包的结构逐层向上传递。设备驱动程序的装入过程总线驱动程序检测到新的硬件安装向导指定新的硬件类型取得厂商、设备类型、版本、资源需求等信息取配置头区域信息由指定得到信息硬件接入添加新设备系统重启检测指定PnP管理器就创建PDO,在注册表中添加某些项所有硬件检测完毕?NYPnP管理器决定分配哪些资源给各个设备PnP管理器查找注册表中与该PDO相吻合的各级驱动程序执行DriverEntry(),设置各例程的入口地址,将对象指针装入I/O管理器中找到?NY读INF文件,按INF文件指令安装各级驱动程序PnP管理器装入最底层过滤驱动程序,调用其AddDevice函数,该函数创建一个FiDO,实现FiDO与同级驱动程序的连接PnP管理器查找所选驱动程序对象已在I/O管理器中已装入?PnP管理器根据需要给设备发送各种PnPIRPPnP管理器给设备发送“启动设备”PnPIRP,驱动程序将分配的资源信息向下传送到设备配置头区域中,并启动设备驱动程序处于等待状态,等待IRP的到来PnP管理器依次装入各级驱动程序,完成整个设备对象栈AddDevice函数把PDO连接到FiDO上WDM驱动程序的结构

WDM驱动程序包含许多例程,操作系统调用这些例程来执行对IRP的各种操作。基本驱动程序例程I/O控制例程分发例程DriverEntryAddDeviceStartIOAdapterControlOnInterruptDpcForIsrDispatchPnpDispatchPowerDispatchWmiDispatchReadDispatchWriteStartIO处理请求队列、AdapterControl处理DMA操作、OnInterrupt处理中断。WDM驱动程序包含例程DriverEntry例程:这个例程是每一个设备驱动程序的入口。完成某些全局初始化(如将驱动程序对象指针装入到I/O管理器中)工作,设置响应各种用户请求的分发例程与I/O控制例程的入口。AddDevice例程:对于功能驱动程序,其AddDevice函数的基本职责是创建一个设备对象并把它连接到以PDO为底的设备堆栈中。DispatchPnp例程:用于处理IRP_MJ_PNP消息,以便能实现即插即用的功能。DispatchPower例程:用于实现对电源管理的支持。DispatchWmi例程:WMI是微软实现的基于Web的企业管理工业标准,该例程用于处理有关的消息。驱动程序的DriverEntry函数示例:extern"C"NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath){//初始化例程的入口地址DriverObject->DriverUnload=DriverUnload;DriverObject->DriverExtension->AddDevice=AddDevice;DriverObject->DriverStartIo=StartIo;DriverObject->MajorFunction[IRP_MJ_PNP]=DispatchPnp;DriverObject->MajorFunction[IRP_MJ_POWER]=DispatchPower;DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL]=DispatchWmi;……//这里可加入其他MajorFunction处理例程的入口地址驱动程序的AddDevice函数示例:NTSTATUSAddDevice(PDRIVER_OBJECTDriverObject,PDEVICE_OBJECTpdo){NTSTATUSstatus;PDEVICE_OBJECTfdo;status=IoCreateDevice(DriveObject, sizeof(WDM_DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo);//在fdo中产生我们的功能设备对象if(NT_ERROR(status))returnstatus;……}驱动程序的IRP派遣函数示例:NTSTATUSDispatchXxx(PDEVICE_OBJECTdevice,PIRPIrp){PIO_STACK_LOCATIONstack=IoGetCurrentIrpStackLocation(Irp);//获得栈单元指针PDEVICE_EXTENSIONpdx=(PDEVICE_EXTENSION)device->DeviceExtension; //获得设备扩展…… //其他IRP处理操作returnSTATUS_Xxx; //返回状态码}I/O请求包(IRP)定义:I/O请求包(IRP)是驱动程序操作的中心,它是一个内核“对象”,是预先定义的数据结构。应用:I/O管理器通过IRP对设备对象进行操作。I/O管理器接收到一个I/O请求后,分配并初始化一个IRP,再把它传递到合适的设备驱动程序中的最高驱动程序中。设备对象属性为设备驱动程序处理的数据。由一个固但定的首部密和一个可座变数目的跳I/O栈像组成。1.I绝RP组承成IRP肯首部组搜成I/O栈:通过I迈O_ST驾ACK_敢LOCA膏TION车结构数组网实现。次一光次I/O拘请求可能桥对应多个领I/O操圆作实现方法:号较多个I霞RP实现乞;恳一个IR兰P实现+势I/O栈玻实现。(肌较优)IRP缓中的I像/O栈描组成IO_浮STA切CK_安LOC战ATI滋ON结扣构成员延:Maj窝orF西unc红tio耐n(该敞IRP灰的主功动能码)Min裕orF亏unc爽tio峰n(该须IRP拨的副功籍能码)Para悉mete陪rs(I辆RP参数士)Dev绸ice佩Obj玻ect军(与该寒栈单元细对应的监设备对墨象地址轻)Fil众eOb层jec桶t(内玻核文件泉对象地彻址)Com乎ple杜tio款nRo戒uti泰ne(炉I/O怖完成程疼序地址冰)Con戏tex杏t(任雕意的与结上下文去相关的苦值)。IRP_证MJ_C云REAT献E请求,创建返设备映歇射;翼IRP御_MJ鸣_CL本OSE驱请求,口关闭设直备映射降;摄I盐RP_粥MJ_枪REA蜜D请求贼,读取预设备对遵象的信挣息;缎IRP情_MJ碗_WR予ITE销请求,城对设备成对象写毙信息;加IR眠P_M晚J_P耽NP请亡求,实思现Pn笋P管理度,如IRP健_MN握_ST让ART炉_DE埋VIC熟E请求,启动设答备;沙IRP协_MJ_尽IOCT命L请求,以I/O控谅制。Par村ame释ter牺s成员斩的几个膛常见的油类型:2、I鹊RP创冤建与处姑理创建IR星P的函数:IoBu嘴ildA牛sync旱hron锐ousF猴sdRe稍ques主t();监//创建蝴异步IR继PIoBu娘ildS渡ynch篇rono堂usFs信dReq摇uest怕();/关/创建同简步IRPIoBu陶ildD鸦evic敌eIoC攻ontr跌olRe摊ques直t();//创掏建同步域IRP邻_MJ诞_DE越VIC斧E_C纸ONT浩ROL归或//忘IR壤P_M霉J_I谅NTE底RNA臭L_D饿EVI段CE_伯CON极TRO精L请寒求IoAl曲loca澡teIr剖p();改//创建涉其他种类炒IRPIoM环ake忠Ass牛oci渴ate凤dIr惭p()熟;//响创建某忙些IR扭P的子永IRP创建者:I/叙O管理谱器,或勿其他的最驱动程柳序。I/O孕管理器妈在创建救完IR仁P后,瓣将I/龙O请求赠信息设热置到I款RP中俱,并将移IRP仙发送到载设备驱争动程序增中。已知参瘦数信息:PDEV色ICE_抚OBJE省CTD轿evic锈eObj征ect;炼//设栏备对象结肆构IRP们_MJ钩_Xx砌x;捡//压I/O絮请求对扔应的功阵能码I/O管隆理器的处敲理流程:PIO_很STAC拍K_LO摔CATI醋ONs抬tack寸=IoGe叼tNex狗tIrp梅Stac千kLoc象atio剃n(Ir坟p);//获孩得该I德RP第亿一个堆咬栈单元旦的指针搭(堆栈虚初始为栏空)sta贫ck-毫>Ma伪jor默Fun真cti晴on织=I茂RP_江MJ_训Xxx伟;//填充啊Majo顷rFun辨ctio鞠n代码……辟/太/对栈尝做其他跌初始化挥的工作//如S盈tart融Io()NTST朽ATUS肌sta挽tus蠢=Io闻Call请Driv举er(D写evic解eObj猾ect,散Irp)磁;//把伞IRP柏发送到斗设备驱劝动程序IRP的篮设置与派份遣:IoCa吵llDr寸iver鸣的执行过持程:NTST浪ATUS拐IoC酬allD剧rive因r(PD间EVIC失E_OB封JECT水dev朽ice,篮PIR蒙PIr狡p){IoSe浊tNex博tIrp匪Stac颈kLoc泪atio极n(Ir智p);PIO_冰STAC问K_LO办CATI称ON绳stac绩k=IoG借etC便urr缓ent石Irp誉Sta耀ckL仪oca网tio以n(I汇rp)良;//附获得栈新单元指型针sta快ck-缝>De狠vic园eOb誓jec头t=况de刊vic差e;造//设雪置设备买对象结肌构地址ULON酱Gfc危n=讯stac哭k->M因ajor脆Func纲tion字;//得尼到主功能赌号PDR环IVE峰R_O辅BJE允CT预dri即ver性=屋dev兽ice启->D纳riv魔erO毒bje茧ct;//获得状驱动程序狐对象的地表址retu涛rn(怪*dri庆ver-夸>Maj董orFu尺ncti凝on[f樱cn])错(dev览ice,历Irp)殖;//利用销主功能号晕调用相应惜的派遣函五数}*dr猎ive补r->馆Ma举jor咳Fun偿cti潮on[禁fcn罢]是函声数指针蹲,它所芹指向的劲派遣函窄数是在姑Dri片ver拐Ent畅ry例援程中指贩定的。3、I离RP参乘数与W镜in3虫2A瘦PI大部分悔IRP晒参数可睬以和W歼in3惯2函数染对应起墓来:IRP类型Win32APIIRP_MJ_CREATECreateFileIRP_MJ_READReadFileIRP_MJ_WRITEWriteFileIRP_MJ_IOCTLDeviceIoControlIRP_MJ_CLOSECloseIRP_MN_START_DEVICEStartDevice五、即插即洲用支持即插厘即用主要脸是指实现洒一个Ad已dDev瓜ice程它序和一个惕IRP_奋MJ_P湿NP处理亦程序。这面个PnP巷IRP接有8个次军功能代码昼(它们的挪主功能代构码都是I货RP_M忍J_PN厌P)。·狭IR路P_M拼N_S思TAR险T_D斤EVI粒CE卵分配资继源并启普动设备·童IRP_惭MN_Q细UERY茎_REM慰OVE_锹DEVI港CE农询问一个脏设备是否摊可以删除·博IRP_厨MN_R舒EMOV寻E_DE滑VICE挽设备熔被拔出,膛删除设备·泰IR悲P_M牙N_C建ANC按EL_创REM误OVE鹊_DE狂VIC经E丹取乓消查询固删除请掠求·余IRP_状MN_S扭TOP_车DEVI仿CE宗停止设过备进行资趁源重新分诞配·眼IR宾P_M佩N_Q名UER饱Y_S相TOP往_DE嫁VIC析E浅询问岩设备是惨否可以详停止·陪IRP_肚MN_C但ANCE凭L_ST垃OP_D皇EVIC片E题取消查询佩停止请求IRP源_MN手_SU芳RPR圣ISE描_RE怒MOV勾AL筹用偶户在意彼外下拔越出设备六、数兵据读/贯写WDM有沃4个标准删的资源类赚型,分别岛是:CmRe弃sour拨ceTy直pePo叔rt(端馆口资源)CmR切eso餐urc脸eTy信peM资emo纠ry(寇内存资暑源)CmR吊eso震urc嗽eTy访peI资nte素rru漆pt(仇中断资龄源)CmRe食sour烛ceTy偷peDm举a(DM炼A资源)1、内存挪与端口访畏问尽管P才C机的竿I/O垮端口是增单独编百址的,渗但为了歇做到和师统一编埋址的机衬器兼容辜性,W培ind翼ows属20盲00的饶设计者宜使用了淋硬件抽隔象层(沉HAL企)的概圾念。无锯论是单精独编址针还是统链一编址痒,只需职要使用股P38捧6表中镜所给的朱函数就凶可以访病问端口躁和内存送了。2、响应灵中断响应中炉断首先兽要配置萝中断,逗也就是凉截获中剖断,然索后就需励要编写导中断处存理程序本。配置中疑断资源企是在S吵tar邪tDe饼vic响e函数拣中实现弹的,使幅用从C悄mRe诉sou碑rce福Typ眉eIn更ter惨rup夏t描述后符中得秤到的参冻数来调乡丰用Io淋Con读nec截tIn后ter悄rup麻t函数歇。和实败模式下纵一样,屡在调用土IoC肺onn纽奉ect啊Int妨err厅upt稠进行中疑断配置穴前应该胖禁止P碧C机的辜中断,茂调用之净后再允乖许设备称中断。七、WD欠M驱动程榨序的安装情文件驱动程闸序的安础装:安装步骤:根据I器NF文件宗中的指令猾进行。安装内容:将可幻玉执行文各件复制年到正确禁的位置罚(通常拨是Wi筐ndo抖ws腾Sys悦tem贼32\湖Dri顾ver皆s目录尊);创建各种摧注册表项时。INF蜡文件:是一个文盯本文件,详它由节组舞成,每一像节从括在民方括号中纲的节名称翼开始,后趋面是节的浴内容,大兔部分段都执含有一系胶列“ke积ywor榜d=亲valu研e”形式洋的项。节项值描述[Version]SignatureProviderClassClassGuidDriverVer$WindowsNT$,$Windows95$或$Chicago$INF文件创建者系统定义的类名字,或用户指定的新的类名字匹配的类GUID驱动程序的版本号[Strings]%String%=”Value”指定一个字符串[Manufacturer]%manufacturer%=models指定厂商名和对应的models节的名称[models]指定产品名称、对应的install节的名称和硬件ID,0个或多个兼容ID节项值描述[install]Copyfiles=@filename|filelistAddreg=addregProfileItems指定要复制的文件,或列出filelist节的名称指定addreg节的名称列出指定要添加到“开始”菜单中的项[DestinationDirs]DefaultDestDir=dirid,[subdir]filelist=dirid,[subdir]对默认文件复制和filelist节中的文件复制,指定目录ID和可选的子目录。dirid是一个目录代码,指示存放文件的标准位置。Windows2000DDK定义了这些代码,如代码10表示Windows目录[filelist]要安装的文件列表[addreg]添加新的键和值9、静夜四餐无邻,荒棋居旧业贫疤。。4月-罗234月-年23Tue敲sda茂y,煎Apr卸il劈燕25,转20撒2310、雨中黄衔叶树,灯册下白头人俘。。23:报56:于2123:郑56:絮2123:5董64/25狂/202边311洲:56:差21P苹M11、以我眉独沈久里,愧君睬相见频典。。4月-座2323:5单6:2123:袭56Apr-亿2325-A峰pr-2鸡312、故人杰江海别馋,几度泄隔山川杜。。23:苍56:岁2123:5论6:2123:5掩6Tue响sda如y,占Apr买il费25,餐20胡2313、乍见益翻疑梦中,相悲宵各问年吗。。4月-竟234月-驰2323:革56:鞠2123:5呜6:21Apr塘il买25,洽20艺2314、他乡衬生白发男,旧国当见青山享。。25拉四月由202炼311:5思6:21尚下午23:5斧6:214月-苍2315、比不了惕得就不比柳,得不到馆的就不要挪。。。四月凤2311:绿56吧下午4月-筋2323:5导6Apr拉il裕25,批20婚2316、行动岂出成果姥,工作轧出财富工。。202茅3/4渗/25记23眠:56督:2123:5倾6:2125A幻玉pril弄202皆317、做前拜,能够虚环视四佳周;做刑时,你鸽只能或爽者最好嫂沿着以相脚为起桃点的射码线向前棉。。11:5惠6:21适下午11:待56匆下午23:谅56:裳214月-撑239、没有失冒败,只有微暂时停止鸡成功!。4月-抽234月-替23Tue稍sda蛙y,佛Apr灿il菌25,诊20论2310、很多记事情努茅力了未方必有结重果,但妥是不努己力却什直么改变滥也没有肺。。23:5显6:2223:5壁6:2223:5搅64/25骄/202夜311熊:56:通22P价M11、成功就府是日复一氏日那一点吩点小小努充力的积累胞。。4月-2些323:5葱6:2223:摄56Apr-羽2325-孙Apr胸-2312、世间成勤事,不求狡其绝对圆傍满,留一翅份不足,狂可得无限师完美。。23:5陡6:2223:5尘6:2223:债56Tues什day,筑Apr镇il2尚5,2桥02313、不知锻香积寺确,数里犹入云峰皱。。4月-圈234月-2洁323:励56:白2223:5钻6:22Apr宴il衫25,略20聋2314、意志遗坚强的歇人能把保世界放向在手中活像泥块损一样任虚意揉捏室。25四桥月20婚2311:5磁6:22矿下午23:5筹6:224月-2黄315、楚塞残三湘接殖,荆门纸九派通创。。。四月2银311:5拣6下午4月-崇232

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论