waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2931回复:3

ZwSetInformationFile删除文件的FileInformationClass值

楼主#
更多 发布于:2009-04-12 18:19
我想监视文件的删除操作,Hook了ZwSetInformationFile,却发现,使用Shift+Delete删除文件的时候FileInformationClass值是FileDispositionInformation,但是使用Delete删除的时候,得不到FileInformationClass的值,程序如下:
    status = ObReferenceObjectByHandle(FileHandle, 0, 0, KernelMode, &FileObject, NULL);
    if (NT_SUCCESS(status))
    {
        //盘符
        status = IoVolumeDeviceToDosName(pFileObject->DeviceObject, &uniDiskName);
        if (!NT_SUCCESS(status))
        {
                DbgPrint("Error.\n");
            return 原ZwSetInformationFile;    
        }
        else
        {
            //文件名
            RtlUnicodeStringToAnsiString(&ansiDiskName, &uniDiskName, TRUE);
            RtlUnicodeStringToAnsiString(&ansiFileName, &pFileObject->FileName, TRUE);
            sprintf(chCurFolder, "%s%s", ansiDiskName.Buffer, ansiFileName.Buffer);
            DbgPrint("[%s]\n", chCurFolder);
            RtlFreeAnsiString(&ansiDiskName);        
            RtlFreeAnsiString(&ansiFileName);
        }
        switch(FileInformationClass)
        {
        case FileRenameInformation:
            DbgPrint("FileRenameInformation\n");
            break;
        case FileBasicInformation:
            DbgPrint("FileBasicInformation\n");
            break;
        case FileDispositionInformation:
            DbgPrint("FileDispositionInformation\n");
            break;
        case FileEndOfFileInformation:
            DbgPrint("FileEndOfFileInformation\n");
            break;
        case FileLinkInformation:
            DbgPrint("FileLinkInformation\n");
            break;
        case FilePositionInformation:
            DbgPrint("FilePositionInformation\n");
            break;
        case FileShortNameInformation:
            DbgPrint("FileShortNameInformation\n");
            break;
        case FileValidDataLengthInformation:
            DbgPrint("FileValidDataLengthInformation\n");
            break;
        default:
            DbgPrint("Other parameter\n");
            break;
        }
        ObDereferenceObject(pFileObject);    
    }
    else
    {
//        ObDereferenceObject(pFileObject);
        DbgPrint("Error.\n");
        return 原ZwSetInformationFile;            
    }
不知道是什么原因,是不是Delete删除文件的时候用这个函数监视不到啊?
还请老牛们不吝赐教,谢谢
ds_ideal
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2010-01-26
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望105点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-04-15 21:32
难道调用ntdeletefile
zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2009-04-17 00:08
如果不是彻底删除,实际windows做的是改名操作,把文件目录改到回收站了。你在delete的时候 监控一下改名
wesley2005
驱动牛犊
驱动牛犊
  • 注册日期2007-06-16
  • 最后登录2011-03-29
  • 粉丝1
  • 关注0
  • 积分34分
  • 威望327点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-04-23 15:15
rename
游客

返回顶部