2015-02-05 71 views
1

有沒有任何可能的方法來保護EXE不被中止?C++保護進程免於被暫停

請注意,我是應用程序的所有者。

+0

「暫停」你的意思是退出應用程序? – 2015-02-05 22:05:02

+0

不,我的意思是暫停線程 – 2015-02-05 22:09:11

+0

參考 - [掛起線程執行](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686342%28v=vs.85%29.aspx)。 *「這個函數主要是爲調試器設計的。」* – 2015-02-05 22:13:51

回答

0

根據msdn。創建線程時,您需要禁用THREAD_SUSPEND_RESUME訪問權限。這將防止它被暫停

0

有一些工具,如Sysinternals ProcessExpert,允許您暫停任何進程。如果用戶擁有管理員授權,則無法避免這種情況。

This SO answer顯示了三種解決方案來暫停Windows進程。

但是,有一種方法可以使這非常困難:解決方案包括爲您的應用程序有一個陰影過程。所述應用和所述陰影處理然後應監視彼此的暫停狀態並恢復必要時掛起的進程:

  • 作爲工藝已經到另一後暫停之一,這雙方法確保了兩個過程中的一個是積極並可以防止暫停。然而,這種持續的監控是CPU消耗,所以你真的認爲是否有必要這樣做,並且可以接受你的應用程序的性能。

如果要防止暫停以避免使用調試程序對代碼進行逆向工程,則可以使用另一個更有效的選項。您可以在關鍵代碼段中插入多個定時器調用,並檢查異常執行時間是否顯示暫停/調試,如果是這種情況,則停止代碼。