从内存加载文件

时间:2012-12-15 19:21:22

标签: c++ file

我有一个加密的图像文件。现在我的程序将读取加密文件并在char数组中创建图像。现在我的问题是我需要用一些图像查看器打开图像而无需将图像文件写入硬盘。它应该是可能的,因为图像数据已经加载在ram中。

3 个答案:

答案 0 :(得分:1)

我不知道任何能够从内存区域加载图像的图像查看器。即使您要创建自己的图像查看器,也必须共享内存区域,否则出于安全原因,查看器很可能无法访问您的程序内存。

折衷方案是将图像写入硬盘上的临时目录,使用图像查看器打开它并用随机数据覆盖它并在使用后删除文件(对于小文件,您甚至可以在图像后删除它)观众完成加载)。

从您正在编写的内容来看,似乎您希望避免将解密数据写入硬盘,这很好,因为写入硬盘的数据在关闭后仍然存在,而RAM中的数据则赢了生存下来。但正如JasonD在他的评论中指出的那样,这可能导致错误的安全感 - 操作系统可以随时将内存区域移动到虚拟内存(以及硬盘中)。

编辑:打开存储区域可能是可能的,例如你可以试试hex editor HxD - 它可以打开和编辑进程分配的内存区域,虽然我不知道它是怎么做的。

答案 1 :(得分:1)

正如其他人所指出的那样,除非图像查看器支持通过进程间通信机制加载图像(并且我还没有看到这样的查看器),否则数据存在于内存中的事实不会给你任何东西。

因此,您可以选择使用一些C ++图像查看库(可以是BTW的完美选项)或创建虚拟磁盘。

关于交换到磁盘的内存 - 您可以将内存标记为不可退回,但是您需要确保可以分配这样的内存块(对于大图像,这是不可能的)。

您可以创建一个虚拟磁盘,该磁盘将公开存储在RAM中的数据,但您需要一个内核模式虚拟磁盘驱动程序。这需要在内核模式开发方面有丰富的经验。我们公司提供多种产品(SolFS OS版本,CallbackDisk),您可以将它们用于您的任务,并获得加密的内存存储,几乎不需要编程。

答案 2 :(得分:0)

只有一种方法可以做到这一点而且绝对不容易!您需要一个过滤器驱动程序来将virtaul文件系统链接到用户空间。您可以查看“dokan”项目以获取更多信息。

如果这是一个商业项目,你应该非常熟悉NTFS驱动程序,因为我认为dokan不受支持。

我使用它并且工作正常,但我花了大约三个月的时间来研究这些东西。

如果它不是“高安全性应用”,您可以使用临时文件。