阅读:2249回复:2
class KPnpLowerDevice 和KPnpDevice什么关系?
如题!
|
|
|
沙发#
发布于:2002-05-04 17:43
看来定义KPnpLowerDevice m_Lower是为了通过m_Lower.Initialize(this, Pdo);和KPciConfiguration PciConfig(m_Lower.TopOfStack())获取PCI的配置,为何一定要通过这样的做法???
定义KPnpDevice类不行么? |
|
|
板凳#
发布于:2002-05-05 00:57
下面是从文档来翻译过来的东西。随便翻译了一下,它能够大致解释为什么需要KPnpLowerDevice。翻译的不是很准,参考着KPnpLowerDevice的Overview看就可以了。
大家多讨论,一起学习。 KPnpLowerDevice类提供了一个PDO(物理设备对象)的模型,用于WDM设备驱动。PDO是操作系统中物理设备的表示。它是KLowerDevice的子类。 当驱动程序创建或初始化一个KPnpLowerDevice实例时,它将一个设备对象连接到PDO。连接操作返回另一个系统设备对象地址,它指向真正被连接的设备对象。这里指的是栈顶的设备。栈顶设备可以不同于PDO。设备连接形成了一个链接列表,这样,一旦一个设备可以连接到第二个。如果栈顶设备已经连接到一个PDO,则试图连接到这个PDO的第二个设备将替换这个连接到栈顶设备。 当系统调用minidriver的AddDevice入口时,minidriver通常创建一个FDO(功能设备对象),用于建模和控制物理设备。FDO通常用KPnpDevice的一个子类的实例表示。驱动程序员一般是在FDO中嵌入一个KPnpLowerDevice实例(或它的子类)以表示PDO。注意KPnpLowerDevice用缺省的构造函数或初始化函数Initialize来完成,通常用初始化函数Initialize。 对应某些minidriver会有不同的情况,如hid驱动程序。在这种情况下,驱动程序创建FDO并连接到PDO。因此,它不需要第二个设备对象来表示FDO,也不尝试连接其它设备对象到PDO。这类驱动程序在FDO扩展(extension)中提供了执行PDO和FDO的指针。也就是说,它存储了设备对象指针,不需要系统创建新的设备对象。其初始化用Initialize的第二种形式完成。 合适的获取函数用IoGetDeviceProperty。 |
|
|