Ice@P
驱动牛犊
驱动牛犊
  • 注册日期2002-12-09
  • 最后登录2003-10-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1381回复:5

100分!求下面过滤驱动和应用程序通讯的解决方法!

楼主#
更多 发布于:2002-12-12 19:30
过滤驱动程序截取到一个其他应用程序的读写IRP,获得IRP里面的数据,然后需要管理程序(WIN32应用程序)来处理这些数据,处理完之后,驱动程序根据不同的处理结果进行不同的操作。
需要做的工作大致如下:

1.过滤驱动将数据发给管理程序。然后等待。(或者是挂起IRP)

2.管理程序取得数据,进行处理,后将处理结果送回驱动程序。

3.驱动程序获得管理程序送来的处理结果,从等待中激活(取出挂起的IRP),然后进行1步没有完成的工作。

4.最难的就是,在进行1,2,3步处理的过程中,驱动不能截取其他的IRP,否则原来1步的IRP没有处理完

,又有新的IRP要处理。肯定乱!


偶试过用两个EVENT+驱动、应用程序共享内存来实现(水平太低没有搞定:))。

有没有其他的方法?

有没有哪位大佬出出手,帮帮俺。

给个思路都好啊。。。。。。

绝对给分,分数不够另开帖子给!

PS:我不是有292分嘛,怎么最大只能20分啊?
认认真真过一生
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-12-12 22:42
通信用一个事件加消息队列就可以。
你在处理IRP时可以自己将它以队列的形式保存,只要处理好IRP序列,就可以同时截获多个IRP
易水
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-13 00:07

这里问题可以这么解决:

 你建立两个独立的队列,
一个队列保存你的驱动程序拦截到的请求。
一个队列保存下面的驱动程序完成的请求。
 或者你用一个队列也可以。
总之,你要把,请求的开始,和请求的完成当成两个事件来处理
就可以了。
      
 

  
Ice@P
驱动牛犊
驱动牛犊
  • 注册日期2002-12-09
  • 最后登录2003-10-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-13 09:11
能不能说详细点irp队列到底怎么做?

给分先
认认真真过一生
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-13 10:46
这种队列就比较简单了,
 你可以用任何方法来做,
  最简单的是 一个自旋锁 加上一个 数组 ,读写指针,空满标志。
  复杂的就是ExInterlocked****List 了。
 你在做什么?
  过滤器?
  杀毒的?


  
Ice@P
驱动牛犊
驱动牛犊
  • 注册日期2002-12-09
  • 最后登录2003-10-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-13 14:51
自己做着玩的,就是想做个类似于杀毒软件的东东,谢谢
有问题还要你继续帮忙哦, :D

怎么没有给分的按钮啊? : :mad: :mad:



[编辑 -  12/13/02 by  Ice@P]
认认真真过一生
游客

返回顶部