有没有办法在文件系统上伪造文件或写一个文件只能看到我的EXE文件

好吧,我写和使用Adobe ActiveX控件来显示PDF文件的应用程序。

Adobe ActiveX控件仅从文件系统加载文件。 所以我只需要提供一个文件path到这个控制。

问题是我不想将PDF文件存储在文件系统上。 活动临时! 不想将我的PDF文件只存储在内存中 ,我想使用Adobe ActiveX控件。

所以我nead:

1)在文件系统上伪造文件的一种方法。 所以这个控件会“认为”有一个文件,但会从内存中加载它

2)在文件系统上创build文件的方法,只有一个应用程序“可见”,所以我的PDF控件可以加载它,其他用户甚至不会看到它。

3)别的东西

PS:我不是要“完成我的家庭工作”,我只是问 – 有没有办法做到这一点?

几乎可以做到这一点(意思是说,不,你不能做,但你可以做一些接近的事情)。

使用FILE_ATTRIBUTE_TEMPORARY创建一个文件原则上暂时创建一个文件。 但是,只要有足够的缓冲区缓存(通常总是这样,除非您的文件是几十到几百兆字节),系统将不会写入磁盘 。 这不仅仅是偶然发生的事情,而是这个标志实际指定的行为。

此外,指定0作为共享模式, FILE_FLAG_DELETE_ON_CLOSE将防止任何其他进程打开文件,即使有人知道它在那里,文件在关闭时也会“消失”。 即使您的应用程序崩溃,操作系统也会清理干净(如果DRM是原因)。 如果您处于超级偏执狂模式,并且担心系统会在您的文件存在的情况下进行蓝屏,那么您还可以安排一个挂起的移动。 这会在系统崩溃的情况下在启动时删除文件。

最后,给定NTFS,您可以在任何文件或目录上创建一个具有随机优选唯一名称(如文档的SHA1或UUID)的备用流。 在目录上的备用流是一种讨厌的黑客,但完全合法,他们工作得很好,并没有出现在资源管理器。 这不会真的让你的文件看不见,但几乎如此(几乎在每一个实际的方面,无论如何)。 如果你是一个好公民,你会想要使用系统临时文件夹这样的事情,而不是程序文件夹或其他你不应该写的地方。
创建一个替代流也很简单,只需使用正常的文件或目录名称,并追加一个冒号(:)和所需流的名称即可。 没有额外的API需要。

除此之外,它变得很难。 当然,你也可以创建一个类似于ramdisk的东西(虽然很难隐藏它),或者尝试使用其中的一个流内存函数来欺骗一个应用程序从一个内存缓冲区读取文件的指示…但这不是小事。

如果某个文件系统需要传递给另一个应用程序,则不能将其隐藏/限制在某个进程中。 任何你的应用程序可以看到,在同一个特权级别的任何其他事物也可以看到/访问。 你可能可以锁定它,但如何取决于你要防范的原因。

请记住,用户的PC是他们的,而不是你的,所以他们可以完全访问它的一切。

您可以创建一个虚拟磁盘并将其访问权限限制在特定的应用程序中。 这样做,你将不得不写一个文件系统驱动程序或文件系统过滤器驱动程序。 两者都在内核模式下工作,并且编写和维护都非常棘手。 我们公司提供的组件可以让您避免自己编写驱动程序,并以用户模式编写业务逻辑(我们提供这些产品的驱动程序)。

你最明显的选择是摆脱Adobe Reader控制,并使用一些显示PDF的第三方组件,并可以从内存中加载它们。

但是一般来说,一个聪明的黑客将能够捕获你的数据,除非你有(a)非标准的数据格式,和/或(b)动态地从服务器流式传输数据,而不是把完整的数据保存在计算机上。 这些也不是防弹解决方案,但它们使得黑客的工作更加困难。