阅读:1793回复:13
怎么在windows驱动程序中引用调用另外一个驱动程序。
这两个驱动没有直接关系,只是需要发送通信。被调用的驱动没有设备接口,只有符号连接。在应用程序中我只要createfile(符号连接)就可以打开,进行调用。但是在另外一个驱动程序中怎么使用。谢谢!
|
|
沙发#
发布于:2005-05-08 14:47
IoGetDeviceObjectPointer()
|
|
板凳#
发布于:2005-05-08 15:15
IoGetDeviceObjectPointer() 我开始也是想用这个函数,IoGetDeviceObjectPointer,但是很多资料说他会把驱动叠加在被调用的驱动之上,msdn也含糊不清,说得很模糊,事实会不会?msdn的几个地方的说明有点前后不太一致。我只是向那个驱动发送iocontrol或者读写调用。 [编辑 - 5/8/05 by zealsoft_zhu] |
|
地板#
发布于:2005-05-08 15:18
[quote]IoGetDeviceObjectPointer() 我开始也是想用这个函数,IoGetDeviceObjectPointer,但是很多资料说他会把驱动叠加在被调用的驱动之上,msdn也含糊不清,说得很模糊,事实会不会?msdn的几个地方的说明有点前后不太一致。我只是向那个驱动发送iocontrol或者读写调用。 [编辑 - 5/8/05 by zealsoft_zhu] [/quote] 不会,因为驱动程序并不关心Originator是谁,是另外一个驱动,还是I/O Manager,都无所谓 |
|
|
地下室#
发布于:2005-05-09 11:47
我觉得应该是要创建个设备挂到目标对象上的,不然的话,构造的IRP,处理好后如何释放??
|
|
|
5楼#
发布于:2005-05-09 12:24
我觉得应该是要创建个设备挂到目标对象上的,不然的话,构造的IRP,处理好后如何释放?? :o 完成例程不是骗骗人就算了的 :D |
|
6楼#
发布于:2005-05-10 09:49
我觉得应该是要创建个设备挂到目标对象上的,不然的话,构造的IRP,处理好后如何释放?? wowocock 大侠,怎么创建一个设备挂到目标对象上?ZwCreateFile(对象)?是吗?我不会,谢谢大侠回答 |
|
7楼#
发布于:2005-05-10 16:56
IoGetDeviceObjectPointer() 我想问各位大侠,就是IoGetDeviceObjectPointer这个函数返回两个指针,其中一个是fileobject,一个是deviceobject,然后我发现很多人引用deviceoject的时候都是这样引用的,fileobject->deviceobject,为什么不直接引用IoGetDeviceObjectPointer函数返回的deviceobject?我测试了一下,发现deviceobject和fileobject->deviceobject这两个值是相等的。为什么? |
|
8楼#
发布于:2005-05-10 16:59
我想给分给KMK大侠,请问一下怎么给分?谢谢
|
|
9楼#
发布于:2005-05-10 22:40
[quote]我觉得应该是要创建个设备挂到目标对象上的,不然的话,构造的IRP,处理好后如何释放?? :o 完成例程不是骗骗人就算了的 :D [/quote] 在完成例程中释放,,,,高,,, :D |
|
|
10楼#
发布于:2005-05-11 09:18
[quote]我觉得应该是要创建个设备挂到目标对象上的,不然的话,构造的IRP,处理好后如何释放?? wowocock 大侠,怎么创建一个设备挂到目标对象上?ZwCreateFile(对象)?是吗?我不会,谢谢大侠回答 [/quote] 没看懂arthurtu老大的帖子?在驱动调用IoCompleteRequest后,其实就通知I/O Manager释放IRP,而不管它来自哪里,但IRP可能还不会立即消失,因为,OS一般都有懒病,但驱动绝对不要再碰它了 |
|
|
11楼#
发布于:2005-05-11 09:27
[quote]IoGetDeviceObjectPointer() 我想问各位大侠,就是IoGetDeviceObjectPointer这个函数返回两个指针,其中一个是fileobject,一个是deviceobject,然后我发现很多人引用deviceoject的时候都是这样引用的,fileobject->deviceobject,为什么不直接引用IoGetDeviceObjectPointer函数返回的deviceobject?我测试了一下,发现deviceobject和fileobject->deviceobject这两个值是相等的。为什么? [/quote] 也可以,不过fileobject提供更多的内涵 |
|
|
12楼#
发布于:2005-05-12 02:40
你发的贴上有给分键 !!
|
|
13楼#
发布于:2005-05-12 09:37
没看懂arthurtu老大的帖子?在驱动调用IoCompleteRequest后,其实就通知I/O Manager释放IRP,而不管它来自哪里,但IRP可能还不会立即消失,因为,OS一般都有懒病,但驱动绝对不要再碰它了 作为接收者,当然是这样啦。 但是如果你自己的驱动构造一个irp发给其他驱动,要么同步的处理,等处理完然后freeirp,要么异步处理,这个时候据要靠完成例程来做善后工作了 |
|