碰到一個比較郁悶的問題,我有一個行程,運行時動態分配了一些子行程(這些行程沒有原始碼,不可修改),在我的主行程被任務管理器被殺死時,要保證這些子行程同時被殺掉。起初我通過信號機制來實作,后來發現通過信號量無法捕獲到任務管理器中結束行程的信號量,后來知道這里是通過TerminateProcess實作的,所以現在想到的方法是hook TerminateProcess,在系統呼叫TerminateProcess之前,通過行程之間的通信,與我在主行程中創建的一個執行緒進行互動,執行緒收到訊息后,殺死子行程,然后告訴hook函式,已經ok了,此時hook函式呼叫系統的TerminateProcess函式,關閉主行程。
不知道大家有沒有什么好的方法,我覺得這樣很麻煩,但是又想不出別的好方法來。
uj5u.com熱心網友回復:
不可以在自己的 WM_CLOSE 里進行處理嗎?應該是收到這個訊息的吧uj5u.com熱心網友回復:
恩 沒有視窗的 不是gui形式的,通過任務管理器關閉行程時,想在行程被殺死之前做一些處理,但是windows下不知道有沒有什么好的辦法捕獲這樣的信號
uj5u.com熱心網友回復:
CONSOLE 型別的程式,也應該有相應機制的吧,參考下下面這個頁面http://bbs.pediy.com/archive/index.php?t-45183.html 最后的示例?應該是可以接受到 CTRL_CLOSE_EVENT 通知的。uj5u.com熱心網友回復:
你說的hook TerminateProcess并不可靠,即便一定調該函式來結束行程,但任何程式都可以調該函式,你僅僅勾住任務管理器的TerminateProcess并不管用,比方說人家可以用xuetr、諾頓任務管理器、procexp等。在3環,你很難做一個全域的函式鉤子,當然客戶機就運行你這個程式,那另說。正確的做法是你給子行程附加一個dll(或者修改exe代碼),該dll的內容很簡單,就是和主行程心跳,收不到就自己結束自己。既然你能夠給任務管理器寫鉤子,說明拉起dll的技術你已經有了,主要是你的思路的問題。
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/129086.html
標籤:Windows客戶端使用
上一篇:公司局域網劃分問題。
