2013-03-18 19 views
6

我最近被問到如何/如果可能的話,可以做到這一點。我不確定這是否有可能,而且我一直在尋找它。如何使一個C++程序偵聽系統命令

基本上我們以Windows爲例,有一個關閉計算機的系統命令。比方說shutdown -s -t 30 -c "Shutdown"

有沒有辦法編寫一個程序來偵聽shutdown命令,然後運行shutdown -a來響應中止該命令?

總之,你可以讓它監聽計算機上的某些系統命令並執行系統命令作爲響應嗎?

+0

Windows有它傳遞的各種消息。一個是「WM_QUERYENDSESSION」。當你知道你可以主動調用'shutdown -a'。請查看此頁面瞭解有關API掛接的更多詳細信息http://www.codeproject.com/Articles/2082/API-hooking-revealed – RedX 2013-03-18 13:39:44

+0

請注意,在Windows級別沒有'shutdown' **命令**。有一個Windows程序'Shutdown.EXE',它知道要調用哪個基本的Windows API。但它不是唯一知道這一點的程序。例如。 Explorer.EXE(負責開始菜單)也知道它。所以檢測'shutdown.EXE'不會影響Explorer.EXE關閉。 – MSalters 2013-03-18 15:31:53

回答

1

這確實是可能的。但是,您的示例可能不是描述通用問題的最佳例子。 Windows中有應用程序可以偵聽的會話事件,並且shutdown is one of them。畢竟,shutdown.exe不是唯一可以要求Windows關閉的應用程序。但是,一般來說,正在執行的命令的「監聽」應用程序必須與操作系統緊密集成。您可以想象,防病毒軟件正是如此,以防止執行「糟糕」程序。我不熟悉Windows技術,但會想象掛鉤執行二進制文件的Windows系統調用是實現它的方法。當然,這需要「管理」權限,甚至可能需要編寫一個內核模塊。

1

你可以這樣說:

  1. 檢查程序退出。
  2. 如果是,那麼取消程序退出調用並執行system("shutdown -a);
  3. 否則,做你想做的。

那麼,可能有更多複雜的方法來做到這一點。我同意@ VladLazarenko的回答;像防病毒軟件一樣的程序不斷監聽系統命令。但我想這需要對API有深入的瞭解。這只是一個簡單的方法來做到這一點。如果你不是新手,那麼你必須訪問這個鏈接,http://www.codeproject.com/Articles/2082/API-hooking-revealed(來自@RedX的評論)。祝你好運! :)