beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1249回复:9

版主你怎么解决的?

楼主#
更多 发布于:2002-07-03 08:53
我在内核创建了命名事件对象,然后在应用程序右试图用OpenEvent得到其句柄,失败。
相关代码如下:
驱动程序端:
WCHAR wEventNameBuf[]=L\"\\\\BaseNamedObjects\\\\SharedEvent\";
UNICODE_STRING uEventName;
PKEVENT pEvent;
HANDLE hEvent;

RtlInitUnicode(&uEventName,wEventNameBuf);

pEvent = IoCreateNotificationEvent(&uEventName,&hEvent);
if( !pEvent )
return FALSE;


应用程序端:
TCHAR EventName[]=_T(\"SharedEvent\");
HANDLE hEvent;
hEvent = OpEvent(EVENT_ALL_ACCESS,FALSE,EventName);

返回总是失败,为什么? EVENT_ALL_ACCESS换成SYNCHRONIZE就可以了。但是ReSetEvent()就不行了。如何等待下一个事件的触发呢?

只要能解决问题,就一定给分。 希望高手赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-04 09:35
arthurtu大侠,版主说的对,你说的方法有时好用有时不好用。一定要用WINOBJ.exe来修改事件的属性,修改以后就可以了。
但发行的程序却不能这么要求用户,呵呵。

我还在试第二种方法,我是菜鸟比较费劲。

我想写好后发个帖子让以后的人省点事。
本版要是有个精华区就好了。

唉,我仔细的看看那个贴子吧。
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-04 09:27
arthurtu大侠,版主说的对,你说的方法有时好用有时不好用。一定要用WINOBJ.exe来修改事件的属性,修改以后就可以了。
但发行的程序却不能这么要求用户,呵呵。

我还在试第二种方法,我是菜鸟比较费劲。

我想写好后发个帖子让以后的人省点事。
本版要是有个精华区就好了。
只要能解决问题,就一定给分。 希望高手赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-07-04 09:21
[quote]我在内核创建了命名事件对象,然后在应用程序右试图用OpenEvent得到其句柄,失败。
相关代码如下:
驱动程序端:
WCHAR wEventNameBuf[]=L\"\\\\BaseNamedObjects\\\\SharedEvent\";
UNICODE_STRING uEventName;
PKEVENT pEvent;
HANDLE hEvent;

RtlInitUnicode(&uEventName,wEventNameBuf);

pEvent = IoCreateNotificationEvent(&uEventName,&hEvent);
if( !pEvent )
return FALSE;


应用程序端:
TCHAR EventName[]=_T(\"SharedEvent\");
HANDLE hEvent;
hEvent = OpEvent(EVENT_ALL_ACCESS,FALSE,EventName);

返回总是失败,为什么? EVENT_ALL_ACCESS换成SYNCHRONIZE就可以了。但是ReSetEvent()就不行了。如何等待下一个事件的触发呢?

 

老兄,你这条路是我曾经走过的路,我也曾迷惑过。
如果你想在应用程序层置事件,还请在应用程序层创建事件,在驱动程序层打开它。驱动程序和应用程序不在同一个进程环境中,应用程序无权限改变事件的状态。用SYNCHRONIZE虽然可以得到句柄,也无法改变不能改变事件状态的命运。不过,或许通过修改权限等内部结构可以做到,不过即使是那样,还不是得少失多。
 [/quote]

可是我见到的都是这样做的。差别就在
pEvent = IoCreateNotificationEvent(&uEventName,&hEvent);
后,用了KeClearEvent
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-03 17:49
我在内核创建了命名事件对象,然后在应用程序右试图用OpenEvent得到其句柄,失败。
相关代码如下:
驱动程序端:
WCHAR wEventNameBuf[]=L\"\\\\BaseNamedObjects\\\\SharedEvent\";
UNICODE_STRING uEventName;
PKEVENT pEvent;
HANDLE hEvent;

RtlInitUnicode(&uEventName,wEventNameBuf);

pEvent = IoCreateNotificationEvent(&uEventName,&hEvent);
if( !pEvent )
return FALSE;


应用程序端:
TCHAR EventName[]=_T(\"SharedEvent\");
HANDLE hEvent;
hEvent = OpEvent(EVENT_ALL_ACCESS,FALSE,EventName);

返回总是失败,为什么? EVENT_ALL_ACCESS换成SYNCHRONIZE就可以了。但是ReSetEvent()就不行了。如何等待下一个事件的触发呢?

 

老兄,你这条路是我曾经走过的路,我也曾迷惑过。
如果你想在应用程序层置事件,还请在应用程序层创建事件,在驱动程序层打开它。驱动程序和应用程序不在同一个进程环境中,应用程序无权限改变事件的状态。用SYNCHRONIZE虽然可以得到句柄,也无法改变不能改变事件状态的命运。不过,或许通过修改权限等内部结构可以做到,不过即使是那样,还不是得少失多。
Tom_lyd
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-03 13:18
Hi楼上的各位,问题是解决了,就像问题出现那样无厘头。
不知道版主最后是怎么解决的。EVENT_ALL_ACCESS确实没有错。

总之多谢了。
只要能解决问题,就一定给分。 希望高手赐教!
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-07-03 13:11
以前曾经和PJF为了这个话题争执过。
应该可以看的比较清楚。

http://www.driverdevelop.com/forum/viewthread.php?tid=11043#pid59239

后来又仔细的考虑了这个问题,修改systemcontext下做出来的目标,可以在ring3打开正常情况下不能做到的事情。

http://www.driverdevelop.com/forum/viewthread.php?tid=9081#pid77608
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-07-03 09:32
我的意思是说,你在create event后,把他clear掉,在看看能不能在app open。
在你的app,用EVENT_ALL_ACCESS没有错啊。
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-03 09:25
我是问hEvent = OpEvent(EVENT_ALL_ACCESS,FALSE,EventName);
为什么不行?怎么修改EVENT的属性呢?
只要能解决问题,就一定给分。 希望高手赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-07-03 09:20
pEvent = IoCreateNotificationEvent(&uEventName,&hEvent);
if( !pEvent )
return FALSE;
加 KeClearEvent(&hEvent)试试?

版主不会怪我抢答吧? :D
游客

返回顶部