阅读:3635回复:23
再问应用程序和驱动程序通讯(100分)
应用程序和驱动程序通讯的方法已经有很多种了,但是我现在要求判断是否过滤由应用程序来做,然后应用程序再返回是否过滤的结果给驱动。如果要实现以上功能,我该怎么办?谢谢!
|
|
|
沙发#
发布于:2002-12-11 15:15
你用那种驱动?
|
|
|
板凳#
发布于:2002-12-11 15:18
对呀,不过可能会很费事也,不如在应用上做控制就行了
|
|
|
地板#
发布于:2002-12-11 15:21
这样要在应用层和核心转两个圈才能完成一次操作,太费时间了吧
|
|
|
地下室#
发布于:2002-12-11 15:23
这样要在应用层和核心转两个圈才能完成一次操作,太费时间了吧 因为我的过滤规则比较复杂,他不是像防火墙那样的一些简单规则,我的过滤有点像ids,所以。。。 |
|
|
5楼#
发布于:2002-12-11 15:24
你用那种驱动? tdi或者是ndis hook |
|
|
6楼#
发布于:2002-12-11 15:24
对呀,不过可能会很费事也,不如在应用上做控制就行了 说说看,如何做? |
|
|
7楼#
发布于:2002-12-11 15:30
在驱动里面注册一个设备,然后在应用程序里面打开设备,通过deviceiocontrol来和驱动程序通信,交换数据
|
|
|
8楼#
发布于:2002-12-11 15:33
VXD不用注册设备,
|
|
|
9楼#
发布于:2002-12-11 15:43
在驱动里面注册一个设备,然后在应用程序里面打开设备,通过deviceiocontrol来和驱动程序通信,交换数据 我要求做到的是驱动程序主动与应用程序通讯,并且应用程序能有返回值给驱动 |
|
|
10楼#
发布于:2002-12-11 16:07
你看这个能否满足你的要求:
http://www.driverdevelop.com/forum/viewthread.php?tid=4117 |
|
|
11楼#
发布于:2002-12-11 16:28
你看这个能否满足你的要求: 她似乎并没有解决,驱动等待应用程序返回结果的问题。 |
|
|
12楼#
发布于:2002-12-11 16:38
应用程序调用DeviceIoControl,向Driver通知对话框结果
这句不是吗?你说的等待是什么意思? |
|
|
13楼#
发布于:2002-12-11 16:47
应用程序调用DeviceIoControl,向Driver通知对话框结果 意思就是: 第三步:Driver通过Overlapped事件通知应用程序。 第三步后,driver阻塞,等待应用程序的结果。 |
|
|
14楼#
发布于:2002-12-11 16:50
用WaitForSingleObject()阻塞不就行了。
|
|
|
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),可以在应用程序和驱动之间通讯,这样可以做更复杂的事。 |
|
16楼#
发布于:2002-12-11 18:25
有三种解决办法 只用过第一种。 :( |
|
|
17楼#
发布于:2002-12-11 19:22
用事件不错 但是不能传参数,而且每并发的时候要多个事件句柄 如果你只有一种情况的话,还是事件好 |
|
|
18楼#
发布于:2002-12-11 20:50
应用程序和驱动程序通讯的方法已经有很多种了,但是我现在要求判断是否过滤由应用程序来做,然后应用程序再返回是否过滤的结果给驱动。如果要实现以上功能,我该怎么办?谢谢! 我也曾经有这样的想法,可是当接收数据时中断级别太高,根本不能等待怎么办呢? |
|
19楼#
发布于:2002-12-15 11:03
无论怎么样都需要应用程序首先和驱动程序接触一下了。其实只要你的应用程序首先和驱动接触就没问题了。但驱动中不要老想让它去等待应用程序,他的级别太高。
这样怎么样? 1)应用程序向驱动抛媚眼,提供访问信息。 2)驱动接到包,入队,然后给应用程序信息,应用程序判断。 3)应用程序根据判断结果触发DeviceIoControl来决定是否丢包。 这样也要绕两个来回,应该挺费时间的。其实有异步用对列还是很好的。 好运!! |
|
|
上一页
下一页