释放句柄的方法、装置及文件删除系统的制作方法

文档序号:6465296阅读:282来源:国知局
专利名称:释放句柄的方法、装置及文件删除系统的制作方法
技术领域
本发明涉及计算机领域,尤其涉及计算机中释放待删除文件的句柄的方法 及装置。
背景技术
无论是可感染系统的恶意代码还是隐藏的木马文件,它们 一般会在系统启 动的时候加载私有代码到系统内部,从而对系统造成破坏。如果一个病毒文件 以上述方式被植入操作系统中或被植入到正在运行的进程中,该文件的句柄在 没有释放的情况下,将无法删除此类病毒文件。有些正在编辑的文件由于装载 该文件的进程被意外中止,导致该文件的句柄没有释放,也会造成文件无法删
除。如果病毒文件无法删除,将会对系统造成破坏,例如出现恶意占用系统 资源,恶意重启计算机,死机等情况。
现有技术提供了两种方法来删除此类没有释放句柄的文件,具体如下
第一种方法将文件存放在磁盘上时需要把该文件写入文件配置表(FAT, File Allocation Table),通过从FAT表查找到文件名对应的文件数据结构, 通过遍历此数据结构对文件内容进行改写,以损坏文件,被损坏的文件在系统 重启后将无法^皮进程加载,此时可对该文件进行成功删除。
发明人在实现本发明的过程中,发现上述第一种方法至少存在以下缺点 在磁盘上进行修改文件的数据内容,但是该文件被调用时已经将句柄加载到内 存中,所以只有当系统重启后以释放内存中的句柄,才能完成删除功能。并且, 对进程加载的数据文件进行修改,进程运行会报错退出。
第二种方法当需要删除一个文件时,首先查看此文件是否被其它进程占
用,如果有进程占用该文件,在内核对象中查找该文件的句柄,当找到句柄后, 直接释放内核对象中文件的句柄,这样就可以释放掉进程占用该文件时调用的 句柄,以^f更删除该文件。
发明人在实现本发明的过程中,发现上述第二种方法至少存在以下缺点 忽略了加载此文件的进程,直接在内核对象中释放文件的句柄,可能导致占用 该文件的进程报错退出;或者,需要在特定条件下调用此文件的进程在特定条 件出现时报错退出。

发明内容
本发明的实施例提供一种释放句柄的方法、装置及文件删除系统,在不需 要重启系统的情况下能够删除文件,并且使得进程不会由于句柄的不正确释放 而报错退出。
本发明的实施例提供一种释放句柄的方法,包括 获取进程调用的文件对应的名称信息和句柄信息; 判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相同; 若所述名称信息相同,则通知所述进程释放所述名称信息对应文件的句柄 信息。
本发明的实施例还提供一种释放句柄的装置,包括 获取单元,用于获取进程调用的文件对应的名称信息和句柄信息; 判断单元,用于判断所获取到的名称信息与待释放句柄对应文件的名称信 息是否相同;
通知单元,用于在所述名称信息相同时,通知所述进程释放所述名称信息 对应文,的句柄信息。
本发明的实施例还提供一种文件删除系统,包括
文件名获取装置,用于获取待删除文件的名称信息;
句柄释放装置,用于获取进程调用的文件对应的名称信息和句柄信息;判 断所获取到的名称信息与待删除文件的名称信息是否相同;并在所述名称信息 相同时,通知所述进程释放所述名称信息对应文件的句柄信息;
文件删除装置,用于将所述^f寺删除文件删除。
本发明实施例提供的释放句柄的方法及装置,首先在进程本身调用的文件 中获取句柄信息和名称信息,然后将获取到的名称信息与待释放句柄对应文件 的名称信息对比,如果名称信息相同,则表示该文件的句柄信息需要被释放, 本发明实施例通知进程本身将需要释放的句柄信息释放。与现有技术相比,本 发明实旅例避免了在内核对象中查找并通过内核对象直接释放句柄,而是通过 进程调用的文件来查找,并有进程本身来释放句柄,是一种正确且安全的释放 句柄方法,不会导致占用该文件的进程由于句柄的不正确释放而报错退出。同 时由于句柄被正确释放了,故而可以执行对应文件的删除操作,不需要等到系 统重启后再来删除对应文件。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作筒单地介绍,显而易见地,下面描述 t的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中释放句柄的方法的流程图2为本发明实施例2中释放句柄的方法的流程图3为本发明实施例3中释放句柄的方法的流程图4为本发明实施例4中第一种释放句柄的装置的框图5为本发明实施例4中第二种释放句柄的装置的框图; 图6为本发明实施例4中第三种释放句柄的装置的框图; 图7为本发明实施例5中文件删除系统的原理图。
具体实施例方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造 性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在应用程序的进程中,当需要打开应用文件时,需要通过0penFile (打开 文件)函数来打开应用文件。0penFUe函数在成功打开一个应用文件后,在系 统内核中生成一个该应用文件的句柄信息,并向应该程序的进程返回所述的句 柄信息,在以后该应该程序的进程对此应用文件的所有才喿作都将通过句柄实现。 如果有另外的进程想要对该应用文件进行修改或删除,系统将会对内核对象中 是否存在该应用文件的句柄信息进行判断,如果在内核对象中已经存在该应用 文件的句柄信息,表示该句柄信息没有被释放,上述另外的进程的要求进行修 改或删除的操作被系统拒绝。
而对于系统级别的进程所调用的模块来说,在系统级别的进程中打开所述 模块,需要通过调用LoadLibrary(为进程装入可执行模块)函数,并由 LoadLibrary函数的lpFUename (指向文件名的地址)参数打开指定的模块,然 后映射该模块到调用进程的地址空间中,当映射完成后由LoadLibrary返回被 加载的模块句柄信息,此后系统级别的进程对模块进行调用时,会引用这个句 柄信息来寻找系统级别的进程需要引用的模块的位置,同引用文件一样,在没 有正确释放该句柄信息时,该模块不能被删除。
本发明实施例通过在进程中查找句柄,并由进程本身来释放句柄,从而实
现句柄的正确释放,避免了句柄在内核对象中被强制释放。下面结合附图对本 发明实施例释放句柄的方法及装置进行详细描述。 实施例1:
本实施例提供一种释放句柄的方法,能够正确安全地释放句柄,以便能够
删除对应的文件。如图l所示,具体释放句柄的方法包括如下步骤
101、 从上述分析可知,要求释放的句柄信息对应的文件正被进程调用,为 了能够释放该文件的句柄,即待释放句柄,首先获取进程调用的文件对应的名 称信息和句柄4言息。
102、 判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相 同,如果所述名称信息是相同的,表示进程调用的文件对应的句柄信息要求被 释放,则执行步骤103;否则表示进程调用的文件对应的句柄信息没有要求被释 放,执行步骤104。
103、 通知上述进程释;^文所述名称信息对应文件的句柄信息。
104、 由于不需要释放所述的句柄信息,本步骤可以重新选择一个进程,并 返回执行步骤101。
上述步骤103中所述的通知上述进程释放所述名称信息对应文件的句柄信 息具体实现为向所述进程中注入释放所述句柄信息的代码。即使用远线程 通知的技术,向所述进程注入一段代码,而这段代码注入后将加载到所述进程 的运行空间中,所以这段代码将归所述进程所有。在这段注入代码中,只需要 使用对应函数释放对应句柄信息,对于上面提到的系统级别的进程所调用模块 而言, 一般采用FreeLibrary(释放进程加载的可执行才莫块)函数关闭句柄信息即 可实现句柄信息的释放;对于上面提到的应用文件而言, 一般釆用 C4oseHandle(关闭对像的句柄)函数关闭句柄信息即能达到句柄信息的释放。
本实施例在查找需要释放的句柄信息时,是在进程调用的文件中查找,没 有在内核对象中查找,并且最后释放句柄信息的时候,也是通知进程由进程本 身来释放句柄信息,能够保证句柄信息由进程本身进行正常释放,与直接在内
核中强制关闭句柄信息相比,可以避免句柄信息的不正常释》丈, >夂人而避免由句 柄信息不正常释放导致的进程报错退出。
' 在上述进程完成对句柄信息的释放后,就可以直接删除该句柄信息对应的 文件了,并不需要重启系统再来删除该文件。
实雄例2:
下面以进程调用的文件为系统加载的模块为例,具体说明本发明实施例提 供释放句柄的方法,如图2所示,该方法包括如下步骤
,201、获得系统中的进程号之后,打开所述进程并为所述进程建立快照,该 步骤可以通过系统提供的接口函数CreateToolhelp32Snapshot (在系统中建立 指定进程的映像)完成,CreateToolhelp32Snapshot会在系统中为进程建立一 个快照,这个快照包括此进程所有的模块和线程信息。
202、 通过系统提供的函数Module32First (进程最开始的模块)查找上述 快照中的第 一个模块的信息。
203、 获取查找到第一个模块的信息中的名称信息和句柄信息。
204、 判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相 同,如果所述名称信息是相同的,表示该模块对应的句柄信息要求被释放,则 执行步骤205;否则表示该文件对应的句柄信息没有要求被释放,执行步骤206。
205、 由于所查找到的第一个模块对应的句柄信息要求被释放,故而保存所 述名称信息对应文件的句柄信息,以便进行释放操作。
一般情况下,该句柄信息是保存在一个链表中,例如先进先出队列式的 链表。
206、 判断快照中的模块是否查找完毕,如果没有查找完毕,执行步骤207; 如果查找完毕,执行步骤208。
207、 通过系统提供的函数Module32Next (进程下一个才莫块)查找上述快照 中的下一个,块的信息,并执行步骤203。
208、 判断是否能取得系统中下一个进程号,如果能够获得的系统中下一个
进程号,则执行步骤201;否则执行步骤209。
209、 通知上述系统进程释放已经保存句柄信息,已保存的句柄信息为所述 名称信息相同的文件对应的句柄信息。具体可以使用远线程通知的技术实现句 柄信息的释放,如向所述进程注入一段代码,而这段代码注入后将加载到所 述进程的运行空间中。对于上面提到的系统进程调用模块而言,在这段注入代 码中, 一般采用FreeLibrary(释放进程加载的可执行才莫块)函数关闭句柄信息即 可实现句柄信息的释放。
本实施例中是采用先保存句柄信息,在通知系统进程将其释放,在实际运 用时,可以将保存的句柄信息设置为先进先出的队列,这样可以在查找需要释 放的句柄信息的同时,将通知相应系统进程释放已经查找到的句柄信息,加快 了处理速度。
本实施例中,在释放系统进程载入模块时调用的句柄信息,首先通过快照 的方式获取模块的信息,然后从模块的信息中查找需要释放的句柄信息,在查 ^到所有的句柄信息后,通过系统进程本身释放该模块的句柄信息,避免了系 统进程应句柄信息的不正常释放而报错退出。
在系统进程完成对句柄信息的释放后,就可以直接删除该句柄信息对应的 模块了,并不需要重启系统再来删除该模块。
实施例3:
下面以进程调用的文件为应用文件为例,具体说明本发明实施例提供释放 句柄的方法,j。图3所示,该方法包括如下步骤
301、直接获取目前正在运行的所有应用进程所调用的所有应用文件。由于 调用应用文件的进程是一般的应用进程,能够通过特定函数完成多进程和多线 程的操作首先使用ZwQuerySystemlnformation(取得不同的系统信息类型)函 数枚举打开的所有文件的句柄,接下来需要使用 一个未公开的函数 ZwQuerylnformationFile(取得文件对4象不同的信息类型),通过其中的 SYSTEM-INFORMATION-CLASS(系统信息枚举类型)结构,完成多进程和线程的操 作,以获取所有应用文件。
302 、打开上述获取到的应用文件的一个结构体,具体通过名称 SYSTEM—INFORMATION—CLASS的结构来描述一个结构体。
303、 获取所述已打开结构体中应用文件对应的名称信息和句柄信息。在该 方法中使用S STEM—INFORMATION—CLASS结构的SystemHandlelnformat ion (系统 句柄信多)参数描述,来完成获取所有应用文件的操作。
304、 判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相 同,如果所述名称信息是相同的,表示该模块对应的句柄信息要求被释放,则 执行步骤305;否则表示该文件对应的句柄信息没有要求被释放,执行步骤306。
305、 保存所述名称信息对应文件的句柄信息,以便执行释放句柄信息的操作。
306、 判断已获取到的应用文件中是否还有没有打开的结构体,如果还有未 打开的结构体,则执行步骤307,否则执行步骤308。
307、 定位到下一个未打开的结构体,并执行步骤302。
308、 通知上述进程释放已保存的句柄信息。本步骤可以采用远线程通知的 技术向所述进程注入一段代码,而这段代码注入后将加载到所述进程的运行空 间中。对于上面提到的应用文件而言,在这段注入代码中, 一般采用C1 o s eHand 1 e(关闭对像的句柄)函数关闭句柄信息即能达到句柄信息的释放。
本实施例中是采用先保存句柄信息,再通知应用进程将其释放,在实际运 用时,可以将保存的句柄信息设置为先进先出的队列,这样可以在查找需要释 放的句柄信息的同时,将通知相应应用进程释放已经查找到的句柄信息,加快 了处理速度。
在应用进程完成对句柄信息的释放后,就可以直接删除该句柄信息对应的 应用文件了,并不需要重启系统再来删除该应用文件。
实施例4:
对应于上.述实施例l,本实施例提供第一种释;^文句柄的装置,如图4所示, 该装置包括获取单元41,判断单元42和通知单元43。
该装置中各个单元的具体功能如下获取单元41用于获取进程调用的文件 对应的名称信息和句柄信息;在获取到对应的名称信息和句柄信息后,判断单 元42用于判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相
同;如果所i4的名称信息相同,则表示该文件中的句柄信息要求被释放,所述 通知单元43用于在名称信息相同时,通知所述进程释^:所述名称信息对应文件 的句柄信息。所述通知单元43由远线程通知技术实现,如通过向所述进程中 注入释放所述句柄信息的代码,以通知所述进程释放所述名称信息对应文件的 句柄信息。
对应于上述实施例2,本实施例还提供第二种释放句柄的装置,如图5所示, 该装置包括获取单元51,判断单元52、存储单元53和通知单元54。本装置 主要用来处理在所述进程调用的文件为系统加载的模块的情况,这种情况下, 获取单元51的功能通过快照模块511和获取模块512共同完成。各个单元和模 块的具体功能描述如下 所述快照模块511用于为进程建立快照,该快照中包括所述模块信息,所
述获取模块512用于获取所述模块信息中的名称信息和句柄信息。在获取到对 应的名称信息和句柄信息后,判断单元52用于判断所获取到的名称信息与待释 放句柄对应文件的名称信息是否相同;如果所述的名称信息相同,则表示该文 件中的句柄信息要求被释放,所述存储单元53,用于在所述名称信息相同时, 保存所述名称信息对应文件的句柄信息。所述通知单元54用于在名称信息相同 时,通知所i4进程释放已保存的句柄信息,由存^f诸单元53和通知单元54共同 完成的功能,相当于在所述名称信息相同时通知对应系统进程释放对应文件的 句柄信息。
对应于上述实施例3,本实施例还提供一种释放句柄的装置,如图6所示, 该装置包括获取单元61,判断单元62、存储单元63和通知单元64。本装置 主要用来处理在所述进程调用的文件为应用文件的情况,这种情况下,获取单 元61的功能通过打开模块611和获取模块612共同完成。各个单元和模块的具 体功能描述如下
所述打开模块611用于打开进程调用的应用文件的结构体,所述获取模块 612用于获取所述结构体中应用文件对应的名称信息和句柄信息。在获取到对应 的名称信息和句柄信息后,判断单元62用于判断所获取到的名称信息与待释放 句柄对应文件的名称信息是否相同;如果所述的名称信息相同,则表示该文件 中的句柄信息要求被释放。所述存储单元63用于在所述名称信息相同时,保存 所述名称信息对应文件的句柄信息。所述通知单元64用于在名称信息相同时, 通知所述进程释放已保存的句柄信息,由存储单元63和通知单元64共同完成 的功能,相当于在所述名称信息相同时通知对应进程释放对应文件的句柄信息。
本实施例中三种释^:句柄的装置中所采用的通知单元(43、 54或64)均可
以采用远线程通知技术实现,如通过向所述进程中注入释放所述句柄信息的 代码,^通知所述进程释放所述名称信息对应文件的句柄信息。
本实施例中后两种释放句柄的装置中所采用的存储单元可以通过先进先出 队列实现,这样就可以在在查找需要释放的句柄信息的同时,将通知相应进程 棒放已经查找到的句柄信息,加快了处理速度。
实施例5:
如图7所示,本实施例提供一种文件删除系统,该系统包括文件名获取 装置71、句柄释放装置72和文件删除装置73。
本实施例中的文件名获取装置71用于获取待删除文件的名称信息;句柄释 放装置72,用于获取进程调用的文件对应的名称信息和句柄信息;判断所获取 到的名称信,fe与文件名获取装置71获取到的待删除文件的名称信息是否相同; 并在所迷名称信息相同时,通知所述进程释放所述名称信息对应文件的句柄信 息;文件删除装置73用于将所述待删除文件删除,由于句柄释放装置72已经 将待删除文件的句柄信息正确释放了,故而文件删除装置73能够顺利删除该文 件。
为了使得句柄释放装置72能够集中释放所有需要释放的句柄,本实施例中 的句柄释放装置72还用于在所述名称信息相同时,保存所述名称信息对应文件 的句柄信息,这样就可以对已经保存的句柄信息进行集中释放,能够提高句柄 释放的可靠性。
*如果句柄释放装置72采用先进先出的方式保存所述名称信息对应文件的句 柄信息,则可以在获取到句柄信息的同时,将已经保存的句柄信息进行释放, 能够提高句柄释放的效率。
上述释放句柄的操作是一种正常的句柄释放过程,能正确释放句柄,不会
导致对应进程因为句柄的不正常释放而报错退出。在释放完成句柄信息后,就 可以将对应的文件安全删除,不需要重启系统。
本发明实施例主要用在各种需要系统中进行文件的删除,特别用在杀毒软 件系统中,在删除感染病毒文件之前释放对应的句柄信息。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发 明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但 很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质 上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算 机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包 括若干指令用以使得一台设备(可以是服务器,或者网络设备等)执行本发明 各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于 此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到 的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围 应以所述权利要求的保护范围为准。
权利要求
1.一种释放句柄的方法,其特征在于,包括:获取进程调用的文件对应的名称信息和句柄信息;判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相同;若所述名称信息相同,则通知所述进程释放所述名称信息对应文件的句柄信息。
2、 根据权利要求1所述的释放句柄的方法,其特征在于,所述进程调用的 文件为系统加载的模块,其中所述获取进程调用文件对应的名称信息和句柄信 息的步骤包括为进程建立快照,所述快照中包括所述模块信息; 获取所述模块信息中的名称信息和句柄信息。
3、 根据权利要求1所述的释放句柄的方法,其特征在于,所述进程调用的 文件为应用文件,其中所述获取进程调用文件对应的名称信息和句柄信息的步 骤包括i打开进程调用的应用文件的结构体;获取所述结构体中应用文件对应的名称信息和句柄信息。
4、 根据权利要求1所述的释放句柄的方法,其特征在于,在所述通知所述 进程释放所述名称信息对应文件的句柄信息之前,还包括若所述名称信息相同,保存所述名称信息对应文件的句柄信息。
5、 根据权利要求1所述的释放句柄的方法,其特征在于,所述通知所述进 程释放所述名称信息对应文件的句柄信息的步骤包括向所述进程中注入释放所述句柄信息的代码。
6、 一种释;^文句柄的装置,其特征在于,包括获取单元,用于获取进程调用的文件对应的名称信息和句柄信息; 判断单元,用于判断所获取到的名称信息与待释放句柄对应文件的名称信息是否相同;通知单元,用于在所述名称信息相同时,通知所述进程释放所述名称信息 对应文件的句柄信息。
7、根据敦利要求6所述的释放句柄的装置,其特征在于,所述进程调用的 文件为舉统加载的模块,所述获取单元包括快照模块,用于为进程建立快照,所述快照中包括所述模块信息;获取模块,用于获取所述模块信息中的名称信息和句柄信息。
8、根据权利要求6所述的释放句柄的装置,其特征在于,所述进程调用的 文件为应用文件,所述获取单元包括打开模块,用于打开进程调用的应用文件的结构体;获取模块,用于获取所述结构体中应用文件对应的名称信息和句柄信息。
9、 根据权利要求6所述的释放句柄的装置,其特征在于,所述通知单元向 所述进程中注入释放所述句柄信息的代码,以通知所述进程释放所述名称信息 对应文件的句柄信息。
10、 根据权利要求6所述的释放句柄的装置,其特征在于,还包括 存储单元,用于在所述名称信息相同时,保存所述名称信息对应文件的句柄信息。
11、 一种文件删除系统,其特征在于包括 文件名g取装置,用于获取待删除文件的名称信息;句柄释放装置,用于获取进程调用的文件对应的名称信息和句柄信息;判 断所获取到的名称信息与待删除文件的名称信息是否相同;并在所述名称信息 相同时,通知所述进程释放所述名称信息对应文件的句柄信息; 文件删除装置,用于将所述待删除文件删除。
12、根据权利要求11所述的文件删除系统,其特征在于,所述句柄释放装置还用于在呵述名称信息相同时,保存所述名称信息对应文件的句柄信息。
全文摘要
本发明实施例公开了一种释放句柄的方法、装置及文件删除系统,涉及释放待删除文件的句柄的技术领域,解决了现在删除文件的技术需要重启系统或者会导致进程报错的问题。本实施例先查找进程调用的文件的句柄信息,如果进程所调用文件的句柄信息就是待释放句柄,则通知进程释放相应的句柄信息,以完成句柄的释放。本实施例主要用在杀毒软件系统中,在删除感染病毒文件之前释放对应的句柄信息。
文档编号G06F21/00GK101373505SQ20081012700
公开日2009年2月25日 申请日期2008年6月17日 优先权日2008年6月17日
发明者朋 云 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1