如何创建和恢复内存映像转储

时间:2016-08-10 21:19:05

标签: c++ windows winapi memory

所以,我有一个可疑编码的应用程序,需要以特定方式恢复大量数据结构。

我必须实现一次性撤消,将应用程序恢复到非常复杂的操作之前的状态。

我的团队成员建议保存文件并将其恢复以确保所有内容都可以恢复。这样做是一项耗费大量资源且耗时的操作。通过所有解析和事件处理,文件保存和加载可能需要一分钟或更长时间。

所以我有这个想法:如果我可以以某种方式保存内存状态,就像在转储文件中一样,我可以保存图像状态并在必要时还原它。

这可能吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

一般情况下这是不可能的。如果您尝试过,它可能会以微妙和不可预测的方式失败。以下是一些潜在的问题:

  1. 进程可能存储其进程ID和线程ID。当您恢复它时,没有好办法确保它获得相同的ID。
  2. 该进程可能已锁定文件。没有办法确保这些文件处于相同的状态。
  3. 该进程可能打开了以后不再存在的文件。考虑临时文件。
  4. 进程可能在内部或甚至其他进程中打开套接字或管道。
  5. 该进程可能已经操纵了与其他进程通信的共享状态,并且在处于不一致状态的该共享状态停止进程可能会中断其他进程。
  6. 当您尝试重新启动进程时,进程可能会锁定可能不存在的DLL或其他可执行文件。
  7. 还有很多其他问题。通常,提供应用程序保存/恢复功能的平台要么非常有限,要么他们允许应用程序执行,要么需要应用程序的密切合作。