2010-05-27 41 views
0

我的目標是保存運行進程的狀態,並在以後從此開始。保存外部運行程序的狀態

這是沒有必要必須是國家從這個確切的時刻,讓我們說節省5秒後也很好。問題是,我無法改變這個外部程序的代碼,我甚至不知道它的架構。

我有資源,整個程序保存到從內存盤,但我需要一些技巧,從哪裏開始。我不能使用任何VM虛擬像盒子保存整個操作系統的狀態,程序可以寫在C++或C或C#...

回答

2

我要同意其他人,在Windows上沒有辦法做到這一點。

您可以使用debugging API掛鉤到過程,並使用ReadProcessMemory到程序的內存保存到磁盤。但這只是它的用戶模式狀態,而不是它的內核模式狀態 - 而且你無法訪問它的內核模式狀態(包括但不限於文件句柄,GDI對象,網絡資源,線程...) - 這是隱藏的完全在Windows內核之內。更不用說,如果你以某種方式獲得了這個狀態,就沒有辦法恢復它 - 你不能只是創建一個空白的進程,然後將內存複製回來,並讓它從中斷的地方開始。

那是說有沒有辦法做到這一點無需操作系統支持和Windows不具有很長的路要走。

你確定你不能用戶的虛擬機,因爲這真的是你唯一的選擇。

0

有沒有辦法在一般情況下做到這一點。 Windows對整個操作系統具有保存和恢復功能(以前稱爲休眠,但我不知道新名稱),但是沒有辦法對一個進程執行此操作。

0

某些操作系統具有此功能。它被稱爲checkpoint restart。由於它必須保存操作系統內部數據,因此您必須檢查您的特定操作系統是否支持它。只有一個外部程序才能做到這一點。