[發明專利]一種用于枚舉系統進程的方法及裝置有效
| 申請號: | 201210362962.2 | 申請日: | 2012-09-25 | 
| 公開(公告)號: | CN102945346A | 公開(公告)日: | 2013-02-27 | 
| 發明(設計)人: | 張輝;陳擎月 | 申請(專利權)人: | 北京奇虎科技有限公司;奇智軟件(北京)有限公司 | 
| 主分類號: | G06F21/56 | 分類號: | G06F21/56 | 
| 代理公司: | 北京市德權律師事務所 11302 | 代理人: | 劉杰 | 
| 地址: | 100088 北京市西城區新*** | 國省代碼: | 北京;11 | 
| 權利要求書: | 查看更多 | 說明書: | 查看更多 | 
| 摘要: | |||
| 搜索關鍵詞: | 一種 用于 枚舉 系統 進程 方法 裝置 | ||
技術領域
本發明涉及計算機技術領域,特別是涉及一種用于枚舉系統進程的方法。本發明還涉及一種用于枚舉系統進程的裝置。
背景技術
Windows任務管理器可以枚舉出系統當前的進程,并能夠根據需要選擇終止進程。為管理系統進程提供了很大的便利。
Windows任務管理器枚舉系統當前進程是通過其Native?API函數ZwQuerySystemInfomation來操作進程活動鏈表來實現的。具體的過程如下:
首先,獲取當前任一進程的指針,例如可以通過PsGetCurrentProcess()來獲取當前進程的PEPROCESS指針。
然后定位到記錄該當前進程與其它進程鏈接信息的Activelist處,具體的操作方式為ActiveList=pCurrentEprocess+0x88,即當前進程指針移動一定的步長。其中0x88為winxp?sp3下Activelist與pCurrentEprocess的步長,在不同win操作系統時該步長并不相同。
接著,以所定位的當前進程的Activelist遍歷整個進程活動鏈表(Activelistlink)上每一進程的數據結構,即可獲得當前的存在于進程活動鏈表的所有進程。
如上所述,因為windows任務管理器是基于ZwQuerySystemInformation來實現的,所以如果將進程對象從進程活動鏈表中移除,那么調用NtQuerySystemInfomation來枚舉進程的任務管理器TaskMgr.exe中就不會看到目標進程了。同時,Windows的任務調度分配器使用的另一的數據結構,也就是說,進程是否被調度執行與進程活動鏈表無關,不會因為從進程活動鏈表刪除就被CPU忽略,因此進程仍然會被執行。這很容易被一些惡意軟件或者RootKit程序利用,在進程活動鏈表上不顯示其存在,但是仍然被執行,這可能導致用戶的計算機在不知不覺中被感染病毒、植入木馬或者竊取了信息,對計算機造成潛在的或現實的威脅。因而有必要能夠查找出這種被進程活動鏈表忽略而實質上又在被執行的隱藏進程。
發明內容
鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的用于枚舉系統進程的方法和相應的用于枚舉系統進程的裝置。
依據本發明的一個方面,提供了一種用于枚舉系統進程的方法,包括:
獲取當前進程的私有句柄表;
遍歷該當前進程的私有句柄表與其它進程的私有句柄表形成的句柄表鏈,獲得其它進程私有句柄表;
根據所述獲得的其它進程的私有句柄表,獲取每一私有句柄表所對應的進程;
集合所獲得的所有進程,形成系統進程集合。
可選的,所述獲取該當前進程的私有句柄表包括:
獲取指向當前進程的指針;
由所述當前進程的指針偏移獲得當前進程的私有句柄表指針;
根據所述當前進程的私有句柄表指針定位到該當前進程的私有句柄表。
可選的,所述獲取指向當前進程的指針包括:
通過PsGetCurrentProcess()或IoGetCurrentProcess()獲得當前進程的指針。
可選的,所述由所述當前進程的指針偏移獲得當前進程的私有句柄表指針的步驟中,偏移的步長由win系統版本決定。
可選的,所述遍歷該當前進程的私有句柄表與其它進程的私有句柄表形成的句柄表鏈,獲得其它進程私有句柄表包括:
記錄所述當前進程的私有句柄表的地址;
由該當前進程的私有句柄表指針偏移獲取私有句柄表鏈上相鄰進程的私有句柄表;
判斷偏移后進程的私有句柄表地址是否與記錄的當前進程的私有句柄表的地址相同;若是,終止遍歷;
若否,按照與前述偏移相同的方向繼續執行指針偏移獲取私有句柄表鏈上的其它進程私有句柄表;直到偏移后獲得進程私有句柄表地址與記錄的當前進程私有句柄表的地址相同為止。
可選的,所述偏移的步長根據win系統的版本而確定。
可選的,還包括:對于所述獲得系統的進程中的至少一個進程,按照該進程所在的SessionProcessLinks鏈表再做遍歷,并將獲得的進程表與所述獲得系統的進程集合合并。
可選的,還包括:對于所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鏈表再做遍歷,并將獲得的進程表與所述獲得系統的進程集合合并。
可選的,還包括如下步驟:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京奇虎科技有限公司;奇智軟件(北京)有限公司,未經北京奇虎科技有限公司;奇智軟件(北京)有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210362962.2/2.html,轉載請聲明來源鉆瓜專利網。





