DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1798回复:13

关于驱动程序Create一个Event的问题?请指教!!!

楼主#
更多 发布于:2004-03-18 16:55
//Driver里面的代码:
//begin
RtlInitUnicodeString(&(dx->uEventName), NOTIFICATIONEVENT_NAME);
dx->pek_AWAKE=(PKEVENT)IoCreateSynchronizationEvent(&(dx->uEventName), &(dx->hEvent));
if (!dx->pev_AWAKE)
{
KPrint("Event was not created\n");
}
else
{
KeClearEvent(dx->pev_AWAKE);
KPrint("H,,A,,A,,A");
}
//end

我在驱动程序中的AddDevice中执行如上代码,在Host主程序中使用:
   if (((hEvent  = OpenEventW(EVENT_ALL_ACCESS, NULL,NOTIFICATIONEVENT_NAME))) == NULL)

希望能打开这个Event,但总不成功,有没有高手知道原因呢???

或我这个办法是不是行不通呢?

最新喜欢:

chilichili
喜欢清静?享受人生
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-19 09:42
在AddDevice里面加?好像还没有看过这样的用法
答得好的话,请兄弟们加点分,那是对我的肯定
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-19 10:48
能否加到其他部分呢,有没有人见过??
喜欢清静?享受人生
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-19 11:16
当然可以,例如你的IoControl
答得好的话,请兄弟们加点分,那是对我的肯定
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-19 12:28
当然可以,例如你的IoControl

以前有过这样的用法吗?
有没有可以查验该事件是否成功建立的工具??
喜欢清静?享受人生
yaocan
驱动牛犊
驱动牛犊
  • 注册日期2003-11-29
  • 最后登录2004-09-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-21 16:53
用WINOBJ或DEVICEOBJ。好象是在BASEOBJECTS子项下
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-03-21 22:10
驱动的NOTIFICATIONEVENT_NAME和app的NOTIFICATIONEVENT_NAME定义一样的?驱动创建的event要放在BaseObjects目录(名字空间)下。
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-22 08:58
驱动的NOTIFICATIONEVENT_NAME和app的NOTIFICATIONEVENT_NAME定义一样的?驱动创建的event要放在BaseObjects目录(名字空间)下。

其实我要做的目的是:
当设备插拔时希望用自己创建的事件得到通知!!!
不知有何高见?多谢!
喜欢清静?享受人生
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-03-22 13:17
高见没有,猜想倒有 :D

自己的event?
先创建一个event,然后app开个线程等着。
在remove或query_remove的时候设置event,激活app的thread

但是设备remove的时候app可以得到WM_DEVCHANGE(可能有误)消息呀
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-22 14:18
高见没有,猜想倒有 :D

自己的event?
先创建一个event,然后app开个线程等着。
在remove或query_remove的时候设置event,激活app的thread

但是设备remove的时候app可以得到WM_DEVCHANGE(可能有误)消息呀


所以不想使用WM_Devicechange这个消息,你的意思Host端创建一个event,然后在等待,当驱动里设备有插拔时设置event,但这个消息的柄我试了传不进去!
喜欢清静?享受人生
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-03-22 20:39
1、驱动创建一个有名字的event,app用同样的名字打开。但是驱动创建event的时候,名字前面要加BaseNamedObjects,比如名字为"EventXXX"话,驱动用L"\\BaseNameObjects\\EventXXX"传给IoCreateNotificationEvent,app用"EventXXX"传给OpenEvent。因为在\BaseNameObjects下的对象Win32才能看见的。

2、或者,app创建一个event,把handle传给驱动。当然,这个handle驱动是不能直接用的,用ObReferenceObjectByHandle,得到kernel下的event的pointer,KeSetEvent用之。


不知道有没有帮助 :D
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-03-22 22:22
1、驱动创建一个有名字的event,app用同样的名字打开。但是驱动创建event的时候,名字前面要加BaseNamedObjects,比如名字为"EventXXX"话,驱动用L"\BaseNameObjects\EventXXX"传给IoCreateNotificationEvent,app用"EventXXX"传给OpenEvent。因为在BaseNameObjects下的对象Win32才能看见的。

2、或者,app创建一个event,把handle传给驱动。当然,这个handle驱动是不能直接用的,用ObReferenceObjectByHandle,得到kernel下的event的pointer,KeSetEvent用之。


不知道有没有帮助 :D

我用的就是第一种方法,第二种方法我再试一下,多谢!
喜欢清静?享受人生
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2004-03-23 08:10
应该是"\\\\BaseNameObjects\\\\EventXXX",怎么成一个\\了? :o

[编辑 -  3/23/04 by  arthurtu]

[编辑 -  3/23/04 by  arthurtu]
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-03-23 15:11
两种方法都已经成功,多谢多位!!!!
喜欢清静?享受人生
游客

返回顶部