wax_see
驱动牛犊
驱动牛犊
  • 注册日期2008-04-12
  • 最后登录2009-05-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望6点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1522回复:2

修改filemon中IRP_MJ_WRITE后系统不知道为什么系统蓝屏,各路大侠帮忙看看代码

楼主#
更多 发布于:2008-04-17 00:26
 case IRP_MJ_WRITE:                                                    
    if( FilterDef.logwrites ) {
        if (HookDevice->Flags & DO_BUFFERED_IO)
        {
            pBuffer=(char *)Irp->AssociatedIrp.SystemBuffer;
        }
        else
        {
            if (Irp->MdlAddress)
            {
                pBuffer = (char *)MmGetSystemAddressForMdl (Irp->MdlAddress);
            }        
            else
            {
                if (Irp->UserBuffer!=NULL)
                    pBuffer=(char*)Irp->UserBuffer;
            }
        }
        if (pBuffer)
            {
                hookCompletion = LogRecord( TRUE, &seqNum, &dateTime, NULL,
                        "%s\tIRP_MJ_WRITE%c\t%s\tOffset: %d Length: %d Content: %s",
                        name,
                        (Irp->Flags & IRP_PAGING_IO) ||
                        (Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO) ? '*' : ' ',
                        fullPathName,
                        currentIrpStack->Parameters.Write.ByteOffset.LowPart,
                        currentIrpStack->Parameters.Write.Length ,pBuffer);
            }
                
    }
       想把写操作的内容在filemon应用程序中显示出来,监控FAT32磁盘还好,写操作比较少。监控NTFS时,不断出现一堆下操作,过一会系统就蓝屏重启。
   还有,我随便写点大概300bytes的数据也会产生蓝屏,我看CurrentLog大小可是有64K的啊!不知道为什么。
   我到底应该怎么把驱动截获的写数据传送到应用层呢,有什么方法可以传pbuffer?求各路大侠帮帮忙
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2008-04-17 08:27
缓冲区里可能都是2进制数据,%s->pbuffer
不死才怪.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
tonyfirst1
驱动牛犊
驱动牛犊
  • 注册日期2008-02-26
  • 最后登录2010-08-06
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望138点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-04-20 11:21
共享内存是不是个办法呢!?
游客

返回顶部