使用微过滤器阻止对特定路径的访问
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_create
、mini_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。您可以在设置时进行映射。
我正在尝试编写一个微过滤器来阻止对特定路径中任何文件的访问。我已经能够为 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_create
、mini_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。您可以在设置时进行映射。