使用微过滤器阻止对特定路径的访问

Block access to specific path with minifilters

我正在尝试编写一个微过滤器来阻止对特定路径中任何文件的访问。我已经能够为 C: 中的任何路径执行此操作。这就是我所做的。首先声明:

const WCHAR* internal_drives[] = { L"C:" };

然后,在 instant_setup 中,我通过以下操作启动 C: 的微过滤器:

        int internal_drives_length = sizeof internal_drives / sizeof * internal_drives;
        for (size_t i = 0; i < internal_drives_length; i++)
        {
            if (wcscmp(ctx->Name.Buffer, internal_drives[i]) == 0)
            {
                status = STATUS_SUCCESS;
            }
        }

我可以阻止对 C: 的访问,然后通过添加函数:mini_pre_createmini_post_create:

    status = STATUS_ACCESS_DENIED;
    data->IoStatus.Status = status;
    data->IoStatus.Information = 0;

有效,我可以阻止对 C:

中任何文件的访问

但我希望能够指定要阻止访问的文件夹。我尝试在变量 internal_drives 中指定路径,但它不起作用,我没有阻止任何东西:

const WCHAR* internal_drives[] = { L"D:\path" };

我错过了什么吗?有没有更正确的方法来使用微过滤器来做到这一点?我是微过滤器的初学者。

您设置驱动程序,然后在特定 IRP_MJ_CREATE 中进行过滤。为此,您必须使用 FltGetFileNameInformation 和 FltParseFileNameInformation。

请注意,文件系统不适用于 DOS 名称驱动器盘符,因此您必须将 \Device\Harddiskvolumex\folder\file.txt 转换为 c:\folder\file.txt。您可以在设置时进行映射。