使用minifilter驱动程序阻止文件系统访问

时间:2015-09-16 01:14:28

标签: driver windows-10 minifilter

我一直在玩微型驱动程序,并在某些情况下开始阻止I / O.我一直在PreOperationCallback工作,决定是否允许操作;我的PreOperationCallback中的代码是(粗略),如下所示:

PreOperationCallback (
    _Inout_ PFLT_CALLBACK_DATA Data,
    _In_ PCFLT_RELATED_OBJECTS FltObjects,
    _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
    ) {

            //Deny things with the key in them
            if (wcswcs((Data->Iopb->TargetFileObject->FileName.Buffer), L"77key77")) {
                //Only block IRP_MJ_CREATE, some other functions must not be cancelled
                    if (Data->Iopb->MajorFunction == IRP_MJ_CREATE) {

                    DbgPrint("[CUSTOM] INTERCEPTING OPERATION");

                    Data->IoStatus.Status = STATUS_ACCESS_DENIED;
                    Data->IoStatus.Information = 0;

                    return FLT_PREOP_COMPLETE;
                }
            }
        return FLT_PREOP_SUCCESS_WITH_CALLBACK;
       }

一半有效:删除包含密钥的任何文件时,系统会要求我获得管理员批准。但是,在批准后,该文件将被删除。 这很酷,但我正在拍摄这样的错误信息:

enter image description here

(是的,有点像防病毒通常会这样做)

有谁可以告诉我为什么允许管理员绕过过滤器?

编辑(提问后的想法): 如果这是一个正常的过程,而不是一个驱动程序,我认为管理员有权覆盖ACCESS_DENIED,因为管理员拥有的权限比试图限制访问权限的程序更多,但对于一个驱动程序我不会感觉这是有道理的。

2 个答案:

答案 0 :(得分:0)

以下是我对正在发生的事情的猜测:在Windows Vista及更高版本中,管理员使用较低权限令牌正常运行。当收到拒绝访问时,应用程序可以决定通过创建一个使用完全特权令牌运行的提升进程来响应,然后可以执行访问。

此方案不应影响您的minifilter是否阻止访问,这只是应用程序(例如,Windows资源管理器)处理返回代码的行为。您可能会看到第二次访问您的minifilter也应阻止的同一文件。

如果你没有看到这个,也许你的过滤器不是真正导致初始访问被拒绝错误的原因?您是否通过调试器验证了代码是否正在运行?

答案 1 :(得分:0)

我搜索了别的东西并碰到了这个老问题。 这是一个非常古老的主题,但是如果它仍然可用,那么对于阅读本文的人来说,我可以回答它。

这个问题的答案是 lordjeb 在评论中指出的内容。

安装minifilter驱动程序时,需要加载它并将其附加到所需的卷,或者只是将过滤器设置为加载并自动附加到inf文件中。否则它将无法运行并且无法捕获该卷IRP的回调。