微过滤器可以替换文件系统的一部分吗?

Can a minifilter replace part of a filesystem?

我正在开发一个微型过滤器驱动程序,它 "mounts" 在现有树中的指定目录中,例如c:\users\user\mymountpoint,并用 "device" 的内容替换从那一点开始的所有内容,其安装方式与 Linux 工作下的安装方式大致相同。现有的底层 files/file 系统本质上是 blocked/inaccessible,而微过滤器处于活动状态。

在我尝试 运行 可执行文件或打开文本文件(使用记事本)之前,一切正常。在可执行文件的情况下,Windows 给我一个弹出窗口告诉我 "This app can't run on your PC" 而无需尝试从文件中读取(尽管它确实尝试从 file.exe:Zone.Identifier 中读取,但不存在).如果我尝试从 Git Bash 执行,它会读取文件,但表示由于 "Exec format error".

而无法执行

对于文本文件,我得到“%1 不是有效的 Win32 应用程序”,同时尝试打开 Zone.Identifier 元数据。但是我可以 type file.txt 在 DOS 提示符下并且内容显示正常。

在这两种情况下,使用 Git Bash 提示,我可以 md5sum 文件,并且内容与驱动器本身上的相同文件相匹配。

我需要做些什么来通知 Windows 这部分文件系统不是 NTFS?目录或文件中是否有一些我没有 return 指示有关文件的属性?

ETA:根据@MJZ 的建议,当 运行ning notepad.exe c:\path\to\mymountpoint\file.txt.

时,我使用 Process Monitor 来监控 activity

记事本执行以下操作: - 打开包含目录
- 是否列出相关文件的文件列表
- 关闭目录
- 打开文件
- 查询卷信息
- 从文件
中查询 "AllInformation" (Notepad does not supplied enough space for the file name in this request.驱动程序填写可用的space和returns STATUS_BUFFER_OVERFLOW和所需的大小
- 关闭文件

就在此时,我收到了上述“%1”错误。如果我将 AllInformation 查询的 return 值更改为 STATUS_BUFFER_TOO_SMALL,记事本 return 会出现找不到文件的错误。

按照@MJZ 的建议,我运行 ProcessMonitor 反对记事本在我的文件系统内部和外部打开文件。不同之处在于,在工作案例中,发出了 IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION。没有向我的驱动程序发出这样的 IRP。原来我不是setting/initializing文件对象的SectionObjectPointer当文件是opened/created.