阅读:2166回复:3
一个驱动程序中是不是可以建立多个设备对象,而这些设备对象是不是共用相同的派遣例程?
抛开实际应用,是不是可以这样理解,在一个驱动程序中无论建立几个设备对象,也不论其中设备对象是否挂接在什么设备上或没挂,当相同的IRP请求到来时,都会调用驱动程序同一个派遣例程.如:我建了一个串口过滤对象,一个磁盘过滤对象,一个独立的设备对象,当IRP_MJ_READ请求到来时,这些对象都会调用我自己指定的ComSpy_Read回调函数对吗?(前提是ComSpy_Read可重入).
不知道我理解的对不对! |
|
沙发#
发布于:2009-07-25 10:37
错误
|
|
板凳#
发布于:2009-08-03 21:32
同问
|
|
地板#
发布于:2009-08-04 19:27
楼主,正是如此,每个设备对象都有一个 _DRIVER_OBJECT 指针栏位,当你创建一个设备对象的时候会填入一个 _DRIVER_OBJECT 指针,这个指针将会存储在你即将创建的这个 DeviceObject 的 _DRIVER_OBJECT 指针栏位里。
一旦要向这个设备对象发送 IRP 的时候,就会用其 _DRIVER_OBJECT 指针栏位作为查找 Dispatch routine 的依据。 所以楼主的观点是对的,那么在同一个 Dispatch routine 里怎么去区分到底这个 IRP 是发给谁的呢?这就需要编写这个 Driver 的人自已去处理了,有很多方法,较常用的方法是在创建每个设备对象时都指定一个设备对象扩展 (DeviceExtension),然后在这个 DeviceExtension 里设置一个栏位 Flag,每个设备对象存不一样的值,然后你进行 switch case。 |
|