读书频道 > 系统 > windows > Windows内核原理与实现
6.5.4 toaster 设备的设备栈
2013-05-20 08:41:15     我来说两句 
收藏    我要投稿   

本文所属图书 > Windows内核原理与实现

本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本...  立即去当当网订购

前面6.3.3节介绍了即插即用管理器列举设备的过程,以及由此而建立起来的设备树及设备节点。现在我们来看一看toaster 例子中的驱动程序如何参与到此过程中。首先,我们看一下toaster 设备在设备树中的位置,如图6.14 所示。


 

Toaster总线是直接连接在根(ROOT )节点下的设备,当toaster 总线被安装到系统中以后,除非显式地删除它,否则每次系统引导时,即插即用管理器都会创建toaster 总线设备,并且将总线驱动程序 BusEnum.sys 加载到系统中。正如本章前面所讲,注册表中记录了ROOT 下面的设备(位于路径HKLM\System\CurrentControlSet\Enum\Root)。因此,虽然BusEnum.sys 驱动程序的启动类型为“按需-启动”,但是它在引导时被加载到系统中。如果我们将toaster 总线设备从设备树中手动删除或禁止(在Windows 的设备管理器中,在 toaster 总线设备上选择“卸载”或“禁用”即可),那么,BusEnum.sys 驱动程序将不会再在引导时被加载和启动。


 

在toaster 总线设备的节点上,其设备栈的结构为:PDO 是PnPManager驱动程序创建的设备对象,FDO 则是 BusEnum.sys驱动程序创建的设备对象,如图6.15(a) 所示。这两个设备对象是即插即用管理器在列举设备过程中指示PnPManager和BusEnum.sys驱动程序创建的。其中 FDO 是由 BusEnum.sys驱动程序的增加设备例程创建的。该例程除了创建FDO并将其附载到设备栈中以外,还调用了 IoRegisterDeviceInterface 函数,创建一个设备接口(device interface)并注册到 I/O 系统中。

设备接口是应用程序与设备之间进行通信的重要途径。每一个设备接口类都有一个GUID(128 位唯一标识符),toaster 总线的设备接口类的标识符为GUID_DEVINTERFACE_ BUSENUM_TOASTER ,而toaster 设备的标识符为GUID_DEVINTERFACE_TOASTER。当设备驱动程序调用IoRegisterDeviceInterface 函数注册设备接口类和该接口类的一个实例时,I/O 管理器提供一个符号链接名来表示该设备实例,此符号链接名永久保存在注册表中。因此,应用程序可以查询设备接口的实例,并获得符号链接名,然后利用此符号链接名访问相应的设备。Toaster例子中的enum.exe 和toast.exe 程序演示了这一用法。

图6.14 显示了在toaster 总线下面有两个toaster 设备节点。Toaster设备节点的设备栈为:PDO 是BusEnum.sys 驱动程序创建的设备对象,FDO 则是toaster.sys 驱动程序创建的设备对象,如图 6.15(b) 所示。正如上一小节所述,当模拟程序 enum.exe 指示toaster 总线插入一个toaster 设备时,toaster 总线驱动程序创建一个 PDO 对象,然后利用IoInvalidateDeviceRelations 函数,通知即插即用管理器新设备的到来。即插即用管理器为toaster 加载驱动程序(若有必要),并调用它的增加设备例程,为新设备创建 FDO 。在toaster.sys 驱动程序的增加设备例程(即 ToasterAddDevice 函数)中,它创建设备对象并执行初始化,然后调用IoAttachDeviceToDeviceStack 函数,将设备对象加入到设备栈中。最后调用IoRegisterDeviceInterface 函数为该toaster 设备注册toaster 设备类和设备类实例。因此,toast.exe 可以查询toaster 设备类的实例,并通过I/O 管理器向它们发送I/O 请求。

 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:6.5.3 驱动程序的代码结构
下一篇:6.5.5 过滤驱动程序的配置和加载
相关文章
图文推荐
3.4.4 进程生命期管
3.4.2 Windows应用商
3.4.1 Windows应用商
3.4 进程生命期管理
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站