文件解锁的方法和装置的制作方法

文档序号:6600427阅读:113来源:国知局
专利名称:文件解锁的方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种文件解锁的方法和装置。
背景技术
随着计算机技术的发展,人们越来越多地使用计算机完成日常文件的处理与保存。参见图1,日常的文件维护过程中,经常会遇到令人头疼的问题,就是在打开、删除或者保存文件的时候,系统出现类似如下的错误提示“无法删除该文件,该文件正在被另一个程序使用。关闭任何可能使用这个文件的程序,重新试一次”。遇到这种情况时,如果用户知道是哪个程序正在使用该文件,则可以通过关闭该程序,使该程序释放出对该文件的占用。 但是,由于各种应用程序进驻用户的电脑,以及各种病毒、木马的介入,在很多时候,用户无法得知哪个程序正在使用该文件。因此,对于个人用户而言,简单有效地解除这种文件占用就显得极为实用。目前存在一种比较成熟的文件解锁工具Unlocker,使用了应用层配合驱动的方法,可以查找出当前文件被占用的情况,并提供对该文件占用进行解锁和终止进程的功能。但是,对于以数据映射方式打开的文件,Unlocker可能会出现检测不到的情况。该数据映射方式是指在文件较大时,为了避免将文件读入内存占用较大的空间以及浪费较多的时间,通常在内存中预留一块空间,并设置该空间与文件内的数据的对应关系,该数据通常是文件中的部分数据,而不是全部数据,当需要处理该数据时,根据该对应关系将该数据读入内存进行处理,处理完成后释放该内存,从而可以节省内存空间的利用率并提高文件处理效率。另外,Unlocker工具由于使用了驱动,该驱动依赖于计算机中的Windows系统,在不同版本以及不同补丁安装情况下的Windows系统中,Unlocker工具需要通过测试来维护运行的稳定性,因此,不利于维护和管理。

发明内容
为了解决现有技术的问题,本发明实施例提供了一种文件解锁的方法和装置。所述技术方案如下—种文件解锁的方法,所述方法包括当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁。根据句柄类型获取当前所有被占用文件的文件信息,包括获取当前存在的所有句柄;判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄;如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息;
4
否则,结束。获取所有类型为FILE和SECTION的句柄对应的文件的文件信息,包括获取所有类型为FILE和SECTION的句柄;对于所有类型为FILE的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。获取当前所有被占用的可执行文件的文件信息,包括获取当前被打开的所有进程;对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据所述内存信息获取对应的文件信息;将所述文件模块信息和所述内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。根据获取的所有文件信息判断所述指定的文件是否被占用,包括对于获取的所有文件信息对应的文件和所述指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;判断获取的所有文件信息对应的文件中是否存在物理路径和文件名均与所述指定的文件相同的文件,如果是,则所述指定的文件被占用;否则,所述指定的文件未被占用。根据文件被占用的方式,对所述指定的文件进行解锁,包括如果所述指定的文件为打开文件占用方式,则将所述指定的文件的句柄关闭以解锁该文件;如果所述指定的文件为可执行文件占用方式,则判断所述指定的文件是否为主执行文件,如果是,则结束所述指定的文件所在的进程;否则,调用解除映射函数解除所述指定的文件的占用。一种文件解锁的装置,所述装置包括获取模块,用于当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;解锁模块,用于根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁。所述获取模块包括第一获取单元,用于获取当前存在的所有句柄,判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄,如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息;否则,结束。所述第一获取单元包括获取子单元,用于获取所有类型为FILE和SECTION的句柄,对于所有类型为FILE 的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。所述获取模块包括第二获取单元,用于获取当前被打开的所有进程,对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据所述内存信息获取对应的文件信息,将所述文件模块信息和所述内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。所述解锁模块包括路径处理单元,用于对于所述获取模块获取的所有文件信息对应的文件和所述指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;判断单元,用于判断所述获取模块获取的所有文件信息对应的文件中是否存在物理路径和文件名均与所述指定的文件相同的文件,如果是,则所述指定的文件被占用;否则,所述指定的文件未被占用。所述解锁模块包括第一解锁单元,用于如果所述指定的文件为打开文件占用方式,则将所述指定的文件的句柄关闭以解锁该文件;第二解锁单元,用于如果所述指定的文件为可执行文件占用方式,则判断所述指定的文件是否为主执行文件,如果是,则结束所述指定的文件所在的进程;否则,调用解除映射函数解除所述指定的文件的占用。本发明实施例提供的上述技术方案通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,该方法属于应用层,无需驱动参与,因此,不依赖于计算机中的Windows系统版本,极大地降低了后期维护和管理的复杂性。


图1是现有技术中无法删除文件的示意图;图2是本发明实施例1提供的文件解锁的方法流程图;图3是本发明实施例2提供的文件解锁的方法流程图;图4是本发明实施例3提供的文件解锁的装置一种结构图;图5是本发明实施例3提供的文件解锁的装置另一种结构图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1为了实现对被占用的文件进行解锁,参见图2,本实施例提供了一种文件解锁的方法,包括201 当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用的文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;202:根据获取的所有文件信息判断用户指定的文件是否被占用,如果是,则根据文件被占用的方式,对用户指定的文件进行解锁。本发明实施例中,系统中文件被占用的方式分为以下两种1)打开文件占用方式
6
打开文件占用方式又分为两种普通文件打开方式和数据映射方式。这两种方式的共同特性是当文件打开时,都会产生句柄,且产生的句柄的类型包括FILE (文件)类型和/或SECTION(内存区)类型。在本发明实施例中,一个文件打开后产生的句柄可以为一个,也可以为多个,且产生的任一个句柄其类型可以为FILE类型,也可以为SECTION类型。 通过这两种类型的句柄可以获取到以上述打开文件占用方式打开的文件的文件信息。2)可执行文件占用方式可执行文件占用方式又分为两种映像映射方式和可执行模块加载方式。这两种方式的共同特性是当文件打开时,系统会开启相应的进程,进程内会保存该文件的相应信息,在映像映射方式下还会保存与该文件相关的内存信息。根据进程信息,可以获取该进程内的文件模块信息,即获取到以可执行模块加载方式打开的文件的相关信息,进一步,根据进程中的内存信息,可以获取与该内存对应的文件信息,即找到以映像映射方式打开的文件的文件信息。本发明实施例中,文件信息包括文件的路径和文件名。在可执行模块加载方式下获取到的文件路径和文件名统称为文件模块信息。可执行文件包括主执行文件和其它可执行文件,主执行文件如*. exe文件,其它可执行文件如*. dll文件等等。本实施例提供的上述方法,通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,该方法属于应用层,无需驱动参与,因此,不依赖于计算机中的 Windows系统版本,极大地降低了后期维护和管理的复杂性。实施例2为了实现对被占用的文件进行解锁,参见图3,本实施例提供了一种文件解锁的方法,包括301 当用户指定文件请求解锁时,获取系统中当前存在的所有句柄。其中,用户指定的文件可以任意类型的文件,可以指定一个,也可以指定多个,本实施例是以指定一个文件为例进行说明的,当指定多个文件时,其处理过程仅仅是对一个文件处理过程的重复,因此,不做过多说明。另外,用户请求解锁一个文件的应用场景也可以有多种,包括但不限于打开、删除或保存文件等等,本发明实施例对此不做具体限定。本实施例中,用户指定文件请求解锁的方式有多种,包括但不限于打开文件解锁的工具,在其界面中选择一个文件,按确认按钮请求对其解锁;或者,在文件目录中找到指定的文件,单击鼠标的右键,弹出菜单后在其中选择解锁一项,请求对该文件进行解锁,等等。本发明实施例对此不做具体限定。302 判断获取的所有句柄中是否存在类型为FILE和SECTION的句柄,如果是,则执行303;否则,流程结束。303 在上述所有句柄中获取所有类型为FILE和SECTION的句柄,对于所有类型为 FILE的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息;将获取到的所有文件信息作为获取到的当前所有被占用文件的文件信息。对于Windows系统里的所有的内核对象,都会有一个或者几个句柄与之对应。
7Windows系统会维护一个全局的句柄表,其中保存有当前存在的所有句柄,通过该全局句柄表可以达到对所有资源的处理。Windows系统中的句柄通常有很多类型,包括但不限于 FILE类型、SECTION类型等等。在本实施例中,具体地,可以以SystemHandlehformation 为参数调用NtQuerySystemInformation函数,得到系统的全局句柄表。句柄的每种类型都会有一个相应的类型值,并且在不同版本的Windows系统下, 同一个类型的值也不一样,如Windows XP系统中FILE类型值为19,Windows Vista系统中 FILE类型值为21等等。本发明实施例中,在获取类型为FILE和SECTION的句柄时,为了避免由于不同Windows系统中类型值的差异而导致获取的结果不准确,具体地,可以根据类型名称与类型值这对信息来获取句柄,从而保证结果的准确性。在本实施例中,具体地,可以以ObjectAllInformation(0x3)为参数调用 NtQueryObject函数,以得到Windows系统中所有的类型对信息,在得到的0BJECT_ ALL_INFORMATION对象中,NumberOfObjectsTypes成员保存了系统中所有类型的数目, ObjectTypeInformation成员保存了这些类型的内容。根据这两个成员信息可以找到名称为FILE和SECTION的类型值。在Windows系统中,由于所有的句柄均不能跨进程使用,每个句柄只能在其所在的进程内使用。因此,获取到FILE类型的句柄和SECTION类型的句柄后,首先将该两种句柄拷贝到当前文件解锁的进程中,然后再进行后续的操作。在本实施例中,具体地, 可以先以PROCESS_DUP_HANDLE权限调用OperJrocess函数打开该句柄所在的进程,然后调用DuplicateHandle函数将该句柄拷贝到当前文件解锁的进程中,便可进行文件的查找。当上述两种类型的句柄拷贝到当前文件解锁的进程以后,对于FILE类型的句柄,可以使用ObjectNamehformation为参数调用NtQueryObject函数,获取到该句柄对应的文件名。对于SECTION类型的句柄,首先以ObjectNamehformation为参数调用 NtQueryObject函数,得到该映射的名字,然后使用OpenFiIeMapping函数打开该映射,再使用GetMappedFileName函数得到该映射对应的文件名。304:获取当前被打开的所有进程,对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据内存信息获取对应的文件信息;将获取到的文件模块信息和该内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。其中,直接获取到的进程内的文件模块信息就是以可执行模块加载方式打开的文件的相关信息,包括文件名和路径;根据内存信息获取到的文件信息就是以映像映射方式打开的文件的文件信息。本步骤中,在获取到文件后,可以进一步地记录下获取到的文件的占用方式,以备后续根据该占用方式进行文件解锁。对于可执行文件,如Dll、Exe等,Windows提供了 PSAPI函数,可以很方便地进行查找。在本实施例中,具体地,可以调用ftOcessSZFirst与ftx)cess32Next两个函数,得到当前系统中的所有进程信息。然后,对于每个进程,可以使用Module32FirSt与Module32Next 两个函数,得到每个可执行模块的信息,包括文件名和路径;另外,对于每个进程,还可以使用VirtualQueryEx函数获取该进程内的内存信息,根据该内存信息确定该内存对应的文件信息,包括文件名和路径。在本实施例中,上述步骤302、303与步骤304没有固定的先后顺序,可以先执行 304,然后再执行302、303,也可以同时执行,即根据句柄获取当前所有被占用的文件的文件
8信息与获取当前所有被占用的可执行文件的文件信息不分先后,可以同时进行。305 对于获取的所有文件信息对应的文件和用户指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径。其中,获取的所有文件信息对应的文件包括上述步骤中根据句柄类型获取到的文件信息对应的文件,以及获取的可执行文件的文件信息对应的文件。由于Windows系统中路径名分为很多种如以“ \ \ ”、“\\ ? \ ”、“\\.\”等为开头,加上正常的文件路径名;或者,以“\Device\HarddiskVolumel”等开头,加上正常的文件路径名(无盘符)等等。对于同一个路径,由于命名规范不同,可能会表示为两个不同的路径,因此,为了避免由于命名规范不同而导致路径比较判断失误,在本步骤中,对路径进行统一转换处理,均转换为物理路径,然后再进行比较,从而保证比较的准确性。具体地,无论是查找到的所有文件,还是用户指定的文件,均对该文件的路径进行判断,判断其是否为物理路径,如果不是,则将其转换为物理路径,再进行后续步骤。306:判断获取的所有文件信息对应的文件中是否存在物理路径和文件名均与用户指定的文件相同的文件,如果是,则用户指定的文件被占用,执行307;否则,用户指定的文件未被占用,流程结束。其中,判断相同是指获取的文件信息对应的文件的文件名与用户指定的文件的文件名相同,并且,该文件信息对应的文件的路径与用户指定的文件的路径相同。307:判断用户指定的文件的占用方式是打开文件占用方式,还是可执行文件占用方式,如果是打开文件占用方式,则执行308 ;如果是可执行文件占用方式,则执行309。具体地,可以根据上述步骤中在获取文件后记录的文件占用方式来判断。另外,本实施例中也可以在显示界面上提供选项供用户选择相应的操作,如提供三个按钮解锁、全部解锁和终止进程给用户,用户可以根据需要选择是进行解锁还是终止进程等等。本步骤就是按照默认情况下用户选择了解锁后执行的步骤。308 将用户指定的文件的句柄关闭以解锁该文件,流程结束。对于打开文件占用方式,该文件是根据句柄来获取,在进行文件解锁时,可以 DUPLICATE_CL0SE_S0URCE为参数调用DuplicateHandle函数,来将该文件的句柄关闭,其中,FILE类型与SECTION类型的句柄均可以调用上述函数来关闭句柄,而且,关闭该句柄是指关闭对方进程中的该句柄,而不是拷贝到当前文件解锁进程中的句柄。其中,对方进程是指该文件句柄所在的进程。309:判断用户指定的文件是否为主执行文件,如果是,则执行310 ;否则,执行 311。310 终止用户指定的文件所在的进程,流程结束。本实施例中,主执行文件是指exe文件,对于主执行文件,进行解锁即意味着不再需要该进程了,因此,优选地,可以直接关闭该主执行文件所在的进程,从而也达到了解锁的目的。具体地,可以使用GetModuleFileNameEx函数获取对方进程的主执行文件的名字, 判断是否需要结束对方进程。其中,对方进程是指该主执行文件所在的进程。311 调用解除映射函数解除用户指定的文件的占用,流程结束。本步骤中,解除映射函数是指NtUnmapViewOfAction函数,通过调用该函数可以解除可执行文件的占用。
本实施例提供的上述方法,通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,能够达到对所有占用方式实现查找,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,可以在不关闭占用文件的程序的同时,安全地实现对文件占用的释放。另外,该方法使用的系统函数均在应用层实现, 无需驱动参与,因此,不依赖于计算机中的Windows系统版本,极大地降低了后期维护和管理的复杂性。实施例3为了实现对被占用的文件进行解锁,参见图4,本实施例提供了一种文件解锁的装置,包括获取模块401,用于当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用的文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;解锁模块402,用于根据获取模块401获取的所有文件信息判断用户指定的文件是否被占用,如果是,则根据文件被占用的方式,对用户指定的文件进行解锁。本实施例中,文件被占用的方式分为打开文件占用方式和可执行文件占用方式, 具体同方法实施例中的描述,此处不再赘述。本实施例中,在第一种实现方式下,获取模块401可以包括第一获取单元401a,用于获取当前存在的所有句柄,判断所有句柄中是否存在类型为FILE和SECTION的句柄,如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息;否则,结束。其中,第一获取单元可以包括获取子单元,用于获取所有类型为FILE和SECTION的句柄,对于所有类型为FILE 的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。其中,根据类型为FILE的句柄获取到的文件信息就是以普通文件打开方式打开的文件的文件信息,根据类型为SECTION的句柄获取到的文件信息就是以数据映射方式打开的文件的文件信息。本实施例中,在第二种实现方式下,获取模块401可以包括第二获取单元401b,用于获取当前被打开的所有进程,对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据内存信息获取对应的文件信息,将获取到的文件模块信息和该内存对应的文件信息作为当前所有被占用的可执行文件的文件信息。其中,直接获取到的进程内的文件模块信息就是以可执行模块加载方式打开的文件的相关信息,根据内存信息获取到的文件信息就是以映像映射方式打开的文件的文件信肩、ο参见图5,上述第一种实现方式和第二种实现方式也可以结合起来使用,即获取模块401可以同时包括第一获取单元401a和第二获取单元401b。本实施例中,在第三种实现方式下,解锁模块402可以包括路径处理单元40 ,用于对于获取模块401获取的所有文件信息对应的文件和用户指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;判断单元402b,用于判断获取模块401获取的所有文件信息对应的文件中是否存在物理路径和文件名均与用户指定的文件相同的文件,如果是,则用户指定的文件被占用; 否则,用户指定的文件未被占用。本实施例中,在第四种实现方式下,解锁模块402可以包括第一解锁单元402c,用于如果用户指定的文件为打开文件占用方式,则将用户指定的文件的句柄关闭以解锁该文件;第二解锁单元402d,用于如果用户指定的文件为可执行文件占用方式,则判断用户指定的文件是否为主执行文件,如果是,则结束用户指定的文件所在的进程;否则,调用解除映射函数解除用户指定的文件的占用。参见图5,上述第三种实现方式和第四种实现方式也可以结合起来使用,即解锁模块402可以同时包括路径处理单元40 、判断单元402b和第一解锁单元402c、第二解锁单元 402cL本实施例提供的上述装置,与方法实施例属于同一构思,在该装置中可以运行上述实施例中的方法,具体过程详见方法实施例,这里不再赘述。本实施例提供的上述装置,通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,能够达到对所有占用方式实现查找,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,可以在不关闭占用文件的程序的同时,安全地实现对文件占用的释放。另外,该装置使用的系统函数均在应用层实现, 无需驱动参与,因此,不依赖于计算机中的Windows系统版本,极大地降低了后期维护和管理的复杂性。最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。本发明实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。上述的各装置或系统,可以执行相应方法实施例中的方法。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1权利要求
1.一种文件解锁的方法,其特征在于,所述方法包括当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息, 并且获取当前所有被占用的可执行文件的文件信息;根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁。
2.根据权利要求1所述的方法,其特征在于,根据句柄类型获取当前所有被占用文件的文件信息,包括获取当前存在的所有句柄;判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄; 如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息; 否则,结束。
3.根据权利要求2所述的方法,其特征在于,获取所有类型为FILE和SECTION的句柄对应的文件的文件信息,包括获取所有类型为FILE和SECTION的句柄; 对于所有类型为FILE的句柄,获取该句柄对应的文件的文件信息; 对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。
4.根据权利要求1所述的方法,其特征在于,获取当前所有被占用的可执行文件的文件信息,包括获取当前被打开的所有进程;对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据所述内存信息获取对应的文件信息;将所述文件模块信息和所述内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。
5.根据权利要求1所述的方法,其特征在于,根据获取的所有文件信息判断所述指定的文件是否被占用,包括对于获取的所有文件信息对应的文件和所述指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;判断获取的所有文件信息对应的文件中是否存在物理路径和文件名均与所述指定的文件相同的文件,如果是,则所述指定的文件被占用;否则,所述指定的文件未被占用。
6.根据权利要求1所述的方法,其特征在于,根据文件被占用的方式,对所述指定的文件进行解锁,包括如果所述指定的文件为打开文件占用方式,则将所述指定的文件的句柄关闭以解锁该文件;如果所述指定的文件为可执行文件占用方式,则判断所述指定的文件是否为主执行文件,如果是,则结束所述指定的文件所在的进程;否则,调用解除映射函数解除所述指定的文件的占用。
7.一种文件解锁的装置,其特征在于,所述装置包括获取模块,用于当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;解锁模块,用于根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁。
8.根据权利要求7所述的装置,其特征在于,所述获取模块包括第一获取单元,用于获取当前存在的所有句柄,判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄,如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息;否则,结束。
9.根据权利要求8所述的装置,其特征在于,所述第一获取单元包括获取子单元,用于获取所有类型为FILE和SECTION的句柄,对于所有类型为FILE的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。
10.根据权利要求7所述的装置,其特征在于,所述获取模块包括第二获取单元,用于获取当前被打开的所有进程,对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据所述内存信息获取对应的文件信息,将所述文件模块信息和所述内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。
11.根据权利要求7所述的装置,其特征在于,所述解锁模块包括路径处理单元,用于对于所述获取模块获取的所有文件信息对应的文件和所述指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;判断单元,用于判断所述获取模块获取的所有文件信息对应的文件中是否存在物理路径和文件名均与所述指定的文件相同的文件,如果是,则所述指定的文件被占用;否则,所述指定的文件未被占用。
12.根据权利要求7所述的装置,其特征在于,所述解锁模块包括第一解锁单元,用于如果所述指定的文件为打开文件占用方式,则将所述指定的文件的句柄关闭以解锁该文件;第二解锁单元,用于如果所述指定的文件为可执行文件占用方式,则判断所述指定的文件是否为主执行文件,如果是,则结束所述指定的文件所在的进程;否则,调用解除映射函数解除所述指定的文件的占用。
全文摘要
本发明公开了一种文件解锁的方法和装置,属于计算机技术领域。所述方法包括当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁。所述装置包括获取模块和解锁模块。本发明实现了文件占用全方位的查找,查找结果全面准确,避免了检测不到的情况发生。而且在应用层实现,无需驱动参与,极大地降低了后期维护和管理的复杂性。
文档编号G06F9/44GK102214088SQ201010142989
公开日2011年10月12日 申请日期2010年4月7日 优先权日2010年4月7日
发明者胡航 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1