quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3637回复:23

再问应用程序和驱动程序通讯(100分)

楼主#
更多 发布于:2002-12-11 15:14
应用程序和驱动程序通讯的方法已经有很多种了,但是我现在要求判断是否过滤由应用程序来做,然后应用程序再返回是否过滤的结果给驱动。如果要实现以上功能,我该怎么办?谢谢!
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-11 15:15
你用那种驱动?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
activei
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-11 15:18
对呀,不过可能会很费事也,不如在应用上做控制就行了
路在脚下
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-11 15:21
这样要在应用层和核心转两个圈才能完成一次操作,太费时间了吧
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-11 15:23
这样要在应用层和核心转两个圈才能完成一次操作,太费时间了吧


因为我的过滤规则比较复杂,他不是像防火墙那样的一些简单规则,我的过滤有点像ids,所以。。。
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-11 15:24
你用那种驱动?


tdi或者是ndis hook
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-11 15:24
对呀,不过可能会很费事也,不如在应用上做控制就行了


说说看,如何做?
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-11 15:30
在驱动里面注册一个设备,然后在应用程序里面打开设备,通过deviceiocontrol来和驱动程序通信,交换数据
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-11 15:33
VXD不用注册设备,
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-11 15:43
在驱动里面注册一个设备,然后在应用程序里面打开设备,通过deviceiocontrol来和驱动程序通信,交换数据


我要求做到的是驱动程序主动与应用程序通讯,并且应用程序能有返回值给驱动
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-11 16:07
你看这个能否满足你的要求:
http://www.driverdevelop.com/forum/viewthread.php?tid=4117
生命驱动,活力无限!
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-11 16:28
你看这个能否满足你的要求:
http://www.driverdevelop.com/forum/viewthread.php?tid=4117


她似乎并没有解决,驱动等待应用程序返回结果的问题。
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-11 16:38
应用程序调用DeviceIoControl,向Driver通知对话框结果

这句不是吗?你说的等待是什么意思?
生命驱动,活力无限!
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-12-11 16:47
应用程序调用DeviceIoControl,向Driver通知对话框结果

这句不是吗?你说的等待是什么意思?


意思就是:
第三步:Driver通过Overlapped事件通知应用程序。
第三步后,driver阻塞,等待应用程序的结果。
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-12-11 16:50
用WaitForSingleObject()阻塞不就行了。
生命驱动,活力无限!
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-12-11 17:06
有三种解决办法
1. 应用程序使用异步deviceiocontrol调用,驱动先pending改irp然后返回,然后应用程序再Wait Overlap的event触发,当驱动需要发消息给应用程序时只需要CompleteIrp即可,这就是楼上的那种方法
2. 应用程序先初始化一个Handle为Event(InitializeEnvent),然后在一开始将该Handle传递到驱动,驱动得到该Handle后可以使用ObRefrenceObjectByHandle获得内核Event,此后应用程序和驱动就可以利用该Event来通讯,即应用程序不断的WaitforsingleObject,而驱动则在需要时触发该Event。该方法的优点是可以反复使用
3. 可以参考passthru中附带的例子,notifyob,它是一个钩子程序(dll),可以在应用程序和驱动之间通讯,这样可以做更复杂的事。
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-12-11 18:25
有三种解决办法
1. 应用程序使用异步deviceiocontrol调用,驱动先pending改irp然后返回,然后应用程序再Wait Overlap的event触发,当驱动需要发消息给应用程序时只需要CompleteIrp即可,这就是楼上的那种方法
2. 应用程序先初始化一个Handle为Event(InitializeEnvent),然后在一开始将该Handle传递到驱动,驱动得到该Handle后可以使用ObRefrenceObjectByHandle获得内核Event,此后应用程序和驱动就可以利用该Event来通讯,即应用程序不断的WaitforsingleObject,而驱动则在需要时触发该Event。该方法的优点是可以反复使用
3. 可以参考passthru中附带的例子,notifyob,它是一个钩子程序(dll),可以在应用程序和驱动之间通讯,这样可以做更复杂的事。


只用过第一种。 :(
[color=red]大头鬼! :P[/color]
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-12-11 19:22

用事件不错
但是不能传参数,而且每并发的时候要多个事件句柄

如果你只有一种情况的话,还是事件好
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
soliseaman
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2002-12-11 20:50
应用程序和驱动程序通讯的方法已经有很多种了,但是我现在要求判断是否过滤由应用程序来做,然后应用程序再返回是否过滤的结果给驱动。如果要实现以上功能,我该怎么办?谢谢!


我也曾经有这样的想法,可是当接收数据时中断级别太高,根本不能等待怎么办呢?
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-12-15 11:03
无论怎么样都需要应用程序首先和驱动程序接触一下了。其实只要你的应用程序首先和驱动接触就没问题了。但驱动中不要老想让它去等待应用程序,他的级别太高。
这样怎么样?
1)应用程序向驱动抛媚眼,提供访问信息。
2)驱动接到包,入队,然后给应用程序信息,应用程序判断。
3)应用程序根据判断结果触发DeviceIoControl来决定是否丢包。
这样也要绕两个来回,应该挺费时间的。其实有异步用对列还是很好的。
好运!!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
上一页
游客

返回顶部