兄弟,再举个例子,如:我在一个驱动程序中建立了两个设备对象,一个是串口过滤设备对象,其挂在系统原有的串口驱动上,又建立一个普通的设备对象,它没挂到任何设备上,只是准备与应用程序通讯时使用.
监视串口时是这样实现的.在驱动程序中有DriverObject->MajorFunction[IRP_MJ_READ] = ComSpy_Read等派遣例程;
当针对串口过滤设备对象的IRP_MJ_READ来时,其调用ComSpy_Read,在这个函数中将数据写入了一个队列结构中,然后向应用程序发event告知监听数据,应用程序这时是打开的普通的设备对象,收到event后,使用ReadFile来对普通的设备对象发送IRP_MJ_READ,其也调用ComSpy_Read,在这个函数中它从队列结构中读刚才监到的数据.(注:这是个德国佬的程序,已实现并可用).
我现在迷糊的是,驱动开发中的一些基础知识,也就是上面提到的,是不是一个驱动中建立的多个对象,当相同IRP_MJ_READ请求,都是调用驱动程序所写的ComSpy_Read这样的同一个函数.
(注:从网上得知,驱动程序对象通常有多个与它相关的设备对象,因此它利用DeviceObject指针指向一个设备对象列表,该列表表示驱动程序可以控制的物理设备。是不是这些与它相关的设备对象当IRP_MJ_READ请求时,都调用调用驱动程序所写的ComSpy_Read这样的同一个函数)
|