阅读:1381回复:5
100分!求下面过滤驱动和应用程序通讯的解决方法!
过滤驱动程序截取到一个其他应用程序的读写IRP,获得IRP里面的数据,然后需要管理程序(WIN32应用程序)来处理这些数据,处理完之后,驱动程序根据不同的处理结果进行不同的操作。
需要做的工作大致如下: 1.过滤驱动将数据发给管理程序。然后等待。(或者是挂起IRP) 2.管理程序取得数据,进行处理,后将处理结果送回驱动程序。 3.驱动程序获得管理程序送来的处理结果,从等待中激活(取出挂起的IRP),然后进行1步没有完成的工作。 4.最难的就是,在进行1,2,3步处理的过程中,驱动不能截取其他的IRP,否则原来1步的IRP没有处理完 ,又有新的IRP要处理。肯定乱! 偶试过用两个EVENT+驱动、应用程序共享内存来实现(水平太低没有搞定:))。 有没有其他的方法? 有没有哪位大佬出出手,帮帮俺。 给个思路都好啊。。。。。。 绝对给分,分数不够另开帖子给! PS:我不是有292分嘛,怎么最大只能20分啊? |
|
|
沙发#
发布于:2002-12-12 22:42
通信用一个事件加消息队列就可以。
你在处理IRP时可以自己将它以队列的形式保存,只要处理好IRP序列,就可以同时截获多个IRP |
|
|
板凳#
发布于:2002-12-13 00:07
这里问题可以这么解决: 你建立两个独立的队列, 一个队列保存你的驱动程序拦截到的请求。 一个队列保存下面的驱动程序完成的请求。 或者你用一个队列也可以。 总之,你要把,请求的开始,和请求的完成当成两个事件来处理 就可以了。 |
|
地板#
发布于:2002-12-13 09:11
能不能说详细点irp队列到底怎么做?
给分先 |
|
|
地下室#
发布于:2002-12-13 10:46
这种队列就比较简单了,
你可以用任何方法来做, 最简单的是 一个自旋锁 加上一个 数组 ,读写指针,空满标志。 复杂的就是ExInterlocked****List 了。 你在做什么? 过滤器? 杀毒的? |
|
5楼#
发布于:2002-12-13 14:51
自己做着玩的,就是想做个类似于杀毒软件的东东,谢谢
有问题还要你继续帮忙哦, :D 怎么没有给分的按钮啊? : :mad: :mad: [编辑 - 12/13/02 by Ice@P] |
|
|