阅读:1247回复:9
版主你怎么解决的?
我在内核创建了命名事件对象,然后在应用程序右试图用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()就不行了。如何等待下一个事件的触发呢? |
|
|
沙发#
发布于:2002-07-03 09:20
pEvent = IoCreateNotificationEvent(&uEventName,&hEvent);
if( !pEvent ) return FALSE; 加 KeClearEvent(&hEvent)试试? 版主不会怪我抢答吧? :D |
|
板凳#
发布于:2002-07-03 09:25
我是问hEvent = OpEvent(EVENT_ALL_ACCESS,FALSE,EventName);
为什么不行?怎么修改EVENT的属性呢? |
|
|
地板#
发布于:2002-07-03 09:32
我的意思是说,你在create event后,把他clear掉,在看看能不能在app open。
在你的app,用EVENT_ALL_ACCESS没有错啊。 |
|
地下室#
发布于: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 |
|
5楼#
发布于:2002-07-03 13:18
Hi楼上的各位,问题是解决了,就像问题出现那样无厘头。
不知道版主最后是怎么解决的。EVENT_ALL_ACCESS确实没有错。 总之多谢了。 |
|
|
6楼#
发布于:2002-07-03 17:49
我在内核创建了命名事件对象,然后在应用程序右试图用OpenEvent得到其句柄,失败。 老兄,你这条路是我曾经走过的路,我也曾迷惑过。 如果你想在应用程序层置事件,还请在应用程序层创建事件,在驱动程序层打开它。驱动程序和应用程序不在同一个进程环境中,应用程序无权限改变事件的状态。用SYNCHRONIZE虽然可以得到句柄,也无法改变不能改变事件状态的命运。不过,或许通过修改权限等内部结构可以做到,不过即使是那样,还不是得少失多。 |
|
|
7楼#
发布于:2002-07-04 09:21
[quote]我在内核创建了命名事件对象,然后在应用程序右试图用OpenEvent得到其句柄,失败。 老兄,你这条路是我曾经走过的路,我也曾迷惑过。 如果你想在应用程序层置事件,还请在应用程序层创建事件,在驱动程序层打开它。驱动程序和应用程序不在同一个进程环境中,应用程序无权限改变事件的状态。用SYNCHRONIZE虽然可以得到句柄,也无法改变不能改变事件状态的命运。不过,或许通过修改权限等内部结构可以做到,不过即使是那样,还不是得少失多。 [/quote] 可是我见到的都是这样做的。差别就在 pEvent = IoCreateNotificationEvent(&uEventName,&hEvent); 后,用了KeClearEvent |
|
8楼#
发布于:2002-07-04 09:27
arthurtu大侠,版主说的对,你说的方法有时好用有时不好用。一定要用WINOBJ.exe来修改事件的属性,修改以后就可以了。
但发行的程序却不能这么要求用户,呵呵。 我还在试第二种方法,我是菜鸟比较费劲。 我想写好后发个帖子让以后的人省点事。 本版要是有个精华区就好了。 |
|
|
9楼#
发布于:2002-07-04 09:35
arthurtu大侠,版主说的对,你说的方法有时好用有时不好用。一定要用WINOBJ.exe来修改事件的属性,修改以后就可以了。 唉,我仔细的看看那个贴子吧。 |
|