阅读:2381回复:9
过程是这样的吗?IO管理器通过IRP找到第一个device object.....
IO管理器通过IRP找到第一个device object,在通过它找相应的驱动程序,以及设备对象堆栈中的下一个对象, 这个“下一个”该不会是放在next device 域中吧,要是的话,如果一个驱动程序支持两个但不属于同一个设备对象堆栈中的设备,这种的“下一个”该放在那呢?
|
|
最新喜欢:baoyib... |
沙发#
发布于:2001-12-03 16:52
NextDevice域和设备栈没什么关系吧
|
|
|
板凳#
发布于:2001-12-03 17:07
是不是一个设备的多个(层)驱动和多个相同或相似设备使用同一个驱动程序的区别?
|
|
地板#
发布于:2001-12-04 14:22
IO管理器通过IRP找到第一个device object,在通过它找相应的驱动程序,以及设备对象堆栈中的下一个对象, 这个“下一个”该不会是放在next device 域中吧,要是的话,如果一个驱动程序支持两个但不属于同一个设备对象堆栈中的设备,这种的“下一个”该放在那呢? 老兄: 到底是:鸡生蛋,还是蛋生鸡? 你的理解不对阿!! 设备站到底是如何形成的,你可以看一下cant的书等你理解了这个问题,你就会明白irp,fdo,之间的关系的。 |
|
地下室#
发布于:2001-12-04 21:50
在设备对象结构里,NEXTDEVICE指向的是驱动程序在创建该设备对象之前最近创建的的设备对象,如果该驱动程序只创建了一个设备对象,那么该值指向为NULL,在低层,系统就是通过设备的所属的驱动找到处理该IRP的处理函数的入口的
|
|
5楼#
发布于:2001-12-04 21:53
对于NDIS我就不太清楚了!不知道跟偶所说是不是一致呢,请那位高人补充
|
|
6楼#
发布于:2001-12-06 11:33
首先是根总线驱动程序枚举各个总线驱动,然后总线驱动去枚举挂在总线上的设备,如果发现设备会创建相应的pdo并载入驱动程序(如果驱动已经载入,会调用相应的adddevice例程),至于是哪个驱动程序和各个驱动(fdo,fido)的位置都是从注册表中得知
在ndis中不会直接去处理irp |
|
|
7楼#
发布于:2001-12-07 21:31
to jeosph:
引用: -------------------------------------------------------------------------------- 你的理解不对阿!! 设备站到底是如何形成的,你可以看一下cant的书等你理解了这个问题,你就会明白irp,fdo,之间的关系的。 -------------------------------------------------------------------------------- 是哪本书呀?在哪里能找到,谢谢 多谢各位指点 |
|
8楼#
发布于:2001-12-07 21:52
cant 的书是指机械工业出版社的《windows wdm设备驱动程序开发指南》
另:to jyy: 我认为这“下一个”是指放在设备对象扩展中的NextDevice(设备对象扩展是自己定义的,一般都有相似功能的一个member),至于你说的当一个驱动对应多个设备时,那么设备驱动对象(DriverObject)只有一个,但是设备对象(DeviceObject)却有多个。每次加载新设备时都调用DriverEntry中曾定义过的AddDevice,从而形成多个设备对象,同时就是在这个例程中对每个设备对象扩展中的NextDevice进行付值。 |
|
9楼#
发布于:2001-12-08 12:31
的),这个NextDevice是指使用同一驱动程序的下一个设备,它们形成了一个设备链,这个链的头部在驱动对象的DeviceObject中。
具体的你可以看一下Walter Oney的书,本站有它的中译本。 |
|