[发明专利]一种用于解除文件占用的方法及装置有效
申请号: | 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.vipzhuanli.com/pat/books/201210361922.6/2.html,转载请声明来源钻瓜专利网。