20楼#
发布于:2002-05-13 16:00
你八成改过系统的SECURITY POLICY. 比如给ADMINSTRATORS ( AS part of OS)的权限了.
一般系统上不会这样做的.换台你没有用过的非开发的机器就不能重复了. [编辑 - 5/13/02 by zdhe] |
|
21楼#
发布于:2002-05-13 16:48
我找了另一台非开发的2000机器又试了一试,还是行。
难道我装的2000光盘有问题?呵呵 |
|
22楼#
发布于:2002-05-13 17:12
老兄, 我真的快相信了.
能否把SOURCE贴出来让咱也帮着测试一下? 不相干的删除就是. 只是想确认一下这一点本身. 我做过KERNEL <-> USER0 CHANNEL级的通讯, 各种可能性都测试过的. 结论是不行. 如果这样可以,真就省事了. 这个站上以前的贴子里LU0 也回答过这个问题.不是这个样子. W2K的版本也请教一下. 该有的版本我都能找到. 当然不能排除你通过程序改变PROCESS 的TOKEN. 自己升级到权限足够高,当然也就行了. 看看SOURCE如何? |
|
23楼#
发布于:2002-05-13 18:04
看你说的那么认真,我有点怀疑我自己了。是不是我们说的不是同一个东西。
这个简单程序的确运行好好的呀: void ppppp(PVOID event) { KeWaitForSingleObject((PKEVENT)event,Executive,UserMode,0,0); //......验证处 } ...... WCHAR wEventNameBuf[]=L\"\\\\BaseNamedObjects\\\\SharedEvent\"; UNICODE_STRING uEventName; PKEVENT pEvent; HANDLE hEvent,hThread; ...... case IOCTL_******: RtlInitUnicodeString(&uEventName,wEventNameBuf); pEvent = IoCreateNotificationEvent(&uEventName,&hEvent); KeResetEvent(pEvent); RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,&hEvent,4); PsCreateSystemThread(&hThread,THREAD_ALL_ACCESS,0,0,0,ppppp,pEvent); 应用中: if(!DeviceIoControl(hDevice,IOCTL_******,0,0,&Handle,4,&Bytes,0)) MessageBox(\"DeviceIo Error!\"); esle{ wsprintf(str,\"%x,%x,%x\",hDevice,Bytes,Handle); MessageBox(str); if(!SetEvent((HANDLE)Handle)) ...... } 点击MessageBox OK后ppppp的确继续执行了。 内部版本号:2195 SP2 |
|
24楼#
发布于:2002-05-13 21:26
确认过了,如你所述。
成为问题的只有一点,就是如果EVENT是在PROCESS context里做的,那么没有问题。如果EVENT在system context下做的,就不行。 前面我的说法太武断了,lU0说的时候也带了SYSTEM CONTEXT, 我做的时候也利用SYSTEM CONTEXT. 花些功夫再次澄清一个问题,也算收获,多谢。 |
|
25楼#
发布于:2002-05-14 14:53
〉〉驱动创的HANDLE实际上就在当前进程句柄表里
--------------------------------------------------- 你没注意到这句话,或是我没说清楚吧,呵呵。在使用EVENT的PROCESS context中创的HANDLE就在这个进程的句柄表里,经检验没有权限限制,可以由应用直接使用;而在system context中创建的HANDLE当然就在SYSTEM进程里啦,若单单传句柄值给应用,而句柄表里根本就没有对应的句柄,当然不成功了。解决的办法之一是ZwDuplicateObject;另一个办法是驱动中ZwOpenEvent,有了句柄再告诉应用程序就成了。我验证了一下,工作得很好。 |
|
26楼#
发布于:2004-09-23 15:42
看你说的那么认真,我有点怀疑我自己了。是不是我们说的不是同一个东西。 这段程序我调不通啊,一执行RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,&hEvent,4);就蓝屏,是不是应该RtlCopyMemory(&(Irp->AssociatedIrp.SystemBuffer),&hEvent,4);这样啊。 |
|
上一页
下一页