阅读:1208回复:2
用事件同步驱动的问题,请赐教!
一直想像卡巴斯基那样当发现有可疑的行为出现时就弹出一个对话框供用户选择,可我太菜不知道怎么弄,在网上找了半天没有找到类似的,所以就采取了在应用程序里创建两个事件(一个用于在应用程序里等待驱动发现有可疑行为时弹出对话框,一个用于在驱动等待用户选择了操作后继续操作)。可是我只能传递一个event到驱动,第二个就传不去,老是说是无效的句柄,不知道是怎么回事。请指点,如果有其它好的方法,请介绍一下,谢谢。
驱动: case CTRLMON_sendevent: sendhEvent = *(HANDLE *)InputBuffer; IoStatus->Status =ObReferenceObjectByHandle(sendhEvent,GENERIC_ALL,NULL, KernelMode, &gpSendEventObject, &sendobjHandleInfo); if(gpSendEventObject) DbgPrint("gpSendEventObject\n"); break; case CTRLMON_receiveevent: receivehEvent = *(HANDLE *)InputBuffer; DbgPrint("CTRLMON_receiveevent\n"); IoStatus->Status =ObReferenceObjectByHandle(receivehEvent,GENERIC_ALL,NULL, KernelMode, &gpReceiveEventObject, &receiveobjHandleInfo); switch (IoStatus->Status){ case STATUS_SUCCESS :DbgPrint("STATUS_SUCCESS\n");break; case STATUS_OBJECT_TYPE_MISMATCH:DbgPrint("STATUS_OBJECT_TYPE_MISMATCH\n");break; case STATUS_ACCESS_DENIED:DbgPrint("STATUS_ACCESS_DENIED\n");break; case STATUS_INVALID_HANDLE:DbgPrint("STATUS_INVALID_HANDLE\n");break; default :DbgPrint("1111111\n");break; } if(gpReceiveEventObject) DbgPrint("gpReceiveEventObject\n"); break; 应用: if sendhandle=0 then begin sendhandle:=CreateEvent(nil,false,false,'Send'); DeviceIoControl(hDevice,CTRLMON_sendevent, @sendhandle,4,nil,0, dwBytesReturned,nil); end; if receivehandle=0 then begin receivehandle:=CreateEvent(nil,false,false,'Receive'); DeviceIoControl(hDevice,CTRLMON_receiveevent,nil,0,@receivehandle,4,dwBytesReturned,nil); end; |
|
沙发#
发布于:2009-03-08 16:50
已解决,谢谢
|
|
板凳#
发布于:2009-03-08 17:18
参数给错了
|
|
|