CN102214088B - 文件解锁的方法和装置 - Google Patents
文件解锁的方法和装置 Download PDFInfo
- Publication number
- CN102214088B CN102214088B CN201010142989.1A CN201010142989A CN102214088B CN 102214088 B CN102214088 B CN 102214088B CN 201010142989 A CN201010142989 A CN 201010142989A CN 102214088 B CN102214088 B CN 102214088B
- Authority
- CN
- China
- Prior art keywords
- file
- specifying
- handle
- fileinfo
- occupied
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种文件解锁的方法和装置,属于计算机技术领域。所述方法包括:当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁。所述装置包括:获取模块和解锁模块。本发明实现了文件占用全方位的查找,查找结果全面准确,避免了检测不到的情况发生。而且在应用层实现,无需驱动参与,极大地降低了后期维护和管理的复杂性。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种文件解锁的方法和装置。
背景技术
随着计算机技术的发展,人们越来越多地使用计算机完成日常文件的处理与保存。参见图1,日常的文件维护过程中,经常会遇到令人头疼的问题,就是在打开、删除或者保存文件的时候,系统出现类似如下的错误提示:“无法删除该文件,该文件正在被另一个程序使用。关闭任何可能使用这个文件的程序,重新试一次”。遇到这种情况时,如果用户知道是哪个程序正在使用该文件,则可以通过关闭该程序,使该程序释放出对该文件的占用。但是,由于各种应用程序进驻用户的电脑,以及各种病毒、木马的介入,在很多时候,用户无法得知哪个程序正在使用该文件。因此,对于个人用户而言,简单有效地解除这种文件占用就显得极为实用。
目前存在一种比较成熟的文件解锁工具Unlocker,使用了应用层配合驱动的方法,可以查找出当前文件被占用的情况,并提供对该文件占用进行解锁和终止进程的功能。
但是,对于以数据映射方式打开的文件,Unlocker可能会出现检测不到的情况。该数据映射方式是指在文件较大时,为了避免将文件读入内存占用较大的空间以及浪费较多的时间,通常在内存中预留一块空间,并设置该空间与文件内的数据的对应关系,该数据通常是文件中的部分数据,而不是全部数据,当需要处理该数据时,根据该对应关系将该数据读入内存进行处理,处理完成后释放该内存,从而可以节省内存空间的利用率并提高文件处理效率。
另外,Unlocker工具由于使用了驱动,该驱动依赖于计算机中的Windows系统,在不同版本以及不同补丁安装情况下的Windows系统中,Unlocker工具需要通过测试来维护运行的稳定性,因此,不利于维护和管理。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种文件解锁的方法和装置。所述技术方案如下:
一种文件解锁的方法,所述方法包括:
当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;
根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁,所述文件被占用的方式包括打开文件占用方式和可执行文件占用方式;
其中,所述根据句柄类型获取当前所有被占用文件的文件信息,包括:
获取当前存在的所有句柄;
判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄;
如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息。
获取所有类型为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)打开文件占用方式
打开文件占用方式又分为两种:普通文件打开方式和数据映射方式。这两种方式的共同特性是当文件打开时,都会产生句柄,且产生的句柄的类型包括:FILE(文件)类型和/或SECTION(内存区)类型。在本发明实施例中,一个文件打开后产生的句柄可以为一个,也可以为多个,且产生的任一个句柄其类型可以为FILE类型,也可以为SECTION类型。通过这两种类型的句柄可以获取到以上述打开文件占用方式打开的文件的文件信息。
2)可执行文件占用方式
可执行文件占用方式又分为两种:映像映射方式和可执行模块加载方式。这两种方式的共同特性是当文件打开时,系统会开启相应的进程,进程内会保存该文件的相应信息,在映像映射方式下还会保存与该文件相关的内存信息。根据进程信息,可以获取该进程内的文件模块信息,即获取到以可执行模块加载方式打开的文件的相关信息,进一步,根据进程中的内存信息,可以获取与该内存对应的文件信息,即找到以映像映射方式打开的文件的文件信息。
本发明实施例中,文件信息包括:文件的路径和文件名。在可执行模块加载方式下获取到的文件路径和文件名统称为文件模块信息。可执行文件包括主执行文件和其它可执行文件,主执行文件如*.exe文件,其它可执行文件如*.dll文件等等。
本实施例提供的上述方法,通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,该方法属于应用层,无需驱动参与,因此,不依赖于计算机中的Windows系统版本,极大地降低了后期维护和管理的复杂性。
实施例2
为了实现对被占用的文件进行解锁,参见图3,本实施例提供了一种文件解锁的方法,包括:
301:当用户指定文件请求解锁时,获取系统中当前存在的所有句柄。
其中,用户指定的文件可以任意类型的文件,可以指定一个,也可以指定多个,本实施例是以指定一个文件为例进行说明的,当指定多个文件时,其处理过程仅仅是对一个文件处理过程的重复,因此,不做过多说明。另外,用户请求解锁一个文件的应用场景也可以有多种,包括但不限于:打开、删除或保存文件等等,本发明实施例对此不做具体限定。
本实施例中,用户指定文件请求解锁的方式有多种,包括但不限于:打开文件解锁的工具,在其界面中选择一个文件,按确认按钮请求对其解锁;或者,在文件目录中找到指定的文件,单击鼠标的右键,弹出菜单后在其中选择解锁一项,请求对该文件进行解锁,等等。本发明实施例对此不做具体限定。
302:判断获取的所有句柄中是否存在类型为FILE和SECTION的句柄,如果是,则执行303;否则,流程结束。
303:在上述所有句柄中获取所有类型为FILE和SECTION的句柄,对于所有类型为FILE的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息;将获取到的所有文件信息作为获取到的当前所有被占用文件的文件信息。
对于Windows系统里的所有的内核对象,都会有一个或者几个句柄与之对应。Windows系统会维护一个全局的句柄表,其中保存有当前存在的所有句柄,通过该全局句柄表可以达到对所有资源的处理。Windows系统中的句柄通常有很多类型,包括但不限于:FILE类型、SECTION类型等等。在本实施例中,具体地,可以以SystemHandleInformation为参数调用NtQuerySystemInformation函数,得到系统的全局句柄表。
句柄的每种类型都会有一个相应的类型值,并且在不同版本的Windows系统下,同一个类型的值也不一样,如Windows XP系统中FILE类型值为19,Windows Vista系统中FILE类型值为21等等。本发明实施例中,在获取类型为FILE和SECTION的句柄时,为了避免由于不同Windows系统中类型值的差异而导致获取的结果不准确,具体地,可以根据类型名称与类型值这对信息来获取句柄,从而保证结果的准确性。
在本实施例中,具体地,可以以ObjectAllInformation(0x3)为参数调用NtQueryObject函数,以得到Windows系统中所有的类型对信息,在得到的OBJECT_ALL_INFORMATION对象中,NumberOfObjectsTypes成员保存了系统中所有类型的数目,ObjectTypeInformation成员保存了这些类型的内容。根据这两个成员信息可以找到名称为FILE和SECTION的类型值。
在Windows系统中,由于所有的句柄均不能跨进程使用,每个句柄只能在其所在的进程内使用。因此,获取到FILE类型的句柄和SECTION类型的句柄后,首先将该两种句柄拷贝到当前文件解锁的进程中,然后再进行后续的操作。在本实施例中,具体地,可以先以PROCESS_DUP_HANDLE权限调用OpenProcess函数打开该句柄所在的进程,然后调用DuplicateHandle函数将该句柄拷贝到当前文件解锁的进程中,便可进行文件的查找。当上述两种类型的句柄拷贝到当前文件解锁的进程以后,对于FILE类型的句柄,可以使用ObjectNameInformation为参数调用NtQueryObject函数,获取到该句柄对应的文件名。对于SECTION类型的句柄,首先以ObjectNameInformation为参数调用NtQueryObject函数,得到该映射的名字,然后使用OpenFileMapping函数打开该映射,再使用GetMappedFileName函数得到该映射对应的文件名。
304:获取当前被打开的所有进程,对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据内存信息获取对应的文件信息;将获取到的文件模块信息和该内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。
其中,直接获取到的进程内的文件模块信息就是以可执行模块加载方式打开的文件的相关信息,包括文件名和路径;根据内存信息获取到的文件信息就是以映像映射方式打开的文件的文件信息。本步骤中,在获取到文件后,可以进一步地记录下获取到的文件的占用方式,以备后续根据该占用方式进行文件解锁。
对于可执行文件,如Dll、Exe等,Windows提供了PSAPI函数,可以很方便地进行查找。在本实施例中,具体地,可以调用Process32First与Process32Next两个函数,得到当前系统中的所有进程信息。然后,对于每个进程,可以使用Module32First与Module32Next两个函数,得到每个可执行模块的信息,包括文件名和路径;另外,对于每个进程,还可以使用VirtualQueryEx函数获取该进程内的内存信息,根据该内存信息确定该内存对应的文件信息,包括文件名和路径。
在本实施例中,上述步骤302、303与步骤304没有固定的先后顺序,可以先执行304,然后再执行302、303,也可以同时执行,即根据句柄获取当前所有被占用的文件的文件信息与获取当前所有被占用的可执行文件的文件信息不分先后,可以同时进行。
305:对于获取的所有文件信息对应的文件和用户指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径。其中,获取的所有文件信息对应的文件包括上述步骤中根据句柄类型获取到的文件信息对应的文件,以及获取的可执行文件的文件信息对应的文件。
由于Windows系统中路径名分为很多种:如以“\?\”、“\\?\”、“\\.\”等为开头,加上正常的文件路径名;或者,以“\Device\HarddiskVolume1”等开头,加上正常的文件路径名(无盘符)等等。对于同一个路径,由于命名规范不同,可能会表示为两个不同的路径,因此,为了避免由于命名规范不同而导致路径比较判断失误,在本步骤中,对路径进行统一转换处理,均转换为物理路径,然后再进行比较,从而保证比较的准确性。具体地,无论是查找到的所有文件,还是用户指定的文件,均对该文件的路径进行判断,判断其是否为物理路径,如果不是,则将其转换为物理路径,再进行后续步骤。
306:判断获取的所有文件信息对应的文件中是否存在物理路径和文件名均与用户指定的文件相同的文件,如果是,则用户指定的文件被占用,执行307;否则,用户指定的文件未被占用,流程结束。
其中,判断相同是指获取的文件信息对应的文件的文件名与用户指定的文件的文件名相同,并且,该文件信息对应的文件的路径与用户指定的文件的路径相同。
307:判断用户指定的文件的占用方式是打开文件占用方式,还是可执行文件占用方式,如果是打开文件占用方式,则执行308;如果是可执行文件占用方式,则执行309。
具体地,可以根据上述步骤中在获取文件后记录的文件占用方式来判断。
另外,本实施例中也可以在显示界面上提供选项供用户选择相应的操作,如提供三个按钮:解锁、全部解锁和终止进程给用户,用户可以根据需要选择是进行解锁还是终止进程等等。本步骤就是按照默认情况下用户选择了解锁后执行的步骤。
308:将用户指定的文件的句柄关闭以解锁该文件,流程结束。
对于打开文件占用方式,该文件是根据句柄来获取,在进行文件解锁时,可以DUPLICATE_CLOSE_SOURCE为参数调用DuplicateHandle函数,来将该文件的句柄关闭,其中,FILE类型与SECTION类型的句柄均可以调用上述函数来关闭句柄,而且,关闭该句柄是指关闭对方进程中的该句柄,而不是拷贝到当前文件解锁进程中的句柄。其中,对方进程是指该文件句柄所在的进程。
309:判断用户指定的文件是否为主执行文件,如果是,则执行310;否则,执行311。
310:终止用户指定的文件所在的进程,流程结束。
本实施例中,主执行文件是指exe文件,对于主执行文件,进行解锁即意味着不再需要该进程了,因此,优选地,可以直接关闭该主执行文件所在的进程,从而也达到了解锁的目的。具体地,可以使用GetModuleFileNameEx函数获取对方进程的主执行文件的名字,判断是否需要结束对方进程。其中,对方进程是指该主执行文件所在的进程。
311:调用解除映射函数解除用户指定的文件的占用,流程结束。
本步骤中,解除映射函数是指NtUnmapViewOfSection函数,通过调用该函数可以解除可执行文件的占用。
本实施例提供的上述方法,通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,能够达到对所有占用方式实现查找,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,可以在不关闭占用文件的程序的同时,安全地实现对文件占用的释放。另外,该方法使用的系统函数均在应用层实现,无需驱动参与,因此,不依赖于计算机中的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可以包括:
路径处理单元402a,用于对于获取模块401获取的所有文件信息对应的文件和用户指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;
判断单元402b,用于判断获取模块401获取的所有文件信息对应的文件中是否存在物理路径和文件名均与用户指定的文件相同的文件,如果是,则用户指定的文件被占用;否则,用户指定的文件未被占用。
本实施例中,在第四种实现方式下,解锁模块402可以包括:
第一解锁单元402c,用于如果用户指定的文件为打开文件占用方式,则将用户指定的文件的句柄关闭以解锁该文件;
第二解锁单元402d,用于如果用户指定的文件为可执行文件占用方式,则判断用户指定的文件是否为主执行文件,如果是,则结束用户指定的文件所在的进程;否则,调用解除映射函数解除用户指定的文件的占用。
参见图5,上述第三种实现方式和第四种实现方式也可以结合起来使用,即解锁模块402可以同时包括路径处理单元402a、判断单元402b和第一解锁单元402c、第二解锁单元402d。
本实施例提供的上述装置,与方法实施例属于同一构思,在该装置中可以运行上述实施例中的方法,具体过程详见方法实施例,这里不再赘述。
本实施例提供的上述装置,通过句柄获取被占用文件的文件信息以及获取被占用的可执行文件的文件信息,实现了文件占用全方位的查找,包括以打开文件占用方式打开的文件,以及以可执行文件占用方式打开的文件,能够达到对所有占用方式实现查找,查找结果全面准确,避免了有文件占用检测不到的情况发生。而且,可以在不关闭占用文件的程序的同时,安全地实现对文件占用的释放。另外,该装置使用的系统函数均在应用层实现,无需驱动参与,因此,不依赖于计算机中的Windows系统版本,极大地降低了后期维护和管理的复杂性。
最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。
本发明实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。上述的各装置或系统,可以执行相应方法实施例中的方法。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种文件解锁的方法,其特征在于,所述方法包括:
当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;
根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁,所述文件被占用的方式包括打开文件占用方式和可执行文件占用方式;
其中,所述根据句柄类型获取当前所有被占用文件的文件信息,包括:
获取当前存在的所有句柄;
判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄;
如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息。
2.根据权利要求1所述的方法,其特征在于,获取所有类型为FILE和SECTION的句柄对应的文件的文件信息,包括:
获取所有类型为FILE和SECTION的句柄;
对于所有类型为FILE的句柄,获取该句柄对应的文件的文件信息;
对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。
3.根据权利要求1所述的方法,其特征在于,获取当前所有被占用的可执行文件的文件信息,包括:
获取当前被打开的所有进程;
对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据所述内存信息获取对应的文件信息;
将所述文件模块信息和所述内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。
4.根据权利要求1所述的方法,其特征在于,根据获取的所有文件信息判断所述指定的文件是否被占用,包括:
对于获取的所有文件信息对应的文件和所述指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;
判断获取的所有文件信息对应的文件中是否存在物理路径和文件名均与所述指定的文件相同的文件,如果是,则所述指定的文件被占用;否则,所述指定的文件未被占用。
5.根据权利要求1所述的方法,其特征在于,根据文件被占用的方式,对所述指定的文件进行解锁,包括:
如果所述指定的文件为打开文件占用方式,则将所述指定的文件的句柄关闭以解锁该文件;
如果所述指定的文件为可执行文件占用方式,则判断所述指定的文件是否为主执行文件,如果是,则结束所述指定的文件所在的进程;否则,调用解除映射函数解除所述指定的文件的占用。
6.一种文件解锁的装置,其特征在于,所述装置包括:
获取模块,用于当用户请求解锁指定的文件时,根据句柄类型获取当前所有被占用文件的文件信息,并且获取当前所有被占用的可执行文件的文件信息;
解锁模块,用于根据获取的所有文件信息判断所述指定的文件是否被占用,如果是,则根据文件被占用的方式,对所述指定的文件进行解锁,所述文件被占用的方式包括打开文件占用方式和可执行文件占用方式;
其中,所述获取模块包括:
第一获取单元,用于获取当前存在的所有句柄,判断所述所有句柄中是否存在类型为文件FILE和内存区SECTION的句柄,如果是,则获取所有类型为FILE和SECTION的句柄对应的文件的文件信息。
7.根据权利要求6所述的装置,其特征在于,所述第一获取单元包括:
获取子单元,用于获取所有类型为FILE和SECTION的句柄,对于所有类型为FILE的句柄,获取该句柄对应的文件的文件信息;对于所有类型为SECTION的句柄,先获取该句柄对应的映射,再获取该映射对应的文件的文件信息。
8.根据权利要求6所述的装置,其特征在于,所述获取模块包括:
第二获取单元,用于获取当前被打开的所有进程,对于其中的每个进程,获取该进程内的文件模块信息,并获取该进程内的内存信息,根据所述内存信息获取对应的文件信息,将所述文件模块信息和所述内存信息对应的文件信息作为当前所有被占用的可执行文件的文件信息。
9.根据权利要求6所述的装置,其特征在于,所述解锁模块包括:
路径处理单元,用于对于所述获取模块获取的所有文件信息对应的文件和所述指定的文件,如果该文件的路径不是物理路径,则将其转换为物理路径;
判断单元,用于判断所述获取模块获取的所有文件信息对应的文件中是否存在物理路径和文件名均与所述指定的文件相同的文件,如果是,则所述指定的文件被占用;否则,所述指定的文件未被占用。
10.根据权利要求6所述的装置,其特征在于,所述解锁模块包括:
第一解锁单元,用于如果所述指定的文件为打开文件占用方式,则将所述指定的文件的句柄关闭以解锁该文件;
第二解锁单元,用于如果所述指定的文件为可执行文件占用方式,则判断所述指定的文件是否为主执行文件,如果是,则结束所述指定的文件所在的进程;否则,调用解除映射函数解除所述指定的文件的占用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010142989.1A CN102214088B (zh) | 2010-04-07 | 2010-04-07 | 文件解锁的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010142989.1A CN102214088B (zh) | 2010-04-07 | 2010-04-07 | 文件解锁的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102214088A CN102214088A (zh) | 2011-10-12 |
CN102214088B true CN102214088B (zh) | 2015-07-01 |
Family
ID=44745411
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010142989.1A Active CN102214088B (zh) | 2010-04-07 | 2010-04-07 | 文件解锁的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102214088B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902765B (zh) * | 2012-09-25 | 2015-12-09 | 北京奇虎科技有限公司 | 一种用于解除文件占用的方法及装置 |
CN105512151A (zh) * | 2014-10-16 | 2016-04-20 | 安一恒通(北京)科技有限公司 | 解除文件占用的方法和装置 |
CN106020958A (zh) * | 2016-05-17 | 2016-10-12 | 北京金山安全软件有限公司 | 一种获取文件占用进程的方法、装置及电子设备 |
CN107783842B (zh) * | 2016-08-31 | 2021-09-03 | 阿里巴巴集团控股有限公司 | 一种分布式锁实现方法、设备及存储装置 |
CN107885488B (zh) * | 2016-09-29 | 2021-06-01 | 微软技术许可有限责任公司 | 意图和具有意图的锁 |
CN106951326B (zh) * | 2017-03-16 | 2023-01-06 | 腾讯科技(深圳)有限公司 | 一种文件解锁方法及电子设备 |
CN109976764A (zh) * | 2019-03-28 | 2019-07-05 | 深圳市创联时代科技有限公司 | 一种句柄转换方法 |
CN112631999A (zh) * | 2020-12-25 | 2021-04-09 | 珠海豹趣科技有限公司 | 一种软件搬移方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373505A (zh) * | 2008-06-17 | 2009-02-25 | 华为技术有限公司 | 释放句柄的方法、装置及文件删除系统 |
CN101414329A (zh) * | 2007-10-15 | 2009-04-22 | 北京瑞星国际软件有限公司 | 删除正在运行中的病毒的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4908849B2 (ja) * | 2006-01-11 | 2012-04-04 | 富士通セミコンダクター株式会社 | ファイル削除方法、ファイル・オープン方法、ファイル削除プログラム、および、ファイル・オープン・プログラム |
-
2010
- 2010-04-07 CN CN201010142989.1A patent/CN102214088B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101414329A (zh) * | 2007-10-15 | 2009-04-22 | 北京瑞星国际软件有限公司 | 删除正在运行中的病毒的方法 |
CN101373505A (zh) * | 2008-06-17 | 2009-02-25 | 华为技术有限公司 | 释放句柄的方法、装置及文件删除系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102214088A (zh) | 2011-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102214088B (zh) | 文件解锁的方法和装置 | |
CN101650660B (zh) | 从中央存储装置引导计算机系统 | |
US20060053126A1 (en) | Creating a program module or script from selected actions of an action history record | |
CN100524241C (zh) | 多操作系统平台整合测试方法 | |
CA2450044A1 (en) | Managed file system filter model and architecture | |
US7567257B2 (en) | Partition-based undo of partitioned object graph | |
CN114925084B (zh) | 分布式事务处理方法、系统、设备及可读存储介质 | |
CN109739619A (zh) | 一种基于容器化应用的处理方法、装置及存储介质 | |
CN109614267A (zh) | 一种修复开机异常问题的方法、装置、存储介质及终端 | |
TWI263901B (en) | Program initiation methods and embedded systems utilizing the same | |
US8468305B2 (en) | Data processing method for removable storage medium and data processing device | |
EP3108400B1 (en) | Virus signature matching method and apparatus | |
WO2011134982A1 (en) | Edit sessions using change lists | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN110647527B (zh) | 基于大数据的无效标签清除方法及装置、设备与可读介质 | |
CN114510375A (zh) | 一种Flash芯片数据区域动态共享系统及方法 | |
JP2002312210A5 (zh) | ||
CN114756293A (zh) | 业务处理方法、装置、计算机设备和存储介质 | |
CN113687920A (zh) | 一种分布式系统的对象策略操作方法、装置及设备 | |
CN110851332A (zh) | 一种日志文件的处理方法、装置、设备和介质 | |
JP2000076085A (ja) | 情報処理装置とリソース不足通知方法および記録媒体 | |
CN112540889B (zh) | 在用户态调整硬盘启动顺序的方法、装置、设备及介质 | |
CN107749892A (zh) | 会议记录的网络读取方法、装置、智能平板和存储介质 | |
CN112783760B (zh) | 测试用例的处理方法、装置和存储介质 | |
CN114579366B (zh) | Fuse文件系统下文件实时备份方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20151230 Address after: The South Road in Guangdong province Shenzhen city Fiyta building 518057 floor 5-10 Nanshan District high tech Zone Patentee after: Shenzhen Tencent Computer System Co., Ltd. Address before: 518000 Guangdong city of Shenzhen province Futian District SEG Science Park 2 East Room 403 Patentee before: Tencent Technology (Shenzhen) Co., Ltd. |