lanshy
驱动牛犊
驱动牛犊
  • 注册日期2004-06-30
  • 最后登录2005-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:924回复:5

fun driver A 如何挂到 fun driver B ?

楼主#
更多 发布于:2004-12-10 17:21
据我所知,一个Device可以有一个bus驱动程序,多个function驱动程序。我想知道,如何将fun driver A 的device_object挂到 fun driver B 的device_object ?

多谢!
我现在在搞SDK,但一心想做驱动编程、然后嵌入式编程、直到硬件编程 QQ:40102229
lanshy
驱动牛犊
驱动牛犊
  • 注册日期2004-06-30
  • 最后登录2005-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-10 17:23
filter drvier 的device_object是通过 fun driver的 inf 文件来指定的。 但不知道fun driver之间是如何挂钩的。
我现在在搞SDK,但一心想做驱动编程、然后嵌入式编程、直到硬件编程 QQ:40102229
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-10 18:08
你所知的不太正确。
应该是bus driver创建一个PDO,OS因此要求加载一个func driver
这个func driver一般创建一个device object作为FDO。
当然如果这个func driver又另外创建几个device oject,并且提供一些PNP的响应函数的话,这几个新的device object就可以作为PDO。这时候系统会要求用户再加载响应的func driver。

一个FDO上下都可以挂接若干个filter driver。
以上都是组成device stack的。
而这个stack以外的func driver可以通过ZwOpen的方式打开这个stack里边的FDO。

你看一看ddk的toaster例子,就会明白了。
有空给分哟!
lanshy
驱动牛犊
驱动牛犊
  • 注册日期2004-06-30
  • 最后登录2005-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-10 18:34
“如果这个func driver又另外创建几个device oject,并且提供一些PNP的响应函数的话,这几个新的device object就可以作为PDO”中

你所说的“又另外创建几个device oject”是在func driver里面多次调用IoCreateDevice()或相关函数来创建吗?

我明白了,是不是如果func driver只创建了一个device object,那么他就只能是FDO,不可能是PDO,对吗?
我现在在搞SDK,但一心想做驱动编程、然后嵌入式编程、直到硬件编程 QQ:40102229
lanshy
驱动牛犊
驱动牛犊
  • 注册日期2004-06-30
  • 最后登录2005-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-10 18:41
对了,就算是你说的这样,你也没有说 :

如果一个func driver创建了几个device object是并把他们当作PDO时,下面的function driver是如何跟这些device object 挂钩的?

我分先给你,你知道这个问题吗?希望你能说说!谢谢。
我现在在搞SDK,但一心想做驱动编程、然后嵌入式编程、直到硬件编程 QQ:40102229
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-13 09:17
你所说的“又另外创建几个device oject”是在func driver里面多次调用IoCreateDevice()或相关函数来创建吗?
-- 是,就是用IoCreateDevice

我明白了,是不是如果func driver只创建了一个device object,那么他就只能是FDO,不可能是PDO,对吗?
-- 一般来说是这样的。不过即使只有一个device object,如果他响应一些PnP操作,也就是PDO,而不是FDO。具体的你可以参考toaster例子里边的bus。对比一下pnp.c 和 buspdo.c。这个bus工程创建一个FDO和若干个PDO,它对这两类DO的PnP响应函数是不一样的。正因为这种差别,才会体现出哪个是PDO,哪个是FDO。我想源代码要比我这里干说更详细。

如果一个func driver创建了几个device object是并把他们当作PDO时,下面的function driver是如何跟这些device object 挂钩的?
-- 下层的function driver跟这些device object没有关系。只有上层的function driver跟这些device object有关系。OS只不过是把上层的function driver生成的FDO放到这些PDO的设备栈上。

以上只是我的个人理解。不保证完全正确。仅供参考。我的这些理解主要是阅读toaster下的bus, func, filter三个工程得来的。都是很简单的代码,没有任何硬件操作。我想你要是仔细阅读一周,这方面的问题恐怕要比我懂得都多了。:)

游客

返回顶部