阅读:1839回复:7
怎么判断r3和r0创建的是同一个事件?
在r3创建了一个事件对象Event
hEvent=CreateEvent(NULL,TRUE,FALSE,"Event"); WaitForSingleObject(hEvent,waitTime); 然后想在驱动里想打开此Event,然后激活它,达到从驱动通知r3的目的, UNICODE_STRING nameEvent; HANDLE hEvent=NULL; PKEVENT Event; RtlInitUnicodeString ( &nameEvent, L"\\BaseNamedObjects\\Event" ); Event = IoCreateSynchronizationEvent (&nameEvent, &hEvent); rc = KeSetEvent(Event,0,FALSE ); 根据rc的值判断KeSetEvent成功执行了,但是r3却等待超时,是不是r3和r0使用的不是一个事件? 还是在r0打开r3的事件时使用的名称"\\BaseNamedObjects\\Event"有问题? |
|
沙发#
发布于:2007-07-25 15:21
RING3句柄 ,RING0指针。
|
|
|
板凳#
发布于:2007-07-25 17:07
引用第1楼wowocock于2007-07-25 15:21发表的 : 就是看比较r3的hEvent和r0 的hEvent吗? 但是地址不一样的.. |
|
地板#
发布于:2007-07-25 21:34
winobj看看名字,如果是同一个事件,就只有一个名字
|
|
地下室#
发布于:2007-07-25 21:50
The preferred method to share event objects between user mode and kernel mode is for the user-mode program to create the event object and pass it to the driver through an IOCTL
|
|
|
5楼#
发布于:2007-07-26 08:51
无所谓谁创建,不过一般来说应用创建,驱动获得其指针比较容易,不用考虑对象空间的问题,如果在驱动创建,应用使用,则必须在BASENAMEOBJECTS 下创建,才行,不然应用不能访问,当然还得考虑权限,在VISTA后还得考虑不同SESSION 的情况==,所以。。。。。。
|
|
|
驱动小牛
|
6楼#
发布于:2007-07-26 10:57
看来是由R3将句柄以指针方式传弟HANDLE,然后R0 ObReferenceObjectByHandle这样比较保险.
|
7楼#
发布于:2007-07-26 17:33
明白了,用winobj看了一下,创建的是同一个事件..
但是还是r3还是收不到消息.... |
|