我的目标是保存正在运行的进程状态,然后从这一点开始。
这个没必要从这个确切的时刻开始状态,让我们说5秒后保存也是好的。问题是,我无法改变这个外部程序的代码,我甚至不知道它的架构。
我有资源从内存中将整个程序保存到磁盘,但我需要一些提示,从哪里开始。我不能使用像Virtual Box这样的虚拟机来保存整个操作系统的状态,程序可以用c ++或c或c#编写......
答案 0 :(得分:2)
我将与其他所有人一致,在Windows上无法做到这一点。
您可以使用debugging API挂钩进程并使用ReadProcessMemory将程序的内存保存到磁盘。但这只是它的用户模式状态,而不是它的内核模式状态 - 你无法访问它的内核模式状态(包括但不限于文件句柄,GDI对象,网络资源,线程......) - 这是隐藏的完全在Windows内核中。更不用说如果你以某种方式得到那个状态,就没有办法恢复它 - 你不能只创建一个空白进程然后将内存复制回来并让它从它停止的地方开始。
在没有操作系统支持的情况下,没有办法做到这一点有很长的路要走,而且Windows没有。
您确定无法使用虚拟机,因为这确实是您唯一的选择。
答案 1 :(得分:0)
在一般情况下无法做到这一点。 Windows具有整个操作系统的保存和恢复功能(以前称为休眠,但我不知道新名称),但是没有办法对一个进程执行此操作。
答案 2 :(得分:0)
某些操作系统具有此功能。它被称为checkpoint restart。由于必须保存操作系统内部数据,因此您必须检查特定操作系统是否支持它。仅仅通过外部程序就无法做到。