clin_007
驱动牛犊
驱动牛犊
  • 注册日期2006-12-02
  • 最后登录2009-03-22
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望56点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分12分
阅读:5144回复:6

关于openEvent打开内核创建的Event,请高手指点

楼主#
更多 发布于:2007-01-16 18:36
  在用户态用OpentEvent函数打开一个在内核态创建的事件(Event),总是打开失败,不知道其中的什么原因。

代码如下:
InitializeObjectAttributes(&oa,&Str,0,NULL,NULL);
status = ZwCreateEvent(&hEvent,EVENT_ALL_ACCESS,&oa,SynchronizationEvent,FALSE);

不知道其中哪里有问题,是不是初始化对象oa的时候有点问题??我不确定...如果是,应该怎么修改
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-17 11:32
OpenEvent()的参数可能不对  

我以前只能使用SYNCHRONIZE打开,其它全部失败.
clin_007
驱动牛犊
驱动牛犊
  • 注册日期2006-12-02
  • 最后登录2009-03-22
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望56点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分12分
板凳#
发布于:2007-01-17 12:45
OpenEvent参数只有三个,而且第一个参数MSDN上说只能用EVENT_ALL_ACCESS。第二个是否允许继承,第三个是打开的事件名,应该没有错吧。

现在我把事件的创建放在用户线程,然后再把handle传给驱动,驱动在通过handle得到指针。这样也还能work,勉强凑合着先用。搜到一篇文章说在内核态创建的event安全描述符得设置正确,但是确没有具体提到。海~
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-17 22:45
注意在创建event的时候的security descriptor,如果你在driverentry里面创建,那么event将继承system的security descriptory用户模式的进程只有在system账户下的才能打开,即使打开也只能查询状态不能修改,当然你可以在kernel修改event的security descriptor,不过太麻烦了。。。
mfc_boy
驱动牛犊
驱动牛犊
  • 注册日期2003-04-02
  • 最后登录2012-09-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望50点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-18 15:23
内核程序:
 RtlInitUnicodeString(&uszProcessEventString,L"\\BaseNamedObjects\\test");
hProcessEvent = IoCreateNotificationEvent (&uszProcessEventString, hProcessHandle);

用户程序:
m_hEvent = ::OpenEvent(SYNCHRONIZE, FALSE, "test");

应该这样就可以了
苦度人生
驱动牛犊
驱动牛犊
  • 注册日期2006-04-28
  • 最后登录2007-06-18
  • 粉丝0
  • 关注0
  • 积分210分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-19 22:21
非常感谢四楼!
关于使用RtlInitUnicodeString(&uszProcessEventString,L"\\BaseNamedObjects\\test");
hProcessEvent = IoCreateNotificationEvent (&uszProcessEventString, hProcessHandle);
在驱动中创建事件且在应用程序中试图使用CreateEvent打开但被拒绝的问题,我也是发愁了2个多小时了。在四楼的指点下,解决了。
clin_007
驱动牛犊
驱动牛犊
  • 注册日期2006-12-02
  • 最后登录2009-03-22
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望56点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分12分
6楼#
发布于:2007-01-19 23:08
能不能顺便问一下NotificationEvent和Event有什么区别呢?creatEvent也可以设置成Notification的,那为什么又要有一个NotificationEvent
游客

返回顶部