lovehunterboy
驱动小牛
驱动小牛
  • 注册日期2008-05-29
  • 最后登录2010-04-16
  • 粉丝2
  • 关注0
  • 积分67分
  • 威望463点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1208回复:2

用事件同步驱动的问题,请赐教!

楼主#
更多 发布于:2009-03-08 11:34
一直想像卡巴斯基那样当发现有可疑的行为出现时就弹出一个对话框供用户选择,可我太菜不知道怎么弄,在网上找了半天没有找到类似的,所以就采取了在应用程序里创建两个事件(一个用于在应用程序里等待驱动发现有可疑行为时弹出对话框,一个用于在驱动等待用户选择了操作后继续操作)。可是我只能传递一个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;
lovehunterboy
驱动小牛
驱动小牛
  • 注册日期2008-05-29
  • 最后登录2010-04-16
  • 粉丝2
  • 关注0
  • 积分67分
  • 威望463点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-03-08 16:50
已解决,谢谢
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-03-08 17:18
参数给错了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部