程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 剖析Windows任務管理器開發原理與實現

剖析Windows任務管理器開發原理與實現

編輯:vc教程

  Windows2000/XP內含的任務管理器(Taskmgr)相信大家都熟悉吧,相比之下XP裡的要比2000功能更加強大,返回的信息也更加的詳細,不過您是否覺得還有很多希望獲得的消息沒有包含在裡面嗎?您是否覺得Windows的系統管理工具箱裡的東西太分散了嗎?下面就讓我們看看它們的開發原理,並動手實現一個真正的任務管理器。現在我們是調用Win32API來實現這些功能的,但是大家都說MS隱藏了太多的細節,以後我們將討論更多關於Windows內核的東東。

  可能大家對任務管理器裡最熟悉的功能要數進程管理了,常常我們在懷疑中了病毒/木馬的時候都會看看任務管理器裡有沒有什麼特別的進程在運行,所以進程查看器應該是一個非常重要的功能。我們除了需要獲得進程的名稱外,還有什麼呢?當然包括它的進程標識符(ProcessID),用戶信息(UserName),CPU使用時間(CPUTime)和存儲器的使用情況(MemoryUsage),還有它的優先權(BasePriority)。CPU和Memory信息可以幫助我們分析進程的運行情況,而優先權可以表示進程在CPU分配處理器使用時的優先情況。這些都是通用的進程信息,讓我們再看看其他的信息吧。進程的父進程標識符(Parent Process ID),創建時間(Create Time),程序名稱等在很多情況下也是我們關心的信息。我們再看看進程相關的性能信息。在Windows下通常有兩種模式:內核模式(Kernel: Level 0)和用戶模式(User: Level 3),進程往往在兩種模式中來回切換,所以可以獲得進程在內核模式和用戶模式各自的使用時間。同時還包括進程相關的工作集(WorkingSet),分頁池(PagedPool),非分頁池(NonePagedPool)和頁面文件(PageFile)信息。進程相關的I/O操作包括讀/寫/其他等動作,我們可以獲得這些操作的次數和傳送數據的數量。

  如果您懷疑某個進程是木馬,那您還想獲得哪些信息呢?簡單的進程名稱應該是不夠的吧!我們希望獲得進程的實際程序的路徑,這樣可以幫助我們判斷究竟是那個程序在運行。前段時間不是在討論什麼進程隱藏的,其中一種就是“創建遠程線程”,而注體往往又是以動態鏈接庫(DLL)的形式存在的,我們就希望看到某個具體進程所包含的所有模塊(Module),常常是DLL也。“線程”是一個大家熟悉的名字,它是Windows系統中的實現體,而進程則是線程運行的環境。一個進程到底創建了多少線程了?我們同樣可以枚舉進程內部的所有線程信息。如果您發現一個木馬進程,下面的動作就應該是分析它的運行機制(如果您對它感興趣),不過最終您還是要將它結束吧。在Windows2k下,很多系統關鍵進程在TaskMgr裡是不能被結束的,不過現在您不用擔心了。好的,對進程的操作當然就包括結束進程。如果您用過中文的XP,您是否常常遇到任務欄“假死”的情況,雖然您的電腦沒有掛掉,但卻動彈不得,那好我們也同樣可以將任意的進程掛起來,不管您對它做什麼動作(除了結束),它都不會有任何的反應。有了掛起進程,同樣我們也可以將進程從“掛起”狀態激活哈。

  桌面窗口是大家接觸得最多的交互界面了,您是否想獲得每個窗口的標題信息呢?當然我們還可以獲得與窗口關聯的進程,線程與窗口句柄屬性。如果大家對VC比較熟悉,就應該知道其中的一個SPY++工具吧,它就可以獲得桌面窗口,進程和線程的詳細信息,不過現在就不用打開這個,打開那個了,通通搞定了!

  系統性能是每個用戶關心的話題。它包括整個系統當前創建的句柄,進程以及線程的數目。還有物理存儲器(Physical Memory)的總量和使用情況,系統高速緩存(System Cache)的大小,存儲器保留與提交(Commit Charge)狀況,當然還有核心分頁/非分頁池(Kernel Memory)的使用情況。幾乎包括了Windows系統下存儲器管理的大部分信息。

  雖然現在硬盤的價格已經很低了,不過我還是在用6.4G的小東東,所以常常遇到“Low Disk”!我們常常要看看硬盤的使用情況,不過每次都要進入我的電腦,太麻煩了。而我們現在可以一次了解所有磁盤的容量和當前使用情況,同時還有它們的格式類型(如FAT,NTFS,CDFS等)和磁盤標簽。

  說到環境塊,或許不是那麼熟悉吧,它包含一些環境變量,而每個環境變量對應一個/多個字符串,您可以在控制面板的SYSTEM/Advanced(系統/高級)裡對它們進行設置,包括添加新的環境變量,刪除和編輯系統環境變量。

本文示例代碼或素材下載

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved