在微型过滤器中,如何获取打开文件的路径?

韦德·布雷纳德

我的minifilter驱动程序使用创建后的回调将正在打开的文件的路径传达给用户模式进程。微型过滤器使用重解析点来标识需要处理的文件。

PFLT_FILE_NAME_INFORMATION pFNI = NULL;

DWORD FNIFlags = FLT_FILE_NAME_OPENED | 
                 FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP |
                 FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE;

NTSTATUS Status = FltGetFileNameInformation(Data, FNIFlags, &pFNI);
if (!NT_SUCCESS(Status))
{
    DBG_PRINT_ERROR("FltGetFileNameInformation failed: %#x", Status);
    __leave;
}

DBG_PRINT_INFO("Realize '%wZ'", pFNI->Name);

除了通过如下所示的NTFS联结打开文件时,此方法工作正常:

mkdir c:\a
mkdir c:\b
echo "hello world" >c:\b\b.txt
# ...set reparse point metadata on b.txt
mklink /j c:\a\b c:\b
type c:\a\b\b.txt

typeopenes文件,我的司机打印输出:

Realize '\Device\HarddiskVolume2\b\b.txt'

因此,在评估结点之后,它看到的是文件的真实路径,而不是从中打开文件的路径。

问题是,我的程序依赖于在要打开的文件的父目录之一中找到配置文件,而结点的问题使我的程序错过了配置文件。

MSDN表示FLT_FILE_NAME_OPENED返回“打开此文件的句柄时使用的名称”。我认为它应该给我\Device\HarddiskVolume2\a\b\b.txt而不是\Device\HarddiskVolume2\b\b.txt我想念什么?

加布里埃尔·伯塞(Gabriel Bercea)

除非在这种情况下缓存文件,否则您将获得“ resolved”
我建议仅使用FLT_FILE_NAME_OPENED摆脱其他两个标志。

看看这个文章就这些标志由Alex鲤鱼。


加布里埃尔,干杯

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何改变图像的过滤器中的PDF文件

如何获得在过滤器中的请求路径变量?[Micronaut 1.3.2]

如何在servlet过滤器中获取Spring bean?

如何基于键上的过滤器获取json路径?

TreeContentProvider仅获取我路径的每个目录。(文件过滤器)

路径即文件上有多个过滤器

Activeadmin过滤器:如何将路径用作过滤器方法参数

过滤器在AngularJS中如何工作?

vuejs:外部文件中的过滤器?

如何在arrayList过滤器中获取索引列表

如何从CIRowAverage过滤器获取值?

AngularJS:如何从过滤器中获取DOM元素

如何通过Windows批处理文件中的“查找”过滤器通过“ svn info”命令获取“ BASE”编号?

在Android应用中打开文件的意图过滤器问题

微型过滤器驱动程序的可能安装位置

如何从Elasticsearch中的过滤器获取所有文档?

如何使用rxjs中的过滤器

从过滤器成功获取结果后,如何在Laravel 8的刀片文件中显示

Powershell命令基于过滤器从多个文件夹中获取所有文件

gruntjs路径过滤器:排除以_开头的文件

意图过滤器以打开xls和xlsx文件

如何使Notepad ++使用“ .txt”文件作为默认的打开文件对话框过滤器?

gvim打开对话框文件类型过滤器

我如何在过滤器中获取请求

在jQuery中获取过滤器的行数

打开文件对话框中的文件过滤器

如何使用多个过滤器从模型中获取对象?

Notepad ++ 在文件过滤器中查找

使用文件中的过滤器获取文件中的记录数