首页
社区
课程
招聘
[旧帖] [求助][求助]关于微驱动(Mini Filter Driver)里面 如何用文件名来判断禁止访问指定文件 0.00雪花
发表于: 2014-10-17 08:51 2325

[旧帖] [求助][求助]关于微驱动(Mini Filter Driver)里面 如何用文件名来判断禁止访问指定文件 0.00雪花

2014-10-17 08:51
2325
本人刚刚开始学习过滤驱动,自己想做一个微过滤驱动来实现特定文件名的访问限制。
比如: README.txt 这个文件名的文件 不可以创建,打开,编辑和删除。

我在IRP_MJ_SET_INFORMATION 的 预处理里实现的属性的禁止修改。
但是在用IRP_MJ_READ , IRP_MJ_WRITE, IRP_MJ_CREATE 里却 不能实现。。。 
不知道是不是因为在缓存中读取所以文件名字不一致导致的。 如果是的话应该怎么解决。

if(  NT_SUCCESS(  FltGetFileNameInformation(  Data,  FLT_FILE_NAME_NORMALIZED  |
        FLT_FILE_NAME_QUERY_DEFAULT, &nameInfo ) ) )
    {
        if( NT_SUCCESS( FltParseFileNameInformation( nameInfo ) ) )
        {
            WCHAR pTempBuf[ 512 ] = { 0 };
            WCHAR *pNonPageBuf = NULL, *pTemp = pTempBuf;
            if( nameInfo->Name.MaximumLength > 512 )
            {
                pNonPageBuf  =  ExAllocatePool(  NonPagedPool,nameInfo->Name.MaximumLength );
                pTemp = pNonPageBuf;
            }
            RtlCopyMemory( pTemp, nameInfo->Name.Buffer, nameInfo->Name.MaximumLength );
            DbgPrint("[MiniFilter][IRP_MJ_READ]%wZ\n", &nameInfo->Name);
            _wcsupr( pTemp );
            if( NULL != wcsstr( pTemp, L"READ.TXT" ) )    //  
            {
                //DbgPrint(  "\r\nIn  NPPreWrite(),  FilePath{%wZ}  is  forbided.", &nameInfo->Name );
                if( NULL != pNonPageBuf )
                    ExFreePool( pNonPageBuf );
                FltReleaseFileNameInformation( nameInfo );
            //  Data->IoStatus.Status = STATUS_ACCESS_DENIED;
            //  Data->IoStatus.Information = 0;
                DbgPrint("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n");
                return FLT_PREOP_DISALLOW_FASTIO;
            }
            if( NULL != pNonPageBuf )
                ExFreePool( pNonPageBuf );
        }
        FltReleaseFileNameInformation( nameInfo );
    }
}
return FLT_PREOP_SUCCESS_NO_CALLBACK;

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 358
活跃值: (662)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
返回 STATUS_ACCESS_DENIED
删除文件是不是在IRP_MJ_SET_INFORMATION这里处理?
2014-10-17 12:40
0
雪    币: 24
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
返回在windows8之前可以用 IRP_MJ_SET_INFORMATION 删除
但是现在windows 8 用 delete键可以禁止,但是Shift+delete 就拦截不到。。。

而且我想知道创建和读的时候应该怎么去拦截, 在create里应该用什么方法啊
2014-10-27 08:22
0
游客
登录 | 注册 方可回帖
返回
//