birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1383回复:5

filemon驱动向应用程序通信一问

楼主#
更多 发布于:2004-07-13 10:07
应用程序向驱动通信很容易就看明白了,但是驱动向应用程序通信看了很久,只知道应用程序向驱动传入了一个缓冲区然后驱动向该缓冲写东西,但是写了之后好像没有任何提示,应用程序怎么知道何时该读数据了?LogRecord之后有向应用程序的提示吗?比如事件或消息。谢谢

最新喜欢:

poweruserpoweru...
zhangc98
驱动牛犊
驱动牛犊
  • 注册日期2002-03-30
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-14 19:38
LogRecord之后没有向应用程序的提示,
应用程序是定时向驱动程序发送IOCTL_FILEMON_GETSTATS命令来
查询缓冲区中是否有数据,如果有的话就把数据读入。

你所说的应用程序向驱动传入了一个缓冲区是什么意思阿?
共享缓冲区么?

至于驱动程序向应用程序通信,前面讨论过很多了,翻翻以前的帖子把:)
目前:新手上路; 目标:高级站友; 理想:开国大佬; 方法:自己的努力+大家的关照!
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-17 10:02
首先多谢回复!我说的缓冲就是OutputBuffer,我后来也估计是应用程序不停的查看该缓冲,驱动向应用程序通信我看的98驱动权威指南,不知道那些方法能否用于2000及以后。
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-17 11:00
美仔细看,应用程序应该是定时读取得
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
zhangc98
驱动牛犊
驱动牛犊
  • 注册日期2002-03-30
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-18 14:19
LogRecord的缓冲不仅仅是outbuffer那么简单,Filemon有一个类似于链表的结构(我只是大概看了看,或者根本就是一个链表),动态的分配适当的内存区域给驱动程序用来存储记录的Log信息。而应用程序通过发送IOCTL访问这个结构,如果缓冲区中有数据则读出,然后将相应的缓冲区释放。每次应用程序读的时候都把所有的缓冲区中的Log记录循环全部读出,所以这样对于内存的消耗是动态和高效的。
驱动程序主动和应用程序通信比较常用的方法是通过共享事件通知。
基本的步骤如下:
首先,应用程序CreateEvent一个Win32事件,通过IOCTL将其指针传递给驱动;
然后,驱动程序收到Win32事件指针之后,调用ObReferenceByPointer得到事件的句柄;
这样,应用程序可以启动一个线程调用WaitForSingleObject等待驱动层的通知,而驱动程序在需要时对事件KeSetEvent置位,应用程序中等待得线程就可以收到通知了。
目前:新手上路; 目标:高级站友; 理想:开国大佬; 方法:自己的努力+大家的关照!
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-19 21:05
thanks
游客

返回顶部