Yoshio
驱动牛犊
驱动牛犊
  • 注册日期2001-10-25
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2459回复:10

如何实现两个驱动程序之间的通信?

楼主#
更多 发布于:2001-10-26 09:12
我是个刚刚入门的驱动程序新手,想问大家一下如何实现两个驱动程序之间的通信。比如DDK中的例子portio,我将portio改了改做成自己的portio1,并且将两个驱动程序都装入了系统,当应用程序由portio读数据时,我想让portio从portio1读,现在的问题有两个:
1,通信是不是要用IOCallDriver函数,在IRP中设定IRP_MJ_INTERNAL_DEVICE_CONTROL?
2,在一个驱动程序里如何取得另一个驱动程序的DeviceObject,用IOCreateDevice行吗?

谢谢大家!

最新喜欢:

Ice_BinIce_Bi...
Yoshio
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-26 09:18
用IoGetDeviceObjectPointer可得到DeviceObject,具体可参考NTDDK里串口鼠标的例子。
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-26 09:23
还有,Driver之间通信也可以不通过IoCallDriver,也可参考WalterOney随书源码的Generic库的实现方法,EXPORT要被其它Driver调用的函数,当然,在调用这些函数前,得确保该Driver已经装载成功了。
Yoshio
驱动牛犊
驱动牛犊
  • 注册日期2001-10-25
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-26 11:58
多谢lao_o,IoGetDeviceObjectPointer已经调用成功,IoCallDriver好像很复杂啊!Generic库的例子我也要参考一下,有什么还请多指教啊!
多谢!
Yoshio
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-26 16:12
多谢归多谢,分还是得照给的。
Yoshio
驱动牛犊
驱动牛犊
  • 注册日期2001-10-25
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-29 14:12
按照WalterOney的Generic库的实现方法,EXPORT要被其它Driver调用的函数,也已经成功了。不过我们头儿说还是希望用IRP调用的方法,说这样就不必在一个Driver里追加导出函数了。最后估计还是得用IOCallDriver函数,它的参数可真复杂啊,哪里能有个例子啊?

To lao_o:怎么才能给分呢?我没找着。我这个问题还没完,到时候一定会给你分的。

多谢!
Yoshio
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-30 11:10
很多地方都有例子啦!
对于IoCallDriver一般有两种处理方法:同步和异步。最简单的做法同步法:先初始化一个事件,调用IoCallDriver后,等待事件发生。
对于事件的初始化,如果是同步的IRP,可在初始化IRP时指定;如果是异步IRP,则需要另外初始化,并调用IoSetCompleteRoutine设置CompleteRoutine,在CompleteRoutine里SetEvent,如果IRP是Driver自己生成的,CompleteRoutine要返回STATUS_MORE_PROCESSING_REQUIRED。
具体可参考2000DDK的串口鼠标的驱动,里面有鼠标驱动调用串口驱动的代码。
gxzbme
驱动牛犊
驱动牛犊
  • 注册日期2001-08-09
  • 最后登录2006-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-10-30 20:44
大家说的真不错.
佩服!
z_j_cd
驱动中牛
驱动中牛
  • 注册日期2001-09-13
  • 最后登录2012-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-10-31 12:05
前面的人都说完了
tangwise
驱动牛犊
驱动牛犊
  • 注册日期2003-11-06
  • 最后登录2007-06-12
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-09 17:27
有收获,多谢了!
reersal
驱动牛犊
驱动牛犊
  • 注册日期2004-01-15
  • 最后登录2004-02-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-01-15 12:48
\"WalterOney的Generic库的实现方法\"是怎样的实现?
程序员就是类工厂.
游客

返回顶部