專利名稱:釋放句柄的方法、裝置及文件刪除系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機領(lǐng)域,尤其涉及計算機中釋放待刪除文件的句柄的方法 及裝置。
背景技術(shù):
無論是可感染系統(tǒng)的惡意代碼還是隱藏的木馬文件,它們 一般會在系統(tǒng)啟 動的時候加載私有代碼到系統(tǒng)內(nèi)部,從而對系統(tǒng)造成破壞。如果一個病毒文件 以上述方式被植入操作系統(tǒng)中或被植入到正在運行的進程中,該文件的句柄在 沒有釋放的情況下,將無法刪除此類病毒文件。有些正在編輯的文件由于裝載 該文件的進程被意外中止,導(dǎo)致該文件的句柄沒有釋放,也會造成文件無法刪
除。如果病毒文件無法刪除,將會對系統(tǒng)造成破壞,例如出現(xiàn)惡意占用系統(tǒng) 資源,惡意重啟計算機,死機等情況。
現(xiàn)有技術(shù)提供了兩種方法來刪除此類沒有釋放句柄的文件,具體如下
第一種方法將文件存放在磁盤上時需要把該文件寫入文件配置表(FAT, File Allocation Table),通過從FAT表查找到文件名對應(yīng)的文件數(shù)據(jù)結(jié)構(gòu), 通過遍歷此數(shù)據(jù)結(jié)構(gòu)對文件內(nèi)容進行改寫,以損壞文件,被損壞的文件在系統(tǒng) 重啟后將無法^皮進程加載,此時可對該文件進行成功刪除。
發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)上述第一種方法至少存在以下缺點 在磁盤上進行修改文件的數(shù)據(jù)內(nèi)容,但是該文件被調(diào)用時已經(jīng)將句柄加載到內(nèi) 存中,所以只有當(dāng)系統(tǒng)重啟后以釋放內(nèi)存中的句柄,才能完成刪除功能。并且, 對進程加載的數(shù)據(jù)文件進行修改,進程運行會報錯退出。
第二種方法當(dāng)需要刪除一個文件時,首先查看此文件是否被其它進程占
用,如果有進程占用該文件,在內(nèi)核對象中查找該文件的句柄,當(dāng)找到句柄后, 直接釋放內(nèi)核對象中文件的句柄,這樣就可以釋放掉進程占用該文件時調(diào)用的 句柄,以^f更刪除該文件。
發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)上述第二種方法至少存在以下缺點 忽略了加載此文件的進程,直接在內(nèi)核對象中釋放文件的句柄,可能導(dǎo)致占用 該文件的進程報錯退出;或者,需要在特定條件下調(diào)用此文件的進程在特定條 件出現(xiàn)時報錯退出。
發(fā)明內(nèi)容
本發(fā)明的實施例提供一種釋放句柄的方法、裝置及文件刪除系統(tǒng),在不需 要重啟系統(tǒng)的情況下能夠刪除文件,并且使得進程不會由于句柄的不正確釋放 而報錯退出。
本發(fā)明的實施例提供一種釋放句柄的方法,包括 獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息; 判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相同; 若所述名稱信息相同,則通知所述進程釋放所述名稱信息對應(yīng)文件的句柄 信息。
本發(fā)明的實施例還提供一種釋放句柄的裝置,包括 獲取單元,用于獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息; 判斷單元,用于判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信 息是否相同;
通知單元,用于在所述名稱信息相同時,通知所述進程釋放所述名稱信息 對應(yīng)文,的句柄信息。
本發(fā)明的實施例還提供一種文件刪除系統(tǒng),包括
文件名獲取裝置,用于獲取待刪除文件的名稱信息;
句柄釋放裝置,用于獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息;判 斷所獲取到的名稱信息與待刪除文件的名稱信息是否相同;并在所述名稱信息 相同時,通知所述進程釋放所述名稱信息對應(yīng)文件的句柄信息;
文件刪除裝置,用于將所述^f寺刪除文件刪除。
本發(fā)明實施例提供的釋放句柄的方法及裝置,首先在進程本身調(diào)用的文件 中獲取句柄信息和名稱信息,然后將獲取到的名稱信息與待釋放句柄對應(yīng)文件 的名稱信息對比,如果名稱信息相同,則表示該文件的句柄信息需要被釋放, 本發(fā)明實施例通知進程本身將需要釋放的句柄信息釋放。與現(xiàn)有技術(shù)相比,本 發(fā)明實旅例避免了在內(nèi)核對象中查找并通過內(nèi)核對象直接釋放句柄,而是通過 進程調(diào)用的文件來查找,并有進程本身來釋放句柄,是一種正確且安全的釋放 句柄方法,不會導(dǎo)致占用該文件的進程由于句柄的不正確釋放而報錯退出。同 時由于句柄被正確釋放了,故而可以執(zhí)行對應(yīng)文件的刪除操作,不需要等到系 統(tǒng)重啟后再來刪除對應(yīng)文件。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施 例或現(xiàn)有技術(shù)描述中所需要使用的附圖作筒單地介紹,顯而易見地,下面描述 t的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付 出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例1中釋放句柄的方法的流程圖2為本發(fā)明實施例2中釋放句柄的方法的流程圖3為本發(fā)明實施例3中釋放句柄的方法的流程圖4為本發(fā)明實施例4中第一種釋放句柄的裝置的框圖5為本發(fā)明實施例4中第二種釋放句柄的裝置的框圖; 圖6為本發(fā)明實施例4中第三種釋放句柄的裝置的框圖; 圖7為本發(fā)明實施例5中文件刪除系統(tǒng)的原理圖。
具體實施例方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清 楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是 全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造 性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
在應(yīng)用程序的進程中,當(dāng)需要打開應(yīng)用文件時,需要通過0penFile (打開 文件)函數(shù)來打開應(yīng)用文件。0penFUe函數(shù)在成功打開一個應(yīng)用文件后,在系 統(tǒng)內(nèi)核中生成一個該應(yīng)用文件的句柄信息,并向應(yīng)該程序的進程返回所述的句 柄信息,在以后該應(yīng)該程序的進程對此應(yīng)用文件的所有才喿作都將通過句柄實現(xiàn)。 如果有另外的進程想要對該應(yīng)用文件進行修改或刪除,系統(tǒng)將會對內(nèi)核對象中 是否存在該應(yīng)用文件的句柄信息進行判斷,如果在內(nèi)核對象中已經(jīng)存在該應(yīng)用 文件的句柄信息,表示該句柄信息沒有被釋放,上述另外的進程的要求進行修 改或刪除的操作被系統(tǒng)拒絕。
而對于系統(tǒng)級別的進程所調(diào)用的模塊來說,在系統(tǒng)級別的進程中打開所述 模塊,需要通過調(diào)用LoadLibrary(為進程裝入可執(zhí)行模塊)函數(shù),并由 LoadLibrary函數(shù)的lpFUename (指向文件名的地址)參數(shù)打開指定的模塊,然 后映射該模塊到調(diào)用進程的地址空間中,當(dāng)映射完成后由LoadLibrary返回被 加載的模塊句柄信息,此后系統(tǒng)級別的進程對模塊進行調(diào)用時,會引用這個句 柄信息來尋找系統(tǒng)級別的進程需要引用的模塊的位置,同引用文件一樣,在沒 有正確釋放該句柄信息時,該模塊不能被刪除。
本發(fā)明實施例通過在進程中查找句柄,并由進程本身來釋放句柄,從而實
現(xiàn)句柄的正確釋放,避免了句柄在內(nèi)核對象中被強制釋放。下面結(jié)合附圖對本 發(fā)明實施例釋放句柄的方法及裝置進行詳細描述。 實施例1:
本實施例提供一種釋放句柄的方法,能夠正確安全地釋放句柄,以便能夠
刪除對應(yīng)的文件。如圖l所示,具體釋放句柄的方法包括如下步驟
101、 從上述分析可知,要求釋放的句柄信息對應(yīng)的文件正被進程調(diào)用,為 了能夠釋放該文件的句柄,即待釋放句柄,首先獲取進程調(diào)用的文件對應(yīng)的名 稱信息和句柄4言息。
102、 判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相 同,如果所述名稱信息是相同的,表示進程調(diào)用的文件對應(yīng)的句柄信息要求被 釋放,則執(zhí)行步驟103;否則表示進程調(diào)用的文件對應(yīng)的句柄信息沒有要求被釋 放,執(zhí)行步驟104。
103、 通知上述進程釋;^文所述名稱信息對應(yīng)文件的句柄信息。
104、 由于不需要釋放所述的句柄信息,本步驟可以重新選擇一個進程,并 返回執(zhí)行步驟101。
上述步驟103中所述的通知上述進程釋放所述名稱信息對應(yīng)文件的句柄信 息具體實現(xiàn)為向所述進程中注入釋放所述句柄信息的代碼。即使用遠線程 通知的技術(shù),向所述進程注入一段代碼,而這段代碼注入后將加載到所述進程 的運行空間中,所以這段代碼將歸所述進程所有。在這段注入代碼中,只需要 使用對應(yīng)函數(shù)釋放對應(yīng)句柄信息,對于上面提到的系統(tǒng)級別的進程所調(diào)用模塊 而言, 一般采用FreeLibrary(釋放進程加載的可執(zhí)行才莫塊)函數(shù)關(guān)閉句柄信息即 可實現(xiàn)句柄信息的釋放;對于上面提到的應(yīng)用文件而言, 一般釆用 C4oseHandle(關(guān)閉對像的句柄)函數(shù)關(guān)閉句柄信息即能達到句柄信息的釋放。
本實施例在查找需要釋放的句柄信息時,是在進程調(diào)用的文件中查找,沒 有在內(nèi)核對象中查找,并且最后釋放句柄信息的時候,也是通知進程由進程本 身來釋放句柄信息,能夠保證句柄信息由進程本身進行正常釋放,與直接在內(nèi)
核中強制關(guān)閉句柄信息相比,可以避免句柄信息的不正常釋》丈, >夂人而避免由句 柄信息不正常釋放導(dǎo)致的進程報錯退出。
' 在上述進程完成對句柄信息的釋放后,就可以直接刪除該句柄信息對應(yīng)的 文件了,并不需要重啟系統(tǒng)再來刪除該文件。
實雄例2:
下面以進程調(diào)用的文件為系統(tǒng)加載的模塊為例,具體說明本發(fā)明實施例提 供釋放句柄的方法,如圖2所示,該方法包括如下步驟
,201、獲得系統(tǒng)中的進程號之后,打開所述進程并為所述進程建立快照,該 步驟可以通過系統(tǒng)提供的接口函數(shù)CreateToolhelp32Snapshot (在系統(tǒng)中建立 指定進程的映像)完成,CreateToolhelp32Snapshot會在系統(tǒng)中為進程建立一 個快照,這個快照包括此進程所有的模塊和線程信息。
202、 通過系統(tǒng)提供的函數(shù)Module32First (進程最開始的模塊)查找上述 快照中的第 一個模塊的信息。
203、 獲取查找到第一個模塊的信息中的名稱信息和句柄信息。
204、 判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相 同,如果所述名稱信息是相同的,表示該模塊對應(yīng)的句柄信息要求被釋放,則 執(zhí)行步驟205;否則表示該文件對應(yīng)的句柄信息沒有要求被釋放,執(zhí)行步驟206。
205、 由于所查找到的第一個模塊對應(yīng)的句柄信息要求被釋放,故而保存所 述名稱信息對應(yīng)文件的句柄信息,以便進行釋放操作。
一般情況下,該句柄信息是保存在一個鏈表中,例如先進先出隊列式的 鏈表。
206、 判斷快照中的模塊是否查找完畢,如果沒有查找完畢,執(zhí)行步驟207; 如果查找完畢,執(zhí)行步驟208。
207、 通過系統(tǒng)提供的函數(shù)Module32Next (進程下一個才莫塊)查找上述快照 中的下一個,塊的信息,并執(zhí)行步驟203。
208、 判斷是否能取得系統(tǒng)中下一個進程號,如果能夠獲得的系統(tǒng)中下一個
進程號,則執(zhí)行步驟201;否則執(zhí)行步驟209。
209、 通知上述系統(tǒng)進程釋放已經(jīng)保存句柄信息,已保存的句柄信息為所述 名稱信息相同的文件對應(yīng)的句柄信息。具體可以使用遠線程通知的技術(shù)實現(xiàn)句 柄信息的釋放,如向所述進程注入一段代碼,而這段代碼注入后將加載到所 述進程的運行空間中。對于上面提到的系統(tǒng)進程調(diào)用模塊而言,在這段注入代 碼中, 一般采用FreeLibrary(釋放進程加載的可執(zhí)行才莫塊)函數(shù)關(guān)閉句柄信息即 可實現(xiàn)句柄信息的釋放。
本實施例中是采用先保存句柄信息,在通知系統(tǒng)進程將其釋放,在實際運 用時,可以將保存的句柄信息設(shè)置為先進先出的隊列,這樣可以在查找需要釋 放的句柄信息的同時,將通知相應(yīng)系統(tǒng)進程釋放已經(jīng)查找到的句柄信息,加快 了處理速度。
本實施例中,在釋放系統(tǒng)進程載入模塊時調(diào)用的句柄信息,首先通過快照 的方式獲取模塊的信息,然后從模塊的信息中查找需要釋放的句柄信息,在查 ^到所有的句柄信息后,通過系統(tǒng)進程本身釋放該模塊的句柄信息,避免了系 統(tǒng)進程應(yīng)句柄信息的不正常釋放而報錯退出。
在系統(tǒng)進程完成對句柄信息的釋放后,就可以直接刪除該句柄信息對應(yīng)的 模塊了,并不需要重啟系統(tǒng)再來刪除該模塊。
實施例3:
下面以進程調(diào)用的文件為應(yīng)用文件為例,具體說明本發(fā)明實施例提供釋放 句柄的方法,j。圖3所示,該方法包括如下步驟
301、直接獲取目前正在運行的所有應(yīng)用進程所調(diào)用的所有應(yīng)用文件。由于 調(diào)用應(yīng)用文件的進程是一般的應(yīng)用進程,能夠通過特定函數(shù)完成多進程和多線 程的操作首先使用ZwQuerySystemlnformation(取得不同的系統(tǒng)信息類型)函 數(shù)枚舉打開的所有文件的句柄,接下來需要使用 一個未公開的函數(shù) ZwQuerylnformationFile(取得文件對4象不同的信息類型),通過其中的 SYSTEM-INFORMATION-CLASS(系統(tǒng)信息枚舉類型)結(jié)構(gòu),完成多進程和線程的操 作,以獲取所有應(yīng)用文件。
302 、打開上述獲取到的應(yīng)用文件的一個結(jié)構(gòu)體,具體通過名稱 SYSTEM—INFORMATION—CLASS的結(jié)構(gòu)來描述一個結(jié)構(gòu)體。
303、 獲取所述已打開結(jié)構(gòu)體中應(yīng)用文件對應(yīng)的名稱信息和句柄信息。在該 方法中使用S STEM—INFORMATION—CLASS結(jié)構(gòu)的SystemHandlelnformat ion (系統(tǒng) 句柄信多)參數(shù)描述,來完成獲取所有應(yīng)用文件的操作。
304、 判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相 同,如果所述名稱信息是相同的,表示該模塊對應(yīng)的句柄信息要求被釋放,則 執(zhí)行步驟305;否則表示該文件對應(yīng)的句柄信息沒有要求被釋放,執(zhí)行步驟306。
305、 保存所述名稱信息對應(yīng)文件的句柄信息,以便執(zhí)行釋放句柄信息的操作。
306、 判斷已獲取到的應(yīng)用文件中是否還有沒有打開的結(jié)構(gòu)體,如果還有未 打開的結(jié)構(gòu)體,則執(zhí)行步驟307,否則執(zhí)行步驟308。
307、 定位到下一個未打開的結(jié)構(gòu)體,并執(zhí)行步驟302。
308、 通知上述進程釋放已保存的句柄信息。本步驟可以采用遠線程通知的 技術(shù)向所述進程注入一段代碼,而這段代碼注入后將加載到所述進程的運行空 間中。對于上面提到的應(yīng)用文件而言,在這段注入代碼中, 一般采用C1 o s eHand 1 e(關(guān)閉對像的句柄)函數(shù)關(guān)閉句柄信息即能達到句柄信息的釋放。
本實施例中是采用先保存句柄信息,再通知應(yīng)用進程將其釋放,在實際運 用時,可以將保存的句柄信息設(shè)置為先進先出的隊列,這樣可以在查找需要釋 放的句柄信息的同時,將通知相應(yīng)應(yīng)用進程釋放已經(jīng)查找到的句柄信息,加快 了處理速度。
在應(yīng)用進程完成對句柄信息的釋放后,就可以直接刪除該句柄信息對應(yīng)的 應(yīng)用文件了,并不需要重啟系統(tǒng)再來刪除該應(yīng)用文件。
實施例4:
對應(yīng)于上.述實施例l,本實施例提供第一種釋;^文句柄的裝置,如圖4所示, 該裝置包括獲取單元41,判斷單元42和通知單元43。
該裝置中各個單元的具體功能如下獲取單元41用于獲取進程調(diào)用的文件 對應(yīng)的名稱信息和句柄信息;在獲取到對應(yīng)的名稱信息和句柄信息后,判斷單 元42用于判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相
同;如果所i4的名稱信息相同,則表示該文件中的句柄信息要求被釋放,所述 通知單元43用于在名稱信息相同時,通知所述進程釋^:所述名稱信息對應(yīng)文件 的句柄信息。所述通知單元43由遠線程通知技術(shù)實現(xiàn),如通過向所述進程中 注入釋放所述句柄信息的代碼,以通知所述進程釋放所述名稱信息對應(yīng)文件的 句柄信息。
對應(yīng)于上述實施例2,本實施例還提供第二種釋放句柄的裝置,如圖5所示, 該裝置包括獲取單元51,判斷單元52、存儲單元53和通知單元54。本裝置 主要用來處理在所述進程調(diào)用的文件為系統(tǒng)加載的模塊的情況,這種情況下, 獲取單元51的功能通過快照模塊511和獲取模塊512共同完成。各個單元和模 塊的具體功能描述如下 所述快照模塊511用于為進程建立快照,該快照中包括所述模塊信息,所
述獲取模塊512用于獲取所述模塊信息中的名稱信息和句柄信息。在獲取到對 應(yīng)的名稱信息和句柄信息后,判斷單元52用于判斷所獲取到的名稱信息與待釋 放句柄對應(yīng)文件的名稱信息是否相同;如果所述的名稱信息相同,則表示該文 件中的句柄信息要求被釋放,所述存儲單元53,用于在所述名稱信息相同時, 保存所述名稱信息對應(yīng)文件的句柄信息。所述通知單元54用于在名稱信息相同 時,通知所i4進程釋放已保存的句柄信息,由存^f諸單元53和通知單元54共同 完成的功能,相當(dāng)于在所述名稱信息相同時通知對應(yīng)系統(tǒng)進程釋放對應(yīng)文件的 句柄信息。
對應(yīng)于上述實施例3,本實施例還提供一種釋放句柄的裝置,如圖6所示, 該裝置包括獲取單元61,判斷單元62、存儲單元63和通知單元64。本裝置 主要用來處理在所述進程調(diào)用的文件為應(yīng)用文件的情況,這種情況下,獲取單 元61的功能通過打開模塊611和獲取模塊612共同完成。各個單元和模塊的具 體功能描述如下
所述打開模塊611用于打開進程調(diào)用的應(yīng)用文件的結(jié)構(gòu)體,所述獲取模塊 612用于獲取所述結(jié)構(gòu)體中應(yīng)用文件對應(yīng)的名稱信息和句柄信息。在獲取到對應(yīng) 的名稱信息和句柄信息后,判斷單元62用于判斷所獲取到的名稱信息與待釋放 句柄對應(yīng)文件的名稱信息是否相同;如果所述的名稱信息相同,則表示該文件 中的句柄信息要求被釋放。所述存儲單元63用于在所述名稱信息相同時,保存 所述名稱信息對應(yīng)文件的句柄信息。所述通知單元64用于在名稱信息相同時, 通知所述進程釋放已保存的句柄信息,由存儲單元63和通知單元64共同完成 的功能,相當(dāng)于在所述名稱信息相同時通知對應(yīng)進程釋放對應(yīng)文件的句柄信息。
本實施例中三種釋^:句柄的裝置中所采用的通知單元(43、 54或64)均可
以采用遠線程通知技術(shù)實現(xiàn),如通過向所述進程中注入釋放所述句柄信息的 代碼,^通知所述進程釋放所述名稱信息對應(yīng)文件的句柄信息。
本實施例中后兩種釋放句柄的裝置中所采用的存儲單元可以通過先進先出 隊列實現(xiàn),這樣就可以在在查找需要釋放的句柄信息的同時,將通知相應(yīng)進程 棒放已經(jīng)查找到的句柄信息,加快了處理速度。
實施例5:
如圖7所示,本實施例提供一種文件刪除系統(tǒng),該系統(tǒng)包括文件名獲取 裝置71、句柄釋放裝置72和文件刪除裝置73。
本實施例中的文件名獲取裝置71用于獲取待刪除文件的名稱信息;句柄釋 放裝置72,用于獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息;判斷所獲取 到的名稱信,fe與文件名獲取裝置71獲取到的待刪除文件的名稱信息是否相同; 并在所迷名稱信息相同時,通知所述進程釋放所述名稱信息對應(yīng)文件的句柄信 息;文件刪除裝置73用于將所述待刪除文件刪除,由于句柄釋放裝置72已經(jīng) 將待刪除文件的句柄信息正確釋放了,故而文件刪除裝置73能夠順利刪除該文 件。
為了使得句柄釋放裝置72能夠集中釋放所有需要釋放的句柄,本實施例中 的句柄釋放裝置72還用于在所述名稱信息相同時,保存所述名稱信息對應(yīng)文件 的句柄信息,這樣就可以對已經(jīng)保存的句柄信息進行集中釋放,能夠提高句柄 釋放的可靠性。
*如果句柄釋放裝置72采用先進先出的方式保存所述名稱信息對應(yīng)文件的句 柄信息,則可以在獲取到句柄信息的同時,將已經(jīng)保存的句柄信息進行釋放, 能夠提高句柄釋放的效率。
上述釋放句柄的操作是一種正常的句柄釋放過程,能正確釋放句柄,不會
導(dǎo)致對應(yīng)進程因為句柄的不正常釋放而報錯退出。在釋放完成句柄信息后,就 可以將對應(yīng)的文件安全刪除,不需要重啟系統(tǒng)。
本發(fā)明實施例主要用在各種需要系統(tǒng)中進行文件的刪除,特別用在殺毒軟 件系統(tǒng)中,在刪除感染病毒文件之前釋放對應(yīng)的句柄信息。
通過以上的實施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā) 明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但 很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì) 上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算 機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤,硬盤或光盤等,包 括若干指令用以使得一臺設(shè)備(可以是服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明 各個實施例所述的方法。
以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于 此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到 的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍 應(yīng)以所述權(quán)利要求的保護范圍為準。
權(quán)利要求
1.一種釋放句柄的方法,其特征在于,包括:獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息;判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相同;若所述名稱信息相同,則通知所述進程釋放所述名稱信息對應(yīng)文件的句柄信息。
2、 根據(jù)權(quán)利要求1所述的釋放句柄的方法,其特征在于,所述進程調(diào)用的 文件為系統(tǒng)加載的模塊,其中所述獲取進程調(diào)用文件對應(yīng)的名稱信息和句柄信 息的步驟包括為進程建立快照,所述快照中包括所述模塊信息; 獲取所述模塊信息中的名稱信息和句柄信息。
3、 根據(jù)權(quán)利要求1所述的釋放句柄的方法,其特征在于,所述進程調(diào)用的 文件為應(yīng)用文件,其中所述獲取進程調(diào)用文件對應(yīng)的名稱信息和句柄信息的步 驟包括i打開進程調(diào)用的應(yīng)用文件的結(jié)構(gòu)體;獲取所述結(jié)構(gòu)體中應(yīng)用文件對應(yīng)的名稱信息和句柄信息。
4、 根據(jù)權(quán)利要求1所述的釋放句柄的方法,其特征在于,在所述通知所述 進程釋放所述名稱信息對應(yīng)文件的句柄信息之前,還包括若所述名稱信息相同,保存所述名稱信息對應(yīng)文件的句柄信息。
5、 根據(jù)權(quán)利要求1所述的釋放句柄的方法,其特征在于,所述通知所述進 程釋放所述名稱信息對應(yīng)文件的句柄信息的步驟包括向所述進程中注入釋放所述句柄信息的代碼。
6、 一種釋;^文句柄的裝置,其特征在于,包括獲取單元,用于獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息; 判斷單元,用于判斷所獲取到的名稱信息與待釋放句柄對應(yīng)文件的名稱信息是否相同;通知單元,用于在所述名稱信息相同時,通知所述進程釋放所述名稱信息 對應(yīng)文件的句柄信息。
7、根據(jù)敦利要求6所述的釋放句柄的裝置,其特征在于,所述進程調(diào)用的 文件為舉統(tǒng)加載的模塊,所述獲取單元包括快照模塊,用于為進程建立快照,所述快照中包括所述模塊信息;獲取模塊,用于獲取所述模塊信息中的名稱信息和句柄信息。
8、根據(jù)權(quán)利要求6所述的釋放句柄的裝置,其特征在于,所述進程調(diào)用的 文件為應(yīng)用文件,所述獲取單元包括打開模塊,用于打開進程調(diào)用的應(yīng)用文件的結(jié)構(gòu)體;獲取模塊,用于獲取所述結(jié)構(gòu)體中應(yīng)用文件對應(yīng)的名稱信息和句柄信息。
9、 根據(jù)權(quán)利要求6所述的釋放句柄的裝置,其特征在于,所述通知單元向 所述進程中注入釋放所述句柄信息的代碼,以通知所述進程釋放所述名稱信息 對應(yīng)文件的句柄信息。
10、 根據(jù)權(quán)利要求6所述的釋放句柄的裝置,其特征在于,還包括 存儲單元,用于在所述名稱信息相同時,保存所述名稱信息對應(yīng)文件的句柄信息。
11、 一種文件刪除系統(tǒng),其特征在于包括 文件名g取裝置,用于獲取待刪除文件的名稱信息;句柄釋放裝置,用于獲取進程調(diào)用的文件對應(yīng)的名稱信息和句柄信息;判 斷所獲取到的名稱信息與待刪除文件的名稱信息是否相同;并在所述名稱信息 相同時,通知所述進程釋放所述名稱信息對應(yīng)文件的句柄信息; 文件刪除裝置,用于將所述待刪除文件刪除。
12、根據(jù)權(quán)利要求11所述的文件刪除系統(tǒng),其特征在于,所述句柄釋放裝置還用于在呵述名稱信息相同時,保存所述名稱信息對應(yīng)文件的句柄信息。
全文摘要
本發(fā)明實施例公開了一種釋放句柄的方法、裝置及文件刪除系統(tǒng),涉及釋放待刪除文件的句柄的技術(shù)領(lǐng)域,解決了現(xiàn)在刪除文件的技術(shù)需要重啟系統(tǒng)或者會導(dǎo)致進程報錯的問題。本實施例先查找進程調(diào)用的文件的句柄信息,如果進程所調(diào)用文件的句柄信息就是待釋放句柄,則通知進程釋放相應(yīng)的句柄信息,以完成句柄的釋放。本實施例主要用在殺毒軟件系統(tǒng)中,在刪除感染病毒文件之前釋放對應(yīng)的句柄信息。
文檔編號G06F21/00GK101373505SQ20081012700
公開日2009年2月25日 申請日期2008年6月17日 優(yōu)先權(quán)日2008年6月17日
發(fā)明者朋 云 申請人:華為技術(shù)有限公司