ganer
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2004-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2249回复:2

class KPnpLowerDevice 和KPnpDevice什么关系?

楼主#
更多 发布于:2002-05-04 01:21
如题!
好好学习,天天向上!
ganer
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2004-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-04 17:43
看来定义KPnpLowerDevice m_Lower是为了通过m_Lower.Initialize(this, Pdo);和KPciConfiguration PciConfig(m_Lower.TopOfStack())获取PCI的配置,为何一定要通过这样的做法???
定义KPnpDevice类不行么?
好好学习,天天向上!
ganer
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2004-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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。
好好学习,天天向上!
游客

返回顶部