CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  硬件/嵌入开发 >  驱动开发/核心开发

关于设置事件对象,这个用DDK怎么写?

楼主leebints(勇气)2003-12-03 19:57:43 在 硬件/嵌入开发 / 驱动开发/核心开发 提问

我以前用DS写的WIN2000下的ISA卡的驱动,写成NT式的,运行挺正常的,但在关机的时候每次都蓝屏,没办法,现在想改用DDK来写,但在这个地方遇到了麻烦:  
    我以前在DEVICEIOCTL里应用层用缓冲方式传递事件对象到驱动层,DS是这么写的:  
    HANDLE   hEvent=*(HANDLE*)I.IoctlBuffer();  
    m_pEvent=new(NonPagedPool)KEvent(hEvent);  
  其中m_pEvent是类KEvent的一个对象。  
   
  现在写成DDK形式的:第一行写成以下形式:  
    HANDLE   hEvent=*(HANDLE*)Irp->AssociatedIrp.SystemBuffer;  
  但第二行,怎么写? 问题点数:0、回复次数:6Top

1 楼ArthurTu(猫王)回复于 2003-12-03 20:15:46 得分 0

ObReferenceObjectByHandle  
  Top

2 楼ilovedrv(zzy)回复于 2003-12-04 09:06:52 得分 0

在应用中创建事件,然后通过ioctl传给驱动,驱动中ObReferenceObjectByHandle来引用该事件对象。    
  这样应用和驱动中都可以检查和修改事件状态。    
  应用程序:    
  HANDLE   m_hCommEvent   =   CreateEvent(NULL,    
                                                                      false,    
                                                                      false,    
                                                                      NULL);    
  //   download   event   object   to   device   driver,    
  //   m_hCommDevice   is   the   device   object    
   
  DeviceIoControl(m_hCommDevice,    
                                  IO_REFERENCE_EVENT,    
                                  (LPVOID)   m_hCommEvent,    
                                  0,    
                                  NULL,    
                                  0,    
                                  dwReturn,    
                                  NULL);    
  在需要的地方等待    
  while(true)    
  {    
        WaitForSingleObject(m_hCommEvent,   INFINITE);    
        //   After   this   function,   the   event   is   set   to    
        //   non   signaled.   Get   information   and   deal   with   it.    
  }    
   
  驱动程序:    
  case   IO_REFERENCE_EVENT:    
      hEvent   =   (HANDLE)   irpStack->    
                Parameters.DeviceIoControl.Type3InputBuffer;    
   
      status   =   ObReferenceObjectByHandle(hEvent,    
                                                                            GENERIC_ALL,    
                                                                            NULL,    
                                                                            KernelMode,    
                                                                            &gpEventObject,    
                                                                            &objHandleInfo);    
  the   gpEventObject   is   a   PRKEVENT   object,   so   we   can   use   KeEventXXX   and   KeWaitForXXX   to   operate   it.    
  当事件发生时,置信号    
  KeSetEvent(gpEventObject,   0,   FALSE);    
  当不再需要事件对象时:    
  case   IO_DEREFERENCE_EVENT:    
      if(gpEventObject)    
              ObDereferenceObject(gpEventObject);Top

3 楼ArthurTu(猫王)回复于 2003-12-04 15:22:31 得分 0

DeviceIoControl(m_hCommDevice,    
                                  IO_REFERENCE_EVENT,    
                                  (LPVOID)   m_hCommEvent,    
                                  0,                                                   //0?   should   be   sizeof(HANDLE)  
                                  NULL,    
                                  0,    
                                  dwReturn,                                     //   should   be   &dwReturn,   if   it's   not   a   pointer  
                                  NULL);    
  ???  
   
  Top

4 楼ilovedrv(zzy)回复于 2003-12-04 16:08:16 得分 0

to   ArthurTu(猫王)  
        惭愧,我也是从别处文档直接拷贝,没有细看。Top

5 楼anothervip(Never ending... ...)回复于 2003-12-06 14:20:18 得分 0

学习Top

6 楼ygangy(还是多去海边走走舒服)回复于 2004-01-04 12:04:20 得分 0

upTop

相关问题

  • 可视用户对象如何设置双击事件
  • 求解:如何获取propertygrid控件中设置对象的集合内容改变事件?顶者有分
  • 请问自定义的事件怎么会出现未将对象引用设置到对象的实例的错误
  • 对象变量未设置??
  • 请问如何设置DDK
  • 窗口对象不能接收事件
  • session和application对象事件不执行!!!!
  • 对象不是源自动事件
  • 能给Window对象注册事件吗?
  • 关于动态设置对象

关键词

  • 驱动
  • null
  • 事件
  • 对象
  • gpeventobject
  • ddk
  • hevent
  • hcommevent
  • obreferenceobjectbyhandle
  • handle

得分解答快速导航

  • 帖主:leebints

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo