jwt3000
驱动牛犊
驱动牛犊
  • 注册日期2006-08-07
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分25分
  • 威望157点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:1299回复:3

关于SSDT HOOK后通过事件通知应用程序问题

楼主#
更多 发布于:2007-08-26 21:32
HOOK SSDT应该没有问题通过DbgPrint在自己的函数中显示被HOOK的信息一切正常但是通过事件通知应用程序时却有时候会蓝屏
驱动:
在列程序IRP_MJ_WRITE中
通过
RtlCopyMemory(&hEventApp,Irp->AssociatedIrp.SystemBuffer,4);
ObReferenceObjectByHandle(hEventApp,EVENT_MODIFY_STATE,*ExEventObjectType,Irp->RequestorMode,(PVOID*) &pEventApp,NULL);
得到用户应用程序传来的事件对象指针
然后在自己定义用来代替被HOOK的函数的函数里用如下代码激发事件
if(pEventApp!=NULL)
{
            
    KeSetEvent(pEventApp, IO_NO_INCREMENT, TRUE);
    KeClearEvent(pEventApp);
}
======================================================================
应用程序:
hShareE = CreateEvent(NULL,TRUE,FALSE,"jwtEvent");//创建事件
DWORD t;
HANDLE fh = CreateFile("\\\\.\\jwtddk", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
WriteFile(fh,&hShareE,4,&t,NULL);//将事件句柄传到驱动中

然后在应用程序中创建一个线程等待事件发生代码如下:
UINT __cdecl mySingle( LPVOID pParam )
{  
  while(1)
  {
    //阻塞等待
    
    WaitForSingleObject((HANDLE) pParam,INFINITE);
        //通知用户
    AfxMessageBox("jwt Event!");//这句写与不写有时候均出线蓝屏
  }
return 0;
}

请大侠赐教

最新喜欢:

xdevxdev
javacap
驱动牛犊
驱动牛犊
  • 注册日期2007-03-18
  • 最后登录2008-05-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-29 16:24
得到事件句柄应该通过METHOD_NEITHER吧。
jwt3000
驱动牛犊
驱动牛犊
  • 注册日期2006-08-07
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分25分
  • 威望157点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-03 09:07
问题解决了
问题出在KeSetEvent(pEventApp, IO_NO_INCREMENT, TRUE);
最后一个参数要用false
fox1999
驱动牛犊
驱动牛犊
  • 注册日期2006-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-18 13:38
多謝樓主分享經驗
游客

返回顶部