zaphon
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2002-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1841回复:9

请问过滤驱动程序和低层驱动程序是怎样连接的?

楼主#
更多 发布于:2002-03-21 22:36
我看了一段代码,说过滤驱动程序Hifilter通过如下的方式连接到低层驱动Lodriver:
pDevExt->pTargetDevice = // downward pointer
IoAttachDeviceToDeviceStack( pFilterDevObj, pdo);

这一段代码又是在AddDevice例程中的,pdo就是指的低层驱动设备驱动对象,而pdo是AddDevice的一个输入参数。

但是我在整个代码中都找不到低层驱动的名字Lodriver,为什么?
那系统怎样知道过滤驱动程序是要建立在Lodriver之上呢?

最新喜欢:

xhzxlqtxhzxlq...
sureman
驱动牛犊
驱动牛犊
  • 注册日期2001-08-22
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望27点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-17 10:20
我也感到奇怪,应该是在安装的时候指定的吧。
★人生没有失败,只有粉碎!★
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-17 10:29
你去看看驱动程序分层实现和PNP实现流程。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
sureman
驱动牛犊
驱动牛犊
  • 注册日期2001-08-22
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望27点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-17 10:56
在ddk的例子都是
IoAttachDeviceToDeviceStack(filterDeviceObject, PhysicalDeviceObject);
而PhysicalDeviceObject是AddDevice的参数,
这种现象怎么解释?

谢谢,我太笨了。:(
★人生没有失败,只有粉碎!★
Cuick
驱动牛犊
驱动牛犊
  • 注册日期2002-04-30
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-17 11:18
跟我一样,嘿嘿!前几天我还问呢,就是没人回答,可能都不屑回答。只是告诉你自己看书去………………
能找到我们还到这里问什么,难道回答这样简单的问题会影响自己的身份吗?等我成高手后就来踢你们的场子(呵呵,开玩笑)!
我也是刚学,可能是在inf 文件里指定,注册表里的class键估计与这个有关。
[Version]
;”CHICAGO”表示Win9x平台
Signature=\"$CHICAGO$\"
;所属类名
Class=HID
ClassGUID={745a17a0-74d3-11d0-b6fe-00a0c90f57da}

说明这个驱动是在HId上面的,这是我自己的理解,不一定正确。因为我上次问也没人告诉我!!!!!:(
百芳园里欲独艳, 万艳丛中却自芳。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-17 12:39
是在inf里指定的
其实最终还是要写到注册表中
然后adddevice就知道怎样放到那个设备堆栈上了
你可以使用
http://www.driverdevelop.com/dlit.php?id=296
来安装一个过滤驱动
然后看看注册表中的变化,这样你就知道怎么样写inf了
你会发现指定的下层驱动的

另外,那个guid只是说明你要安装的设备的类别
你也可以自己生成一个得
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-17 13:04
PDO是根据注册表来确定的
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-17 19:27
总线驱动程序的一个任务就是枚举总线上的设备,并为每个设备创建一个PDO。一旦总线驱动程序检查到新硬件存在,PnP管理器就创建一个PDO,之后便开始描绘如图2-1所示的结构。

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

JackyWu
驱动小牛
驱动小牛
  • 注册日期2001-10-25
  • 最后登录2011-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-18 10:43
说句题外话:
有没有比较两个注册表文件的变化的工具。比如我在安装驱动之前将注册表导出,安装以后想比较那些地方被改了。
多年以后,我又回来了。
sureman
驱动牛犊
驱动牛犊
  • 注册日期2001-08-22
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望27点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-18 15:16
to asmsys:
那一段话是在哪本书里的?图能否上载上来?
★人生没有失败,只有粉碎!★
游客

返回顶部