参考091221-禁止建立,读写,删除,改名文件
发布日期:2021-06-30 22:08:15
浏览次数:2
分类:技术文章
本文共 3736 字,大约阅读时间需要 12 分钟。
弄了好久,才开始对filemon有点理解。今天调试过程中遇到三个问题,请各位大牛解答一下
1.应用程序运行后,驱动加载了,我在DebugView里可以看到调试信息输出,可是为什么在服务管理器里没有FILEMON的服务存在? 2.如果驱动文件sys有更新了,我退出应用程序,然后把sys替换掉,再次运行程序,好象没有加载最新的驱动文件,必须重启机才行呀? 3.我现在想禁止创建新文件,禁止读写文件,禁止删除/重命名文件,禁止访问文件目录。现在禁止删除/重命名文件可以完全实现,但是禁止创建新文件,禁止读写文件的代码会死机。禁止访问文件目录的代码该怎么实现呢? 创建文件操作:在IRP_MJ_CREATE下判断是否为FILE_CREATE或者FILE_OPEN_IF或者FILE_OVERWRITE_IF。//总是重启 读文件:IRP_MJ_READ //总是重启 写文件:IRP_MJ_WRITE //总是重启 删除文件:IRP_MJ_SET_INFORMATION下判断FileRenameInformation或者FileDispositionInformation //运行良好 禁止访问目录:不知道该识别哪个IRP 代码如下: case IRP_MJ_CREATE: hookCompletion = LogRecord( TRUE, &seqNum, &dateTime, NULL, "%s/tIRP_MJ_CREATE/t%s/tAttributes: %s Options: %s", name, fullPathName,CreateAttributesString( currentIrpStack->Parameters.Create.FileAttributes,attributeString ), CreateOptionsString( currentIrpStack->Parameters.Create.Options,optionString )); nvalue = (currentIrpStack->Parameters.Create.Options >> 24)&0xFF; DbgPrint(("filemon nvalue=%d",nvalue));; if(nvalue==FILE_CREATE||nvalue==FILE_OPEN_IF ||nvalue==FILE_OVERWRITE_IF) //***判断是否为创建文件,如果是的,返回STATUS_ACCESS_DENIED { Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; status = Irp->IoStatus.Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } // If its an open-by-id we free the hash entry now so that on the next access to // the file we'll pick up the file's real name. if( currentIrpStack->Parameters.Create.Options & FILE_OPEN_BY_FILE_ID ) { FilemonFreeHashEntry( FileObject ); } break; case IRP_MJ_READ: if( FilterDef.logreads ) { hookCompletion = LogRecord( TRUE, &seqNum, &dateTime, NULL, "%s/tIRP_MJ_R_lower%c/t%s/tOffset: %d Length: %d", name, (Irp->Flags & IRP_PAGING_IO) || (Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO) ? '*' : ' ', fullPathName, currentIrpStack->Parameters.Read.ByteOffset.LowPart, currentIrpStack->Parameters.Read.Length ); } DbgPrint(("Read1 zhm forbit"));; //***IRP_MJ_READ,禁止读文件,返回STATUS_ACCESS_DENIED Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; status = Irp->IoStatus.Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; case IRP_MJ_WRITE: if( FilterDef.logreads ) { hookCompletion = LogRecord( TRUE, &seqNum, &dateTime, NULL, "%s/tIRP_MJ_W_lowlow%c/t%s/tOffset: %d Length: %d", name,(Irp->Flags & IRP_PAGING_IO) || (Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO) ? '*' : ' ', fullPathName,currentIrpStack->Parameters.Write.ByteOffset.LowPart, currentIrpStack->Parameters.Write.Length ); } DbgPrint(("write1 zhm forbit"));; //***IRP_MJ_WRITE,禁止写文件,返回STATUS_ACCESS_DENIED Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; status = Irp->IoStatus.Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; case IRP_MJ_SET_INFORMATION: hookCompletion = LogRecord( TRUE, &seqNum, &dateTime, NULL, "%s/tIRP_MJ_SET_INFORMATION%c/t%s/t%s", name, (Irp->Flags & IRP_PAGING_IO) ||(Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO) ? '*' : ' ', fullPathName, FileInformation[currentIrpStack->Parameters.SetFile.FileInformationClass] ); if( (strcmp(FileInformation[currentIrpStack->Parameters.SetFile.FileInformationClass],"FileRenameInformation")==0) || (strcmp(FileInformation[currentIrpStack->Parameters.SetFile.FileInformationClass],"FileDispositionInformation")==0) ) //***禁止删除文件,返回STATUS_ACCESS_DENIED { DbgPrint(("Set_Information %s",FileInformation[currentIrpStack->Parameters.SetFile.FileInformationClass]));; Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; status = Irp->IoStatus.Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } // If its a rename, cleanup the name association. if( currentIrpStack->Parameters.SetFile.FileInformationClass ==FileDispositionInformation ) { FilemonFreeHashEntry( FileObject ); } break;转载地址:https://lostspeed.blog.csdn.net/article/details/5045447 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月25日 23时19分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ConfigurationProperties实现
2019-05-01
@FeignClient注解的重复名称解决
2019-05-01
org.openjdk.jol
2019-05-01
access_flags
2019-05-01
ClassFile之Methods
2019-05-01
java.net.BindException: 无法指定被请求的地址
2019-05-01
scala list
2019-05-01
k8s设置阿里云仓库
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
svn 没有作者信息) | (没有时间信息
2019-05-01
shell笔记1
2019-05-01
shell参数
2019-05-01
shell dirname basename
2019-05-01
线程分析
2019-05-01
jenkins
2019-05-01
DOM(总结)
2019-05-01
MySQL学习总结(一)
2019-05-01
MySQL学习总结(二)
2019-05-01
MySQL学习总结(三)
2019-05-01