cshacker
驱动牛犊
驱动牛犊
  • 注册日期2003-12-06
  • 最后登录2013-09-02
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1102回复:1

高手帮忙看看,驱动程序和应用程序通信问题

楼主#
更多 发布于:2004-01-13 19:36
首先我在应用程序中创建一个事件
m_hEvent = CreateEvent(NULL, false, false, NULL);
然后用DeviceIoControl将m_hEvent送到驱动中
DeviceIoControl(hDevice,
      IOCTL_UPLOAD_EVENT_HANDLE,
      &hEvent,
      sizeof(HANDLE),
      NULL,
      0,
      &dwReturn,
      NULL);
在驱动中处理IRP的Dispatch函数中
case IOCTL_UPLOAD_EVENT_HANDLE:
    if(InLength < sizeof(HANDLE))
        break;
    UserBuffer = (char *)Irp->AssociatedIrp.SystemBuffer;
    hEvent = * ((HANDLE *)UserBuffer);
    DbgPrint(\"%d\", hEvent);
    status = ObReferenceObjectByHandle(hEvent,
                                       GENERIC_ALL,
  NULL,
  KernelMode,
           &gpEventObject,
  &objHandleInfo);
    if (status == STATUS_SUCCESS)
    {
        DbgPrint(\"Upload Event Handle OK!\");
    }
    else
    {
        DbgPrint(\"Upload Event Handle Error!\");
    }
    break;
我使用softice调试发现将此段case里面的内容清空,只留下break,DeviceIoControl返回TRUE,但如上述代码时,不设任何断点softice会自动断住
且此时应用程序挂起,CPU占用率为100%,无法结束进程。
请高手帮忙!
先谢谢了!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-01-13 23:57
ObReferenceObjectByHandle增加了引用技术,必须用ObDeferenceObjectByHandle
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部