阅读:924回复:5
fun driver A 如何挂到 fun driver B ?
据我所知,一个Device可以有一个bus驱动程序,多个function驱动程序。我想知道,如何将fun driver A 的device_object挂到 fun driver B 的device_object ?
多谢! |
|
|
沙发#
发布于:2004-12-10 17:23
filter drvier 的device_object是通过 fun driver的 inf 文件来指定的。 但不知道fun driver之间是如何挂钩的。
|
|
|
板凳#
发布于: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例子,就会明白了。 有空给分哟! |
|
地板#
发布于:2004-12-10 18:34
“如果这个func driver又另外创建几个device oject,并且提供一些PNP的响应函数的话,这几个新的device object就可以作为PDO”中
你所说的“又另外创建几个device oject”是在func driver里面多次调用IoCreateDevice()或相关函数来创建吗? 我明白了,是不是如果func driver只创建了一个device object,那么他就只能是FDO,不可能是PDO,对吗? |
|
|
地下室#
发布于:2004-12-10 18:41
对了,就算是你说的这样,你也没有说 :
如果一个func driver创建了几个device object是并把他们当作PDO时,下面的function driver是如何跟这些device object 挂钩的? 我分先给你,你知道这个问题吗?希望你能说说!谢谢。 |
|
|
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三个工程得来的。都是很简单的代码,没有任何硬件操作。我想你要是仔细阅读一周,这方面的问题恐怕要比我懂得都多了。:) |
|