阅读:1798回复:13
关于驱动程序Create一个Event的问题?请指教!!!
//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,但总不成功,有没有高手知道原因呢??? 或我这个办法是不是行不通呢? |
|
最新喜欢:chili
|
沙发#
发布于:2004-03-19 09:42
在AddDevice里面加?好像还没有看过这样的用法
|
|
|
板凳#
发布于:2004-03-19 10:48
能否加到其他部分呢,有没有人见过??
|
|
|
地板#
发布于:2004-03-19 11:16
当然可以,例如你的IoControl
|
|
|
地下室#
发布于:2004-03-19 12:28
当然可以,例如你的IoControl 以前有过这样的用法吗? 有没有可以查验该事件是否成功建立的工具?? |
|
|
5楼#
发布于:2004-03-21 16:53
用WINOBJ或DEVICEOBJ。好象是在BASEOBJECTS子项下
|
|
6楼#
发布于:2004-03-21 22:10
驱动的NOTIFICATIONEVENT_NAME和app的NOTIFICATIONEVENT_NAME定义一样的?驱动创建的event要放在BaseObjects目录(名字空间)下。
|
|
7楼#
发布于:2004-03-22 08:58
驱动的NOTIFICATIONEVENT_NAME和app的NOTIFICATIONEVENT_NAME定义一样的?驱动创建的event要放在BaseObjects目录(名字空间)下。 其实我要做的目的是: 当设备插拔时希望用自己创建的事件得到通知!!! 不知有何高见?多谢! |
|
|
8楼#
发布于:2004-03-22 13:17
高见没有,猜想倒有 :D
自己的event? 先创建一个event,然后app开个线程等着。 在remove或query_remove的时候设置event,激活app的thread 但是设备remove的时候app可以得到WM_DEVCHANGE(可能有误)消息呀 |
|
9楼#
发布于:2004-03-22 14:18
高见没有,猜想倒有 :D 所以不想使用WM_Devicechange这个消息,你的意思Host端创建一个event,然后在等待,当驱动里设备有插拔时设置event,但这个消息的柄我试了传不进去! |
|
|
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 |
|
11楼#
发布于:2004-03-22 22:22
1、驱动创建一个有名字的event,app用同样的名字打开。但是驱动创建event的时候,名字前面要加BaseNamedObjects,比如名字为"EventXXX"话,驱动用L"\BaseNameObjects\EventXXX"传给IoCreateNotificationEvent,app用"EventXXX"传给OpenEvent。因为在BaseNameObjects下的对象Win32才能看见的。 我用的就是第一种方法,第二种方法我再试一下,多谢! |
|
|
12楼#
发布于:2004-03-23 08:10
应该是"\\\\BaseNameObjects\\\\EventXXX",怎么成一个\\了? :o
[编辑 - 3/23/04 by arthurtu] [编辑 - 3/23/04 by arthurtu] |
|
13楼#
发布于:2004-03-23 15:11
两种方法都已经成功,多谢多位!!!!
|
|
|