[發明專利]一種用于解除文件占用的方法及裝置有效
申請號: | 201210361922.6 | 申請日: | 2012-09-25 |
公開(公告)號: | CN102902765A | 公開(公告)日: | 2013-01-30 |
發明(設計)人: | 張輝 | 申請(專利權)人: | 北京奇虎科技有限公司;奇智軟件(北京)有限公司 |
主分類號: | G06F17/30 | 分類號: | G06F17/30 |
代理公司: | 北京市德權律師事務所 11302 | 代理人: | 劉杰 |
地址: | 100088 北京市西城區新*** | 國省代碼: | 北京;11 |
權利要求書: | 查看更多 | 說明書: | 查看更多 |
摘要: | |||
搜索關鍵詞: | 一種 用于 解除 文件 占用 方法 裝置 | ||
技術領域
本發明涉及計算機技術領域,特別是涉及一種用于解除文件占用的方法。本發明還涉及一種用于解除文件占用的裝置。
背景技術
解除文件占用是目前一些安全軟件提供的一項功能。由于文件在被進程調用后,將不能手動進行諸如刪除改名等操作。利用這個功能可以解除進程對文件的占用,從而讓用戶可以執行刪除文件、更改名稱、移動位置等操作。
現有視窗(window)操作系統下,一種解除文件占用的方法原理如下:如果文件由某個進程打開,那么這個進程就擁有了它的句柄。使用函數ZwQuerySystemInformation(?)來枚舉句柄,將每一個句柄都用DuplicateHandle進行復制,確定句柄屬于哪個文件,如果是要找的文件,就將句柄拷貝,然后使用DuplicateHandle去關閉占用的句柄。
上述的方法在實踐中會遇到兩處難點。第一,在對打開的命名管道(named?pipe)處理的句柄調用ZwQueryInformationFile(?)的時候,調用線程會等待?pipe?中的消息,而pipe中卻可能沒有消息,也就是說,調用ZwQueryInformationFile(?)的線程實際上永久性地掛起了。第二,在拷貝句柄后,兩個句柄(我們進程的和打開文件進程的)將會指向同一個目標文件,從而文件當前的輸入輸出模式、在文件中的位置以及其它與文件相關的信息就會由兩個進程來共享。這時,甚至只是讀取文件(復制句柄或者原來句柄)都會引起讀取位置的改變,從而破壞了打開文件程序的正常運行。
雖然,上述的第一個難點可以通過如下方式解決,即目標文件的獲取不用在挑選句柄的主線程中進行,而是啟動獨立的線程并設置一個超時時間來避免掛起。但是這種方法較為麻煩,而且效率低。上述的第二個難點,需要用停止占用文件進程的線程、拷貝文件或者重新啟動占用文件的進程等方式來解決。但是這些方法不能用于許多情形,比如要在運行的系統中拷貝注冊表文件,用這種方法就不會成功。因而使用上還是有局限性。
發明內容
鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的用于解除文件占用的方法和相應的用于解除文件占用的裝置。
依據本發明的一個方面,提供了一種用于解除文件占用的方法,包括:
獲取待解除占用的目標文件的所有文件句柄;
獲取所述待解除占用的目標文件的所有文件句柄各自所屬的進程私有句柄表;
將所述目標文件的所有文件句柄的文件句柄對象由各自的進程私有句柄表中移除;
將所述目標文件的所有文件句柄的文件句柄對象的引用計數從系統中清零。
可選的,所述獲取待解除占用的目標文件的所有文件句柄包括:
獲取待解除占用的目標文件的路徑;
枚舉系統打開的所有文件句柄;
獲取所有文件句柄對應文件的具體路徑,并與待解除占用的目標文件的路徑進行匹配;
將匹配成功的文件句柄作為待解除占用的目標文件的句柄。
可選的,所述枚舉系統打開的所有文件句柄包括:
枚舉系統的所有進程;
獲取每一進程的私有句柄表;
集合所有進程的私有句柄表,獲得所有進程打開的句柄;
在所述所有進程打開的句柄中找出所有的文件句柄。
可選的,所述枚舉系統的所有進程至少包括如下步驟:
通過遍歷活動進程鏈表中每一個進程在系統內核中所表示的數據結構,實現對活動進程的枚舉,獲得進程表。
可選的,所述枚舉系統打開的所有文件句柄包括,
獲取當前進程;
獲取該當前進程的私有句柄表;
遍歷該當前進程的私有句柄表與其它進程的私有句柄表形成的句柄表鏈,獲得其它進程;
對所有獲得的進程獲取其私有句柄表;
集合所獲取的私有句柄表,獲得所有進程打開的句柄;
在所述所有進程打開的句柄中找出所有的文件句柄。
可選的,所述在所述所有進程打開的句柄中找出所有的文件句柄包括:
通過內存偏移找到各進程打開的每一句柄的句柄對象的對象頭;
在對象頭中讀取對象類型數據或者對象類型索引;
根據對象頭中對象類型數據或者對象類型索引指向的對象類型數據判斷句柄類型;
篩選出類型為文件句柄的句柄。
可選的,將文件句柄對象由進程的句柄表中移除方式包括路徑擦除或路徑更改。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京奇虎科技有限公司;奇智軟件(北京)有限公司,未經北京奇虎科技有限公司;奇智軟件(北京)有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210361922.6/2.html,轉載請聲明來源鉆瓜專利網。