- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows2000设备驱动程序设计 Windows 2000/XP的设备驱动程序 虚拟设备驱动程序(Virtual Device Driver,VDD)可使DOS应用程序访问x86平台上的硬件,也可支持Windows 9x下的对端口访问。WDM驱动程序 是一种遵循电源管理协议并能在Win98和Win2000上实现源代码级兼容的PnP驱动程序。WDM驱动程序又可分为类驱动程序(管理已定义类的设备)和小驱动程序(提供厂商专有的支持)。 显示驱动程序是用于显示和打印设备的内核模式驱动程序。文件系统驱动程序在本地磁盘或网络上实现标准PC文件系统模型(含多层次目录结构和命名文件概念)。 保留设备驱动程序主要包括Windows NT早期版本的驱动程序,它直接控制一个硬设备而不用其他驱动程序帮助,可以不做修改地在Windows 2000中运行。 WDM的基本结构 设备对象栈: 描述对设备对象内部处理请求的驱动层次的栈型结构 功能驱动程序 :管理FDO所代表的设备,负责其初始化、处理I/O操作、I/O操作完成时产生中断事件,为用户提供一种适当的设备控制方式。 总线驱动程序:负责管理PDO硬件和计算机之间的连接。 过滤器驱动程序:管理FiDO所代表的设备,用于监视和修改IRP流,硬件或软件人员可利用过滤器驱动程序修改上级驱动程序的传递过来的操作。 设备对象与设备驱动程序关系 每个功能设备对应一个设备对象(设备对象栈为设备对象内部属性), 相同型号的多个功能设备对应多个设备对象。每个设备对象具有不同的私有属性值(如设备ID)。 相同型号的多个功能设备共用一个过滤驱动程序和功能驱动程序,即只有一个驱动程序对象。 应用程序对设备对象的操作过程 操作接口:设备驱动程序的Win32 API函数,或重载的设备驱动程序的Win32 API回调函数。 操作参数:设备句柄、操作类型及其它信息。 例:DeviceIoControl(hDevice, DIOC_MY_IO, NULL, 0, NULL, 0, NULL,NULL); Win32子系统处理:将I/O操作转换后交I/O管理器处理, I/O管理器创建一个I/O请求包(IRP)后,送到设备对象栈的最上层设备对象对应的驱动程序。 驱动程序处理:每层驱动程序都可决定如何处理IRP,既可直接处理完该IRP就不再向下传,也可处理完后继续向下传递,还可只做向下传递工作。下层处理完的返回信息又通过该包的结构逐层向上传递。 设备驱动程序的装入过程 WDM驱动程序的结构 WDM驱动程序包含许多例程,操作系统调用这些例程来执行对IRP的各种操作。 WDM驱动程序包含例程 DriverEntry例程:这个例程是每一个设备驱动程序的入口。完成某些全局初始化(如将驱动程序对象指针装入到I/O管理器中)工作,设置响应各种用户请求的分发例程与I/O控制例程的入口。 AddDevice例程:对于功能驱动程序,其AddDevice函数的基本职责是创建一个设备对象并把它连接到以PDO为底的设备堆栈中。 DispatchPnp例程:用于处理IRP_MJ_PNP消息,以便能实现即插即用的功能。 DispatchPower例程:用于实现对电源管理的支持。 DispatchWmi例程:WMI是微软实现的基于Web的企业管理工业标准,该例程用于处理有关的消息。 驱动程序的DriverEntry函数示例: extern C NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { // 初始化例程的入口地址 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] =
文档评论(0)