2012-12-15 76 views
-1

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

+9

'这应该是可能的,因为图像数据已经加载到内存中。'这是一个大胆的说法。内存不是一个大的free-for-all - 一个进程拥有的内存通常是_quite故意不能从另一个进程访问。你必须编写一个图像查看器,该图像查看器专门用于与读取的程序进行交互。硬盘解决了这个问题。 –

+0

你是否为你的浏览器编码? – marscode

+0

不,我需要通过一个数据地址或东西到pc的默认jpg查看器 –

回答

1

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

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

从你写的内容来看,你似乎希望避免将解密后的数据写入硬盘,这很好,因为写入硬盘的数据在关机后仍然存在,而RAM中的数据获胜没有生存。但是正如JasonD在他的评论中指出的那样,这可能会导致错误的安全感 - 操作系统可以随时将内存区域移动到虚拟内存中(这对硬盘也是如此)。

编辑:打开一个内存区域可能是可能的,例如,你可以试用hex editor HxD - 它可以打开和编辑进程分配的内存区域,但我不知道它是如何实现的。

+0

感谢您的建议。是否可以打开我的内存块作为一个新的驱动器 –

0

只有一种方法可以做到,它绝对不是简单的!您需要一个过滤器dirver将virtaul文件系统链接到用户空间。您可以查看“dokan”项目以获取更多信息。

如果这是一个罗科梅项目,你应该很福美来与NTFS驱动程序,因为我觉得,不支持杜坎。

我使用它,它工作正常,但我花了三个月左右进入这个东西。

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

1

正如指出的其他人,该数据存在于内存中的事实,给你什么,除非图片浏览器通过进程间通信机制,支持加载图像(我还没有看到这样的浏览器)。

那么你的选择是使用一些图像浏览库C++(它可以是一个完美的选择,BTW),或创建一个虚拟磁盘。

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

您可以创建一个虚拟磁盘,这将暴露存储在RAM中的数据,但你需要为这个内核模式的虚拟磁盘驱动器。这需要在内核模式开发方面的丰富经验。我们公司提供几种产品(SolFS操作系统版本,CallbackDisk),您可以使用它来完成任务,并且几乎不需要编程即可获得加密的内存存储。