changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:802回复:1

这张电源irp传递图该怎么理解?

楼主#
更多 发布于:2005-01-21 13:57
RT
mao0504
驱动牛犊
驱动牛犊
  • 注册日期2004-12-11
  • 最后登录2020-03-25
  • 粉丝0
  • 关注0
  • 积分51分
  • 威望47点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-01-21 14:29
转载::

WDM模型使用了如图2-1的层次结构。图中左边是一个设备对象堆栈。设备对象是系统为帮助软件管理硬件而创建的数据结构。一个物理硬件可以有多个这样的数据结构。处于堆栈最底层的设备对象称为物理设备对象(physical device object),或简称为PDO。在设备对象堆栈的中间某处有一个对象称为功能设备对象(functional device object),或简称FDO。在FDO的上面和下面还会有一些过滤器设备对象(filter device object)。位于FDO上面的过滤器设备对象称为上层过滤器,位于FDO下面(但仍在PDO之上)的过滤器设备对象称为下层过滤器。




关于过滤器设备对象(Filter Device Object)的缩写
我们这个行业大量使用缩写词,我觉得这有些怪,为什么术语过滤器设备对象(filter device object)没有官方缩写词,FDO已经用于功能设备对象。以前,Microsoft曾用FiDO表示过滤器设备对象。这个缩写的缺点是不能表明是上层过滤器还是下层过滤器。另外,这个缩写有些不适合严肃的技术论述。

我将在本书中使用FiDO来代表过滤器设备对象。我想驱动程序编程(至少是这本书)将要go to the dogs。

操作系统的PnP管理器按照设备驱动程序的要求构造了设备对象堆栈,在本书中,我们用通用术语“总线(bus)”来描述与设备进行电气连接的硬件。这是一个广义的定义,它不仅包括PCI总线,还包括SCSI卡、并行口、串行口、USB集线器(hub),等等。实际上,它可以是任何能插入多个设备的硬件设备。总线驱动程序的一个任务就是枚举总线上的设备,并为每个设备创建一个PDO。一旦总线驱动程序检查到新硬件存在,PnP管理器就创建一个PDO,之后便开始描绘如图2-1所示的结构。

创建完PDO后,PnP管理器参照注册表中的信息查找与这个PDO相关的过滤器和功能驱动程序,它们出现在图的中部。系统安装程序负责添加这些注册表项,而驱动程序包中控制硬件安装的INF文件负责添加其它表项。这些表项定义了过滤器和功能驱动程序在堆栈中的次序。PnP管理器先装入最底层的过滤器驱动程序并调用其AddDevice函数。该函数创建一个FiDO,这样就在过滤器驱动程序和FiDO和之间建立了水平连接。然后,AddDevice把PDO连接到FiDO上,这就是设备对象之间连线的由来。PnP管理器继续向上执行,装入并调用每个低层过滤器、功能驱动程序、每个高层过滤器,直到完成整个堆栈。

层次结构可以使I/O请求过程更加明了,见图2-1的右侧。每个影响到设备的操作都使用I/O请求包。通常IRP先被送到设备堆栈的最上层驱动程序,然后逐渐过滤到下面的驱动程序。每一层驱动程序都可以决定如何处理IRP。有时,驱动程序不做任何事,仅仅是向下层传递该IRP。有时,驱动程序直接处理完该IRP,不再向下传递。还有时,驱动程序既处理了IRP,又把IRP传递下去。这取决于设备以及IRP所携带的内容。

在单个硬件的驱动程序堆栈中,不同位置的驱动程序扮演了不同的角色。功能驱动程序管理FDO所代表的设备。总线驱动程序管理计算机与PDO所代表设备的连接。过滤器驱动程序用于监视和修改IRP流。由于设备对象与驱动程序软件之间关系紧密,有时使我用FDO驱动程序来代表功能驱动程序,用PDO驱动程序来代表总线驱动程序。

曾看到过与图2-1类似的图,他把图中描述的层次结构误认为是C++中的类继承。设计设备驱动程序架构的一个好方法是定义基类,程序员可以从它派生出更多的专用类。以这种方式,你可以用一组抽象类来管理不同种类的PDO,还可以用它们派生出FDO驱动程序。系统把IRP发送到虚拟函数,其中一些IRP被PDO驱动程序中的基类处理,另一些被FDO驱动程序中的派生类处理。但是,WDM并不是以这种方式工作,PDO驱动程序执行的工作与FDO驱动程序完全不同。FDO通过下传IRP把某些工作委托给PDO驱动程序去做,这种关系更象链条上的环节,而不象类间的继承关系。


游客

返回顶部