我的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
当type
openes文件,我的司机打印输出:
Realize '\Device\HarddiskVolume2\b\b.txt'
因此,在评估结点之后,它看到的是文件的真实路径,而不是从中打开文件的路径。
问题是,我的程序依赖于在要打开的文件的父目录之一中找到配置文件,而结点的问题使我的程序错过了配置文件。
MSDN表示FLT_FILE_NAME_OPENED
返回“打开此文件的句柄时使用的名称”。我认为它应该给我\Device\HarddiskVolume2\a\b\b.txt
而不是\Device\HarddiskVolume2\b\b.txt
。我想念什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句