如何创建文件路径可以像磁盘一样访问的虚拟文件系统

时间:2012-06-07 13:56:53

标签: c++ windows filesystems

我需要在内存或磁盘上创建FileSystem类型的东西,可以像磁盘上的文件一样访问,该路径可以在fopen()等函数中使用。

详细说明: 我正在使用AddFontResourceEx函数在应用程序中加载字体。由于此功能需要文件路径,因此文件需要出现在磁盘上。但我要求用户无法访问/查看字体文件。

我尝试了AddFontMemResourceEx函数,但加载的字体不可用,因此用户无法在应用程序中看到该字体。我也尝试了一些创建VFS的库,但它们像数据库一样工作,即你可以创建文件/目录并访问它们。但是不能在AddFontResourceEx或任何其他函数中使用它们的文件路径。

我是否可以通过某种方式在内存或磁盘上创建可以通过我的应用程序访问的虚拟文件系统,我可以在创建的虚拟文件系统上写入/读取文件,并且AddFontResourceEx函数可以使用它的文件路径

3 个答案:

答案 0 :(得分:2)

它无法真正发挥作用。是的,您可以添加“虚拟”文件系统。但要么用户X可见,要么不可见。 Windows上的访问控制适用于每个用户群,而不是每个程序库。因此,如果用户X可以看到应用程序A中的字体,他也可以在应用程序B中看到它 - 即使B是Explorer.EXE。

答案 1 :(得分:0)

如果你没有得到正确的答案,也许你没有问正确的问题

您的帖子标题提及“虚拟文件系统”,但是。之后,你提到“访问字体”。

“虚拟文件系统”这是一个在几个方面使用的模糊术语。

一种常见情况,意味着将设备或网络添加到O.S。

在您的情况下,似乎是从应用程序访问。

有几种方法(“库”)可以模拟或使用文件系统。

其中一些独立于真实文件系统工作。您使用它们,将数据保存在那些“虚拟”文件夹中。文件,并从真实和虚拟数据中复制数据。

其中一些作为扩展层在真实文件系统和编程文件系统之间起作用。

示例:我使用的应用程序需要暂时快速的I.O.访问。找到一个库,当你想要创建一个文件夹或在真实文件系统中保存文件时,就完成了。

此外,我可以添加存储在内存中的“虚拟驱动器”,但可以通过文件系统操作进行访问。应用程序完成后,“硬盘驱动器”及其数据将从内存中删除。

看起来你的情况与我的例子类似。

您想要一个“虚拟文件系统”库?

我已经在网上看到了几个库,用于C ++,开源,免费软件和商业。

这取决于你想做什么,找出哪个库对你的情况更好。

祝你好运

答案 2 :(得分:0)

如果用户是管理员,如果确定了足够的话,就无法阻止他们看到字体文件。例如,他们可以对您的程序进行反向工程,以弄清楚如何生成文件并手动重复该过程以制作自己的副本。或者(即使您可以以某种方式将文件权限绑定到您的进程),他们可以将自己的代码插入到您的进程中以检索文件,或直接从内存中检索字体信息。

如果它足以让他们很难看到字体文件,你可以试试这个:

  1. 在临时文件夹中创建一个目录,该目录具有当前用户的只写权限,对其他任何人都没有权限。

  2. 创建一个子目录,其中包含长而复杂的加密随机名称,并具有当前用户的完全权限。 (每次名称都应该不同。)

  3. 将字体文件写入子目录并加载。

  4. 删除字体文件并删除两个目录。

  5. 整个过程应该只需要几分之一秒,这会使用户在某种程度上难以覆盖权限并检索文件。如果他们使用调试器单步执行程序,那么我猜你运气不好,但正如我已经指出的那样,没有什么能阻止每个人。

    另一个选择,大概就是使用AddFontMemResourceEx,并忍受字体不可枚举的事实。您只需更改代码,以便在枚举字体的任何位置手动将字体添加到列表中。