首页
社区
课程
招聘
[旧帖] [求助]minifilter文件过滤驱动怎么实现隐藏文件 0.00雪花
发表于: 2016-5-22 17:02 2654

[旧帖] [求助]minifilter文件过滤驱动怎么实现隐藏文件 0.00雪花

2016-5-22 17:02
2654
首先ring3   int aa=_access("C:\\Program Files\\Common Files\\System\\abc.txt",0);
        gstring::tip("%d",aa);
如果文件存在,返回值是0 ,不存在返回-1
驱动层控制些文件的访问
const FLT_OPERATION_REGISTRATION Callbacks[] =
{       
    {
                IRP_MJ_NETWORK_QUERY_OPEN,
              0,
              SimRepPreCreate,
              SimRepPostCreate
    },
        {
                IRP_MJ_OPERATION_END
        }       
};

FLT_PREOP_CALLBACK_STATUS
SimRepPreCreate (
    __inout PFLT_CALLBACK_DATA data,
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __out PVOID *CompletionContext
    )
{

UNREFERENCED_PARAMETER( FltObjects );
UNREFERENCED_PARAMETER( CompletionContext );
PAGED_CODE();
{
         PFLT_FILE_NAME_INFORMATION nameInfo;
         //直接获得文件名并检查
         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_NETWORK_QUERY_OPEN]%wZ", &nameInfo->Name);
                         _wcslwr( pTemp );
                         if( NULL != wcsstr( pTemp, L"abc.txt" ) )  // 检查是不是要保护的文件
                         {
                                 //DbgPrint( "\r\nIn NPPreWrite(), FilePath{%wZ} is forbided.", &nameInfo->Name );
                                 DbgPrint("[MiniFilter][IRP_MJ_NETWORK_QUERY_OPEN]%wZ", &nameInfo->Name);
                                 if( NULL != pNonPageBuf )
                                         ExFreePool( pNonPageBuf );
                                 //FltReleaseFileNameInformation( nameInfo );

                                data->IoStatus.Status = STATUS_ACCESS_DENIED;
                                data->IoStatus.Information = FILE_DOES_NOT_EXIST;
                                FltReleaseFileNameInformation( nameInfo );
                                //return FLT_PREOP_DISALLOW_FASTIO;
                                return FLT_PREOP_DISALLOW_FASTIO;                         
                                // return FLT_PREOP_SUCCESS_NO_CALLBACK;
                         }
                         if( NULL != pNonPageBuf )
                                 ExFreePool( pNonPageBuf );
                 }
                 FltReleaseFileNameInformation( nameInfo );
         }
}
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
驱动层怎么处理,让access函数返回-1呀??

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回