创建第三方应用程序所需的虚拟化文件系统目录

Create a virtualized file-system directory expected by a third-party application

我对 Windows 中的内存虚拟化可能性有疑问。场景如下:

  1. 我有第 3 方应用程序(无法访问他们的代码或修改它),它要求 C:\PathToApp\AwesomeApp\DataDir

    中的数据文件
  2. 我想制作一个加载器来打开这个应用程序,当应用程序尝试访问 DataDir 时,它会从加载器内存中加载(不保存到驱动器),所以所有请求至 DataDir 被拦截,所有操作仅在内存中完成。

是否有 Windows API 允许我这样做?实际上,我想在加载程序中创建一个虚拟化目录,它会诱使第三方应用程序认为真实的文件系统目录存在于硬编码位置。

Windows Projected Filesystem (ProjFS) 正是允许这样做。

The Windows Projected File System (ProjFS) allows a user-mode application called a "provider" to project hierarchical data from a backing data store into the file system, making it appear as files and directories in the file system. For example, a simple provider could project the Windows registry into the file system, making registry keys and values appear as files and directories, respectively. An example of a more complex provider is VFS for Git, which is used to virtualize very large git repos.

这里 a sample project on GitHub 实现了 read-only“注册表文件系统 (RegFS)”。它使用 ProjFS 将注册表项映射到文件夹并将注册表值映射到文件。

请注意,ProjFS 是可选组件,仅受 Windows 2018 年 10 月 10 日更新(版本 1809)及更高版本支持。