- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于DDK的USB接口WDM驱动开发精品
基于DDK的USB接口WDM 驱动开发
WDM介绍
在Windows2000 系统中,软件要么执行在用户模式,要么执行在内核模式。在x86 计算机上,当用户模式程序需要读取设备数据时,先是通过系统服务接口调用内核模式的服务例程,内核模式的服务例程首先检查传递给它们的参数,然后创建一个称为“I/ O 请求包( IRP) ”的数据结构,并把这个数据结构送到指定驱动程序的入口,执行IRP 的设备驱动程序通过硬件抽象层(HAL) 访问硬件读取数据。
设备驱动程序是一个软件组件,装入后即成为操作系统内核的一部分,为硬件和用户应用程序提供通信桥梁。Windows 2000 系统可以使用多种驱动程序,包括虚拟设备驱动程序和内核模式驱动程序, PnP 驱动程序是一种遵循Windows 2000 即插即用协议的内核模式驱动程序, 而WDM 驱动程序又是一种PnP 驱动程序。
WDM(Windows Driver Model) 是Microsoft 公司推出的新型驱动程序模型,它增加了对即插即用( PnP) 、电源管理( Power Management) 、WMI 的支持。在一个WDM 驱动程序模型中,每个硬件至少有两个驱动程序:一个是功能驱动程序, 负责初始化I/ O 操作、处理I/ O 操作完成时所带来的中断事件并为用户提供一种设备适合的控制方式; 另一个是总线驱动程序,负责管理硬件与计算机的连接[1 ] 。WDM 驱动程序模型使用了如图1 所示的层次结构[2 ] ,一旦总线驱动程序检查到新硬件存在,则响应PnP 管理器的IRP- MN- QUERY- DEVICE- RELATIONS 请求并创建一个PDO ,之后PnP 管理器参照注册表中的信息载入与这个PDO 相关的过滤器和功能驱动程序,驱动程序调用AddDevice 例程构建相应设备对象。AddDevice 例程通常是调用IoCreateDevice 函数创建设备对象,并用IoAttachDeviceToDeviceStack 函数把设备对象连接到当前设备堆栈的顶部,完成如图1 所示层次结构的构造。之后, PnP 管理器向该设备的驱动程序发出副功能码为IRP- MN- START- DEVICE 的IRP ,为其分配资源并启动设备。之后,该设备将进入启动状态,可以开始通信。
图1 WDM 中设备对象和驱动程序的层次结构
Windows 2000 中, I/ O 管理器使用驱动程序对象来代表设备驱动程序,当操作系统加载一个驱动程序时, I/ O 管理器负责为其建立一个驱动程序对象,而驱动程序栈中的每个驱动程序都要为其控制的设备建立一个设备对象( 如图1所示) 。驱动程序对象和设备对象是WDM驱动程序中两种非常重要的数据结构,它们结构形式和两者之间的关系如图2 所示。
图2 驱动程序对象与设备对象的结构以及它们之间的关系
如前所述,Windows2000 操作系统使用I/ O 请求包( IRP) 的数据结构与内核模式驱动程序通信, 所以IRP 在WDM 驱动程序中也起着至关重要的作用,因此要掌握WDM 驱动开发, 还必须正确理解和使用IRP。IRP 数据结构定义于wdm. h文件中,其重要的域有MdlAddress、AssociatedIrp 、IoStatus、CurrentLo2cation、PendingReturned、CancelRoutine 以及Tail 。其中, CurrentLocation 为非透明域, 它和Tail. Overlay.CurrentStackLocation( PIO- STACK- LOCATION) 都没有公开给驱动程序使用。CurrentLocation 为当前I/ O堆栈单元的索引而CurrentStackLocation 就是指向它的指针。当某个“实体”创建IRP 时,同时还创建了一个与之关联的I/ O 堆栈( IO- STACK- LOCATION) 结构数组。I/ O 堆栈中重要的域有MajorFunction、Mi2norFunction、Parameters、DeviceObject 、Completion2Routine 等。MajorFunction 域为IRP 的主功能码,与驱动程序对象中MajorFunction 表的某个派遣函数指针相对应,而MinorFunction 是该IRP 的副功能码。De2viceObject 是与该堆栈单元对应的设备对象的地址,由IoCallDriver 函数填写。因此,可以清晰地给出WDM驱动程序模型中非常重要而又难于理解的IRP、I/ O堆栈、设备对象以及驱动程序对象之间的关系,如图3所示( 图中只给出重要的域) 。至此, 已经对一个WDM 驱动程序的核心数据结构有了完整的了解。一个完整
文档评论(0)