2009-08-07 121 views
4

我可以通過使用SuspendThread()掛起另一個進程的線程。有什麼辦法可以同時暫停執行該過程? 如果是,請張貼代碼。暫停執行遠程進程(C,Windows)

謝謝。

PS: 既然你會問「爲什麼你要這樣做」我會在這裏發佈。 我正在處理不再維護的遺留軟件。我無法訪問源代碼。現在我需要它暫停,直到文件充滿數據,然後恢復執行。

回答

2

唯一的方法是暫停該進程的所有線程。

如果你想看到實際的代碼,請檢查示例here

+0

會暫停過程本身?我試着暫停所有線程,但主進程仍然處於活動狀態。 – wonderer 2009-08-07 13:43:48

+0

一個進程包含一個或多個線程,這些線程實際上執行了進程中的代碼(從技術上說,進程不運行,線程也這樣做)。 – 2009-08-07 13:48:10

+0

太好了。感謝您的解釋 – wonderer 2009-08-07 13:51:43

0

>唯一的方法是暫停該進程的所有線程。

編號
使用未記錄的內核apis(自NT 3.1以後導出)暫停Pid。

+0

感謝您的意見,但只是說「使用無證API」不會給我任何答案。如果您知道任何未公開的API,請發佈並提供一些示例代碼。 – wonderer 2009-08-10 12:48:45

0

如果進程擁有或產生了許多線程,可以快速或異步執行,那麼您的主題將與SuspendThread()競爭。

完成同樣事情(即過程範圍)的一種方法是作爲調試器附加到目標進程DebugActiveProcess(),然後簡單地調用DebugBreakProcess。當進程處於中斷點時,將不會創建新線程,並且所有執行,進程範圍內的都將停止。