阅读:1841回复:9
请问过滤驱动程序和低层驱动程序是怎样连接的?
我看了一段代码,说过滤驱动程序Hifilter通过如下的方式连接到低层驱动Lodriver:
pDevExt->pTargetDevice = // downward pointer IoAttachDeviceToDeviceStack( pFilterDevObj, pdo); 这一段代码又是在AddDevice例程中的,pdo就是指的低层驱动设备驱动对象,而pdo是AddDevice的一个输入参数。 但是我在整个代码中都找不到低层驱动的名字Lodriver,为什么? 那系统怎样知道过滤驱动程序是要建立在Lodriver之上呢? |
|
最新喜欢:xhzxlq... |
沙发#
发布于:2002-05-17 10:20
我也感到奇怪,应该是在安装的时候指定的吧。
|
|
|
板凳#
发布于:2002-05-17 10:29
你去看看驱动程序分层实现和PNP实现流程。
|
|
|
地板#
发布于:2002-05-17 10:56
在ddk的例子都是
IoAttachDeviceToDeviceStack(filterDeviceObject, PhysicalDeviceObject); 而PhysicalDeviceObject是AddDevice的参数, 这种现象怎么解释? 谢谢,我太笨了。:( |
|
|
地下室#
发布于:2002-05-17 11:18
跟我一样,嘿嘿!前几天我还问呢,就是没人回答,可能都不屑回答。只是告诉你自己看书去………………
能找到我们还到这里问什么,难道回答这样简单的问题会影响自己的身份吗?等我成高手后就来踢你们的场子(呵呵,开玩笑)! 我也是刚学,可能是在inf 文件里指定,注册表里的class键估计与这个有关。 [Version] ;”CHICAGO”表示Win9x平台 Signature=\"$CHICAGO$\" ;所属类名 Class=HID ClassGUID={745a17a0-74d3-11d0-b6fe-00a0c90f57da} 说明这个驱动是在HId上面的,这是我自己的理解,不一定正确。因为我上次问也没人告诉我!!!!!:( |
|
|
5楼#
发布于:2002-05-17 12:39
是在inf里指定的
其实最终还是要写到注册表中 然后adddevice就知道怎样放到那个设备堆栈上了 你可以使用 http://www.driverdevelop.com/dlit.php?id=296 来安装一个过滤驱动 然后看看注册表中的变化,这样你就知道怎么样写inf了 你会发现指定的下层驱动的 另外,那个guid只是说明你要安装的设备的类别 你也可以自己生成一个得 |
|
|
6楼#
发布于:2002-05-17 13:04
PDO是根据注册表来确定的
|
|
7楼#
发布于:2002-05-17 19:27
总线驱动程序的一个任务就是枚举总线上的设备,并为每个设备创建一个PDO。一旦总线驱动程序检查到新硬件存在,PnP管理器就创建一个PDO,之后便开始描绘如图2-1所示的结构。
创建完PDO后,PnP管理器参照注册表中的信息查找与这个PDO相关的过滤器和功能驱动程序,它们出现在图的中部。系统安装程序负责添加这些注册表项,而驱动程序包中控制硬件安装的INF文件负责添加其它表项。这些表项定义了过滤器和功能驱动程序在堆栈中的次序。PnP管理器先装入最底层的过滤器驱动程序并调用其AddDevice函数。该函数创建一个FiDO,这样就在过滤器驱动程序和FiDO和之间建立了水平连接。然后,AddDevice把PDO连接到FiDO上,这就是设备对象之间连线的由来。PnP管理器继续向上执行,装入并调用每个低层过滤器、功能驱动程序、每个高层过滤器,直到完成整个堆栈。 |
|
8楼#
发布于:2002-05-18 10:43
说句题外话:
有没有比较两个注册表文件的变化的工具。比如我在安装驱动之前将注册表导出,安装以后想比较那些地方被改了。 |
|
|
9楼#
发布于:2002-05-18 15:16
to asmsys:
那一段话是在哪本书里的?图能否上载上来? |
|
|