阅读:888回复:3
SystemBuffer的问题
引用:
-------------------------------------------------------------------------------- 看你说的那么认真,我有点怀疑我自己了。是不是我们说的不是同一个东西。 这个简单程序的确运行好好的呀: 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 -------------------------------------------------------------------------------- 这段程序我调不通啊,一执行RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,&hEvent,4);就蓝屏,是不是应该RtlCopyMemory(&(Irp->AssociatedIrp.SystemBuffer),&hEvent,4);这样啊。 我的IOCTL是定义成METHOD_BUFFERED。 |
|
沙发#
发布于:2004-09-23 21:20
应该是RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,&hEvent,4);
但注意需要使用METHOD_BUFFERED方式的缓冲区管理 使用NEITHER模式时在UserBuffer DIRECT模式的输出在MdlAddress |
|
|
板凳#
发布于:2004-09-23 21:43
为何会蓝屏呢?我就是造着写的。
|
|
地板#
发布于:2004-09-25 10:15
我自己的低级错误。给分。
|
|