Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建文件路径与磁盘路径相同的虚拟文件系统_C++_Windows_Filesystems - Fatal编程技术网

C++ 如何创建文件路径与磁盘路径相同的虚拟文件系统

C++ 如何创建文件路径与磁盘路径相同的虚拟文件系统,c++,windows,filesystems,C++,Windows,Filesystems,我需要在内存或磁盘上创建文件系统类型的东西,它可以像磁盘上的文件一样访问,它的路径可以在fopen()等函数中使用 详情: 我正在使用AddFontResourceEx函数在应用程序中加载字体。因为此函数需要文件路径,所以文件需要显示在磁盘上。但我有一个要求,用户不能访问/查看字体文件 我尝试了AddFontMemResourceEx函数,但加载的字体不可枚举,因此用户无法在应用程序中看到该字体。我还尝试使用一些创建VFS的库,但它们的工作方式类似于数据库,即您可以创建文件/目录并访问它们。但不

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

详情: 我正在使用AddFontResourceEx函数在应用程序中加载字体。因为此函数需要文件路径,所以文件需要显示在磁盘上。但我有一个要求,用户不能访问/查看字体文件

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


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

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

如果您没有得到正确的答案,可能您没有问正确的问题

你的文章标题提到了“虚拟文件系统”,但是。后来,您提到“使用字体”

“虚拟文件系统”是一个含糊不清的术语,有几种用法。

一种常见情况是,向O.S.添加设备或网络

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

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

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

其中一些作为扩展层在实际文件系统和编程文件系统之间工作

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

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

看来你的情况和我的例子很相似

您想要一个“虚拟文件系统”库做什么

<>我见过网上的ONB,几个图书馆,C++,开源,免费软件,商业版。 这取决于你想做什么,找出哪个库更适合你的案例


祝你好运

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

如果这足以让他们难以看到字体文件,您可以尝试以下方法:

  • 在临时文件夹中创建一个目录,对当前用户只有写权限,对其他任何人没有权限

  • 创建具有长、复杂、加密随机名称且具有当前用户完全权限的子目录。(每次名称都应不同。)

  • 将字体文件写入子目录并加载

  • 删除字体文件并删除两个目录

  • 整个过程应该只需要几分之一秒,这会让用户很难覆盖权限并检索文件。如果他们使用调试器一步一步地完成程序,那么我想你就不走运了,但正如我已经指出的,没有什么能阻止所有人


    另一种可能的选择是,只使用AddFontMemResourceEx,忍受字体不可枚举的事实。您只需更改代码,以便无论在何处枚举字体,它都会手动将您的字体添加到列表中。

    开始查看为什么不在临时文件中使用字体?如问题中所述,AddFontResourceEx需要将文件路径作为其参数之一。所以我只想保护字体文件不被用户使用。或者通过使用一些复杂的东西,比如VFS,或者通过加密。如果你对此有任何想法,请分享。感谢您刚才提到的回复,但问题是如果加载的字体处于活动状态,则应用程序不允许删除该字体。谢谢你的回复。