obe*_*iro 3 windows filesystems winapi adobe activex
好吧我写了和使用Adobe ActiveX控件显示PDF文件的应用程序.
Adobe ActiveX控件仅从文件系统加载文件.所以我需要为这个控件提供一个文件路径.
问题是我不想将PDF文件存储在文件系统上.活动暂时!我不想将我的PDF文件存储在内存中,我想使用Adobe ActiveX控件.
所以我有:
1)一种在文件系统上伪造文件的方法.所以这个控件会"认为"有一个文件,但会从内存中加载它
2)一种在文件系统上创建仅对一个应用程序"可见"的文件的方法,因此我的PDF控件可以加载它,而其他用户甚至都看不到它.
3)其他的东西
PS:我不是要"完成我的家庭工作",我只是问 - 有办法做到这一点吗?
你几乎可以做到(意思是:不,你不能,但你可以做一些接近的事情).
创建一个文件,FILE_ATTRIBUTE_TEMPORARY 并在原则上创建一个文件,暂时的.但是,只要有足够的缓冲区缓存(除非您的文件是几十到几百兆字节,通常情况通常如此),系统将不会写入磁盘.这不仅仅是意外发生的事情,而是这个标志的实际指定行为.
此外,指定0为共享模式并且FILE_FLAG_DELETE_ON_CLOSE会阻止任何其他进程打开您的文件,只要您保持打开状态,即使有人知道它在那里,并且文件将在您关闭时"消失".即使您的应用程序崩溃,操作系统也会在您身后清理(如果DRM是原因).如果您处于超级偏执模式并且担心在您的文件存在时系统蓝屏,您还可以安排待处理的移动.如果系统崩溃,这将在引导期间删除该文件.
最后,给定NTFS,您可以在任何文件甚至目录上创建具有随机,优选唯一名称(例如文档的SHA1或UUID)的备用流.目录上的备用流是......一种讨厌的黑客,但完全合法,它们工作得很好,并且不会出现在资源管理器中.这不会真正使您的文件不可见,但几乎如此(几乎在所有实际方面,无论如何).如果你是一个好公民,你会想要使用系统临时文件夹来做这样的事情,而不是程序文件夹或你不应该写的其他地方.
创建备用流也很容易,只需使用普通文件或目录名称,并附加冒号(:)和所需流的名称.无需额外的API.
除此之外,它变得有点难.你当然可以创建类似ramdisk的东西(虽然很难隐藏它),或者尝试使用其中一个内存流函数来欺骗应用程序从内存缓冲区读取文件的指控......但这不是一件小事.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |