C++ 从内存中加载文件

C++ 从内存中加载文件,c++,file,C++,File,我有一个加密的图像文件。现在,我的程序将读取加密文件并在一个字符数组中创建图像。现在我的问题是我需要用一些图像查看器打开图像,而不需要将图像文件写入硬盘。这应该是可能的,因为图像数据已经加载到ram中。我不知道有哪个图像查看器能够从内存区域加载图像。即使您要创建自己的图像查看器,您也必须共享内存区域,否则出于安全原因,查看器很可能无法访问您的程序内存 一种折衷方法是将图像写入硬盘上的临时目录,用图像查看器打开,然后用随机数据覆盖并在使用后删除文件(对于小文件,甚至可以在图像查看器完成加载后删除)

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

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

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

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


编辑:打开内存区域可能是可能的,例如,您可以尝试-它可以打开和编辑由进程分配的内存区域,尽管我不知道它是如何做到的。

只有一种方法可以做到这一点,而且绝对不是简单的方法!您需要一个筛选器驱动器将virtaul文件系统链接到用户空间。您可以查看“dokan”项目以获得更多信息

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

我用过它,它工作得很好,但我花了大约三个月的时间才开始使用它


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

正如其他人所指出的,数据存在于内存中的事实不会给您任何帮助,除非图像查看器支持通过进程间通信机制加载图像(我还没有看到这种查看器)

P> >您的选择是使用C++的一些图像查看库(可以是一个完美的选项,BTW)或创建一个虚拟磁盘。p> 关于内存交换到磁盘-您可以将内存标记为不可访问,但需要确保可以分配这样的内存块(对于大型映像,这是不可能的)


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

这应该是可能的,因为图像数据已经加载到ram中。
这是一个大胆的说法。内存并不是一个大的自由空间——一个进程拥有的内存通常是故意不从另一个进程访问的。您必须编写一个专门设计用于与读取程序接口的图像查看器。硬盘解决了这个问题。你自己对查看器进行编码吗?不,我需要把数据地址或东西传递给PC的默认JPG查看器,C++中没有“RAM”…人们似乎从来都不理解基本的概念,即它永远不可能公开数据,同时也使它在任何通用操作系统上保持私有。当然,在这个问题上,你会让普通人更难访问数据,历史表明,这将相应地限制愿意使用该产品的客户数量,但我也明白,这可能是有人付钱让你尝试的,众所周知,商界人士愚蠢地认为让他们的客户接受数字版权管理是个好主意。谢谢你的建议。是否可以将我的内存块作为新驱动器打开