阅读:2461回复:10
如何实现两个驱动程序之间的通信?
我是个刚刚入门的驱动程序新手,想问大家一下如何实现两个驱动程序之间的通信。比如DDK中的例子portio,我将portio改了改做成自己的portio1,并且将两个驱动程序都装入了系统,当应用程序由portio读数据时,我想让portio从portio1读,现在的问题有两个:
1,通信是不是要用IOCallDriver函数,在IRP中设定IRP_MJ_INTERNAL_DEVICE_CONTROL? 2,在一个驱动程序里如何取得另一个驱动程序的DeviceObject,用IOCreateDevice行吗? 谢谢大家! |
|
最新喜欢:Ice_Bi...
|
沙发#
发布于:2001-10-26 09:18
用IoGetDeviceObjectPointer可得到DeviceObject,具体可参考NTDDK里串口鼠标的例子。
|
|
板凳#
发布于:2001-10-26 09:23
还有,Driver之间通信也可以不通过IoCallDriver,也可参考WalterOney随书源码的Generic库的实现方法,EXPORT要被其它Driver调用的函数,当然,在调用这些函数前,得确保该Driver已经装载成功了。
|
|
地板#
发布于:2001-10-26 11:58
多谢lao_o,IoGetDeviceObjectPointer已经调用成功,IoCallDriver好像很复杂啊!Generic库的例子我也要参考一下,有什么还请多指教啊!
多谢! |
|
|
地下室#
发布于:2001-10-26 16:12
多谢归多谢,分还是得照给的。
|
|
5楼#
发布于:2001-10-29 14:12
按照WalterOney的Generic库的实现方法,EXPORT要被其它Driver调用的函数,也已经成功了。不过我们头儿说还是希望用IRP调用的方法,说这样就不必在一个Driver里追加导出函数了。最后估计还是得用IOCallDriver函数,它的参数可真复杂啊,哪里能有个例子啊?
To lao_o:怎么才能给分呢?我没找着。我这个问题还没完,到时候一定会给你分的。 多谢! |
|
|
6楼#
发布于:2001-10-30 11:10
很多地方都有例子啦!
对于IoCallDriver一般有两种处理方法:同步和异步。最简单的做法同步法:先初始化一个事件,调用IoCallDriver后,等待事件发生。 对于事件的初始化,如果是同步的IRP,可在初始化IRP时指定;如果是异步IRP,则需要另外初始化,并调用IoSetCompleteRoutine设置CompleteRoutine,在CompleteRoutine里SetEvent,如果IRP是Driver自己生成的,CompleteRoutine要返回STATUS_MORE_PROCESSING_REQUIRED。 具体可参考2000DDK的串口鼠标的驱动,里面有鼠标驱动调用串口驱动的代码。 |
|
7楼#
发布于:2001-10-30 20:44
大家说的真不错.
佩服! |
|
8楼#
发布于:2001-10-31 12:05
前面的人都说完了
|
|
9楼#
发布于:2004-01-09 17:27
有收获,多谢了!
|
|
10楼#
发布于:2004-01-15 12:48
\"WalterOney的Generic库的实现方法\"是怎样的实现?
|
|
|