咱搞開發的也挺難的
有時候,編寫程序的人與實際使用程序的人之間一直在做所謂的」互相對抗」。
例如,你經常會看到諸如」我想開發一個程序,它需要一直運行,而且用戶無法結束它?」這樣的問題。現在,讓我們假設確實有一種方法能實現這一點。但是請問問自己,」如果真的可以這樣,那世界會變成什麼樣呢?」
好吧,那麼我們就會有了一些無法被結束的程序,例如我們叫它xyz.exe。現在假設你是這個程序的用戶。當程序xyz.exe某些操作已經出現了嚴重的問題,因此你想退出它。但這個時候,程序不會讓你成功退出。因此,你嘗試強制結束它的進程,但也無法成功。下面是我可以想到的幾種程序開發者和用戶之間的軍備競賽:
開發者:」我不希望任何人強制結束我的程序。」用戶:」我如何強制結束這個程序?」
開發者:」我想彈出一個對話框引起用戶的注意。」用戶:」我如何才能不讓彈出的對話框轉移我的輸入焦點?」
開發者:」我不希望能人和刪除這個問題。」用戶:」我想刪除這個文件。」
開發者:」我不希望我的進程顯示在任務管理器中。」用戶:」如何查看計算機上正在運行的所有程序?」
最終,你必須確定哪一方勝出,Windows決定讓用戶控制自己的程序和數據,並使管理員控制自己的計算機。因此,用戶可以強制結束掉他們想要的任何進程(當然,要有具有足夠的特權),可以阻止任何程序轉移焦點,並且可以刪除他們想要的任何文件(當然,要有具有足夠的特權)。
程序可以嘗試使自己更難被強制結束(拒絕PROCESS_TERMINATE訪問,拒絕PROCESS_CREATE_THREAD訪問,以便人們無法創建RemoteThread(EndProcess),拒絕PROCESS_VM_WRITE,這樣人們就不會向你的程序堆棧亂寫東西,拒絕PROCESS_SUSPEND_RESUME,因此用戶就不能暫停你的進程),但最終你無法阻止他們升級到Debug特權,調試您的進程並將EIP移至」ExitProcess」。請注意,你可以根據需要殺死CSRSS.EXE和WINLOGON.EXE這兩個系統核心進程,雖然你的系統會崩潰,但是,這確實是你可以做到的。(請先保存你的工作!)
另一個要問自己的問題是:」如何防止病毒做同樣的事情?」
如果有一種方法可以執行這些操作,則病毒可以利用它們,並使自身對任務管理器不可見,不可刪除且不可殺死。顯然你不想要那樣,對吧?
總結
在計算機世界,用戶可以做任何他想做的事情,當然,先得有權限。
最後
Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。本文來自:《The arms race between programs and users》