square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1668回复:9

命名事件是怎么释放的?

楼主#
更多 发布于:2003-01-17 14:29
驱动程序用IoCreateNotificationEvent创建一个命名事件。
应用程序用OpenEvent打开这个命名事件,等待这些操作都正常进行。
不过当我关闭这个应用程序后,问题就来了。我再打开这个应用程序,再也打不开那个命名事件了,好像已经被释放。
哪位大侠可以解释以下了。谢谢了

[编辑 -  1/17/03 by  square]

[编辑 -  1/17/03 by  square]
xjaguar
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2003-01-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-17 14:59
Maybe you need explicitly reference the event in your driver
square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-17 19:41
试了以下调用ObReferenceObject这个函数,没有什么效果
应用程序一关掉。再也打不开那个事件了。

xjaguar
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2003-01-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-18 02:12
Use winobj to see whether your event object is still there
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-10 16:37
我也遇到了相同的问题。。。

有什么办法解决吗???
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2004-09-10 19:46
在驱动UNLOADER的时候再ZWCLOSE,OBDEREFERENCEOBJECT
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2004-09-10 19:48
还有事件最好在应用层创建,在驱动层打开,然后应用用句柄,驱动用指针进行通信.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-11 11:31

去年做的现在差不多都忘关了


好像是这个事件的创建是由应用程序调用驱动程序的接口创建,在应用程序退出后,这个事件就被释放了。

因此最好在驱动程序里面自己创建,这样应用程序就可以打开这个事件关闭后还可以继续打开。

不过创建这个事件驱动程序初始化的时候创建不能成功,得等到WIN32系统初始化完成后才能创建成功。那就不断的创建直到创建成功。

AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-12 12:11

去年做的现在差不多都忘关了


好像是这个事件的创建是由应用程序调用驱动程序的接口创建,在应用程序退出后,这个事件就被释放了。

因此最好在驱动程序里面自己创建,这样应用程序就可以打开这个事件关闭后还可以继续打开。

不过创建这个事件驱动程序初始化的时候创建不能成功,得等到WIN32系统初始化完成后才能创建成功。那就不断的创建直到创建成功。

 

创建不成功是指在boot过程中创建吗?比如驱动是自动加载的,在AddDevice或DriverEntry中不成功吗?如果是这样当然是正确的,因为哪个时候的命名空间还没有OK
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2004-09-13 11:03
正文
Q:
请问有什么方法实现驱动程序主动和应用程序进行实时通讯,而不用应用程序采用定时查询的方法?
比如驱动有一事件发生需要立即通知应用程序,或驱动程序需要向应用程序读取一些内容.

A:
有一个很容易的方式,在驱动程序和应用程序之间用一个事件。
在应用程序CreateFile的时候,驱动程序IoCreateSynchronizationEvent一个有名的事件,然后应用程序CreateEvent/OpenEvent此有名事件即可。
注意点:
1,不要在驱动初始化的时候创建事件,此时大多不能成功创建;
2,让驱动先创建,那么此后应用程序打开时,只能读(Waitxxxx),不能写(SetEvent/ResetEvent)。反之,如果应用程序先创建,则应用程序和驱动程序都有读写权限;
3,用名字比较理想,注意驱动中名字在\BaseNamedObjects\下,例如应用程序用“xxxEvent”,那么驱动中就是“\BaseNamedObjects\xxxEvent”;
4,用HANDLE的方式也可以,但是在WIN98下是否可行,未知。
5,此后,驱动对读请求应立即返回,否则就返回失败。不然将失去用事件通知的意义(不再等待读完成,而是有需要(通知事件)时才会读);
6,应用程序发现有事件,应该在一个循环中读取,直到读取失败,表明没有数据可读;否则会漏掉后续数据,而没有及时读取;
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部