一种获取文件占用进程的方法、装置及电子设备的制造方法

文档序号:10654317阅读:154来源:国知局
一种获取文件占用进程的方法、装置及电子设备的制造方法
【专利摘要】本发明的实施例公开一种获取文件占用进程的方法、装置及电子设备,涉及计算机安全技术领域,能够使用户方便地查到找占用目标文件的进程。该方法,包括:获取系统中所有的句柄结构信息;其中,句柄结构信息包括句柄值、句柄类型和进程标识值;判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与目标文件的文件路径相一致的文件句柄结构信息确定为目标文件对应的文件句柄结构信息;将目标文件对应的文件句柄结构信息中的进程标识值确定为占用目标文件的进程的进程标识值。本发明能够高效稳定地查找到占用文件的进程。
【专利说明】
一种获取文件占用进程的方法、装置及电子设备
技术领域
[0001]本发明涉及计算机安全技术领域,尤其涉及一种获取文件占用进程的方法、装置及电子设备。
【背景技术】
[0002]随着计算机技术的发展,用户对计算机的应用也越来越普遍。用户在使用电脑的过程中,经常在删除一些文件时会遇到无法删除的问题,即使计算机杀毒软件应用层模块也会遇到无法删除文件的问题,原因是这些文件被进程独占了其文件句柄,导致其它进程无法删除文件,包括用户操作的Explorer进程,都是无法删除的。在计算机安全技术领域中,如何删除染毒文件是安全软件的主旨。目前,为了删除使用普通手段无法删除的文件,通用方法是找出占用此文件的进程后,首先结束进程,才可把文件删掉。但是,系统中会有许多个进程,用户通过肉眼无法判断出占用目标文件的进程,又不可能把系统的所有进程都关掉,因此,需要一种能够有效获取文件占用进程的方案。

【发明内容】

[0003]有鉴于此,本发明实施例提供一种获取文件占用进程的方法、装置及电子设备,能够使用户方便地查到找占用目标文件的进程。
[0004]第一方面,本发明实施例提供一种获取文件占用进程的方法,包括:
[0005]获取系统中所有的句柄结构信息;其中,所述句柄结构信息包括句柄值、句柄类型和进程标识值;
[0006]判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息;
[0007]将所述目标文件对应的文件句柄结构信息中的进程标识值确定为占用所述目标文件的进程的进程标识值。
[0008]结合第一方面,在第一方面的第一种实施方式中,系统为Windows操作系统;其中,
[0009]所述获取系统中所有的句柄结构信息,包括:
[0010]调用Windows操作系统中查询系统信息的函数NtQuery Sy stemlnformat1n,调用时将查询系统信息的函数NtQuerySystemInformat1n的第一个参数设置为16:
[0011]获取所述查询系统信息的函数NtQuerySystemInformat1n返回的链表结构的数据;其中,在所述链表结构的数据节点中保存有系统中句柄结构信息。
[0012]结合第一方面,在第一方面的第二种实施方式中,所述判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息,包括:
[0013]步骤21:判断所述系统中所有的句柄结构信息的第N个句柄结构信息中的句柄类型是否是文件句柄类型,是则执行步骤22,否则执行步骤25;其中,N的初始值为I;
[0014]步骤22:根据所述第N个句柄结构信息中的句柄值,获取所述第N个句柄结构信息对应的文件的文件路径,并继续执行步骤23;
[0015]步骤23:判断所述目标文件的文件路径是否与所述第N个句柄结构信息对应的文件的文件路径相一致,是则执行步骤24,否则执行步骤25;
[0016]步骤24:将所述第N个句柄结构信息确定为所述目标文件对应的文件句柄结构信息;
[0017]步骤25:判断N是否等于M,若N等于M则结束流程,若N不等于M,则令N = N+1后返回步骤21;其中,M为所述系统中所有的句柄结构信息的数量。
[0018]结合第一方面的第二种实施方式,在第一方面的第三种实施方式中,所述根据所述第N个句柄结构信息中的句柄值,获取所述第N个句柄结构信息对应的文件的文件路径,包括:
[0019]根据所述第N个句柄结构信息中的句柄值,调用系统中查询信息文件函数NtQuery Informat1nFi Ie获取所述第N个句柄结构信息对应的文件的文件路径。
[0020]结合第一方面,在第一方面的第四种实施方式中,在将所述目标文件对应的文件句柄结构信息中的进程标识值确定为占用所述目标文件的进程的进程标识值之后,还包括:
[0021 ]根据所述占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名。
[0022]结合第一方面的第四种实施方式,在第一方面的第五种实施方式中,所述系统为Windows操作系统;其中,
[0023]所述根据所述占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名,包括:
[0024]通过调用进程信息快照获取函数CreateToo Ihe lp32Snapshot获得系统中正在运行的所有进程信息列表;所述进程信息包括进程标识值及进程名;
[0025]通过调用第一个进程句柄获取函数Pr0CeSS32FirSt,将所述进程信息列表中第I个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存;
[0026]判断所述占用所述目标文件的进程的进程标识值是否与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致;
[0027]若所述占用所述目标文件的进程的进程标识值与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致,则获取所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程名,作为占用所述目标文件的进程名;
[0028]若所述占用所述目标文件的进程的进程标识值与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值不一致,则通过调用下一个进程句柄获取函数ProcesS32NeXt,将所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息在所述进程信息列表中对应的下一个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存,然后返回执行判断所述占用所述目标文件的进程的进程标识值是否与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致的步骤。
[0029]结合第一方面,在第一方面的第六种可能的实现方式中,在所述将所述目标文件对应的文件句柄结构信息中的进程标识值确定为占用所述目标文件的进程的进程标识值之后,还包括:
[0030]根据占用所述目标文件的进程的进程标识值,解除占用所述目标文件的进程对所述目标文件的占用;
[0031]删除所述目标文件。
[0032]结合第一方面的第六种实施方式,在第一方面的第七种实施方式中,所述系统为Windows操作系统;
[0033]所述根据占用所述目标文件的进程的进程标识值,解除占用所述目标文件的进程对所述目标文件的占用,包括:
[0034]根据占用所述目标文件的进程的进程标识值,调用系统的打开进程函数OpenProcess打开占用所述目标文件的进程,获取占用所述目标文件的进程的进程句柄;
[0035]将获取到的所述进程句柄作为参数传入终止进程函数TerminateProcess,通过所述终止进程函数TerminateProcess结束占用所述目标文件的进程;
[0036]所述删除所述目标文件,包括:调用系统的删除文件函数DeleteFile删除所述目标文件。
[0037]第二方面,本发明实施例提供一种获取文件占用进程的装置,包括:
[0038]句柄结构信息获取模块,用于获取系统中所有的句柄结构信息,并在获取到系统中所有的句柄结构信息后向匹配模块发送匹配指令;其中,所述句柄结构信息包括句柄值、句柄类型和进程标识值;
[0039]匹配模块,用于根据所述匹配指令,判断目标文件的文件路径是否与句柄结构信息获取模块获取的系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息,并将所述目标文件对应的文件句柄结构信息发送给进程标识确定模块;
[0040]进程标识确定模块,用于将所述匹配模块提供的所述目标文件对应的文件句柄结构信息中的进程标识值,确定为占用所述目标文件的进程的进程标识值。
[0041]结合第二方面,在第二方面的第一种实施方式中,所述系统为Windows操作系统时,所述句柄结构信息获取模块通过调用W i n d ο w s操作系统中查询系统信息的函数NtQuerySystemInformat1n,获取所述查询系统信息的函数 NtQuerySystemInformat1n 返回的链表结构的数据;其中,调用时将查询系统信息的函数NtQuerySystemInformat1n的第一个参数设置为16;在所述链表结构的数据节点中保存有系统中句柄结构信息。
[0042]结合第二方面,在第二方面的第二种实施方式中,所述匹配模块包括:
[0043]读取子模块,用于根据匹配指令读取所述句柄结构信息获取模块获取的所述系统中所有的句柄结构信息的第N个句柄结构信息,读取完后向第一判断子模块发送第一指令,并将当前N值发送给第三判断子模块;其中,N的初始值为I;
[0044]第一判断子模块,用于根据第一指令,判断所述读取子模块本次读取的所述第N个句柄结构信息中的句柄类型是否是文件句柄类型;若是,则向文件路径获取子模块发送文件路径获取指令;否则,向第三判断子模块发送第三指令;
[0045]文件路径获取子模块,用于在收到所述文件路径获取指令时,根据所述读取子模块本次读取的所述第N个句柄结构信息中的句柄值,获取所述第N个句柄结构信息对应的文件的文件路径,随后向第二判断子模块发送第二指令;其中,所述第二指令包括获取的所述第N个句柄结构信息对应的文件的文件路径;
[0046]第二判断子模块,用于根据收到的第二指令,判断所述目标文件的文件路径是否与所述第N个句柄结构信息对应的文件的文件路径相一致;若是,则将所述第N个句柄结构信息确定为所述目标文件对应的文件句柄结构信息并发送给所述进程标识确定模块;否则,向第三判断子模块发送第三指令;
[0047]第三判断子模块,用根据收到的第三指令,判断所述读取子模块发来的当前N值是否等于M,若N不等于M,则令N = N+1后向所述读取子模块发送包括最新N值的匹配指令;其中,M为句柄结构信息获取模块获取的所述系统中所有的句柄结构信息的数量。
[0048]结合第二方面的第二种实施方式,在第二方面的第三种实施方式中,所述文件路径获取子模块根据所述读取子模块本次读取的所述第N个句柄结构信息中的句柄值,调用系统中查询信息文件函数NtQuery Informat1nFi Ie获取所述第N个文件句柄结构信息对应的文件的文件路径。
[0049]结合第二方面,在第二方面的第四种实施方式中,所述获取文件占用进程的装置还包括进程名确定模块;
[0050]所述进程标识确定模块,还用于将占用所述目标文件的进程的进程标识值发送给进程名确定模块;
[0051 ]所述进程名确定模块,用于根据收到的占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名。
[0052]结合第二方面的第四种实施方式,在第二方面的第五种实施方式中,所述系统为Windows操作系统时,所述进程名确定模块包括:
[0053]第一调用子模块,用于通过调用进程信息快照获取函数CreateToolhelp32Snapshot获得系统中正在运行的所有进程信息列表,并在获得系统中正在运行的所有进程信息列表后向第二调用子模块发送第四指令;所述进程信息包括进程标识值及进程名;
[0054]第二调用子模块,用于根据第四指令,通过调用第一个进程句柄获取函数Pr0CeSS32FirSt,将所述第一调用子模块获得的进程信息列表中第I个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存,随后向第四判断子模块发送第五指令;
[0055]第四判断子模块,用于根据第五指令,判断所述进程标识确定模块提供的占用所述目标文件的进程的进程标识值是否与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致;若一致,则返回所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程名,作为占用所述目标文件的进程名;若不一致,则向第三调用子模块发送第六指令;
[0056]第三调用子模块,用于根据第六指令,通过调用下一个进程句柄获取函数ProCesS32NeXt,将所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息在所述进程信息列表中对应的下一个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存,然后向第四判断子模块发送第五指令。
[0057]结合第二方面,在第二方面的第六种实施方式中,所述获取文件占用进程的装置还包括:
[0058]解除占用模块,用于根据所述进程标识确定模块确定的占用所述目标文件的进程的进程标识值,解除占用所述目标文件的进程对所述目标文件的占用,随后向文件删除模块发送进程终止通知;
[0059]文件删除模块,用于在收到所述进程终止通知后,删除所述目标文件。
[0060]结合第二方面的第六种实施方式,在第二方面的第七种实施方式中,所述解除占用模块包括进程句柄获取子模块和进程终止子模块:
[0061 ]所述进程句柄获取子模块,用于根据所述进程标识确定模块确定的占用所述目标文件的进程的进程标识值,调用系统的打开进程函数OpenProcess打开占用所述目标文件的进程,获取占用所述目标文件的进程的进程句柄,将获取的进程句柄发送给进程终止子丰旲块;
[0062]所述进程终止子模块,用于将收到的进程句柄作为参数传入终止进程函数TerminateProcess,通过所述终止进程函数结束占用所述目标文件的进程,随后向文件删除模块发送进程终止通知;
[0063]所述文件删除模块用于通过调用系统的删除文件函数DeleteFile删除所述目标文件。
[0064]第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施方式所述的获取文件占用进程的方法。
[0065]本发明实施例提供的一种获取文件占用进程的方法、装置及电子设备,可以由目标文件的句柄结构信息,获取占用该目标文件的进程的进程标识值,方便用户查找占用目标文件的进程,同样也可作为杀毒软件安全程序查找占用文件的进程源头,如果被占用的文件是病毒文件,而杀毒软件无法删除的时候,用本方案查找到占用目标文件的进程名,先结束进程,然后即可删除被进程占用的病毒文件,提高了对病毒文件的清理成功率,对维护计算机系统安全有积极意义。此外,通过提供应用windows函数的方式查找占用文件的进程的具体方式,使得该方案的实施更为高效稳定且便于维护。
【附图说明】
[0066]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0067]图1为本发明获取文件占用进程的方法实施例一的流程图;
[0068]图2为本发明获取文件占用进程的方法实施例二的流程图;
[0069]图3为本发明获取文件占用进程的方法实施例三的流程图;
[0070]图4为根据占用目标文件的进程的进程标识值获取占用所述目标文件的进程名的流程图;
[0071 ]图5为本发明获取文件占用进程的装置实施例一的结构示意图;
[0072]图6为本发明获取文件占用进程的装置实施例二的结构示意图;
[0073]图7为本发明获取文件占用进程的装置实施例三的结构示意图;
[0074]图8为本发明获取文件占用进程的装置实施例四的结构示意图;
[0075]图9为本发明获取文件占用进程的装置实施例五的结构示意图;
[0076]图10为本发明获取文件占用进程的装置实施例六的结构示意图;
[0077]图11为本发明电子设备一个实施例的结构示意图。
【具体实施方式】
[0078]下面结合附图对本发明实施例一种获取文件占用进程的方法及装置进行详细描述。
[0079]应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0080]图1为本发明获取文件占用进程的方法实施例一的流程图,如图1所示,本实施例的方法可以包括:
[0081 ]步骤11、获取系统中所有的句柄结构信息;其中,句柄结构信息包括句柄值、句柄类型和进程标识值(PID,Process Identificat1n)。
[0082]本实施例中,当系统为Windows操作系统时,Windows提供的NtQuerySystemlnformat1n是查询系统信息的函数,如查询进程信息、CPU信息、句柄信息,NtQuerySystemInformat 1n的第一个参数为16代表的是句柄信息,因此,此步骤可通过调用Windows操作系统中查询系统信息的函数NtQuerySystemInformat 1n获取系统中所有的句柄结构信息,在调用时将NtQuerySystemlnformat1n的第一个参数设置为16,获取函数NtQuerySystemInformat1n 返回的 SYSTEM_HANDLE_INF0RMAT10N 链表结构的数据,系统中所有的句柄结构信息都保存在这个链表结构中,即该链表结构的数据的每个节点中保存有系统中一个句柄结构信息。由于句柄不止是文件独有的,获取的该链表结构的数据中除了文件句柄结构信息,还有进程句柄结构信息,线程句柄结构信息等。
[0083]步骤102、判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则执行步骤103 ;否则,结束流程。
[0084]本实施例中,由于需要寻找的是占用目标文件的进程,因此只判断系统的文件句柄结构信息中是否有一个文件句柄结构信息对应的文件的文件路径是否与目标文件的文件路径一致。
[0085]步骤103、将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息。
[0086]步骤104、将所述目标文件对应的文件句柄结构信息中的进程标识值,确定为占用目标文件的进程的进程标识值。
[0087]本实施例,通过枚举系统中所有的句柄结构信息,由文件句柄结构信息获取到对应的文件的文件路径,通过匹配文件路径获取到目标文件对应的文件句柄机构信息,再将目标文件对应的文件句柄机构信息中的进程标识值确定为占用目标文件的进程的进程标识值,这就通过文件路径查找到占用目标文件的进程,能够解决现有技术中无法有效查找到占用目标文件的进程从而删除文件的问题,该方法实施简单有效,且便于维护。
[0088]图2为本发明获取文件占用进程的方法实施例二的流程图,如图2所示,本实施例的方法可以包括:
[0089 ]步骤201、获取系统中所有的句柄结构信息。
[0090]当本方法应用的操作系统为Windows操作系统时,此步骤可实施为以下两步骤:[0091 ] (I)调用Windows操作系统中函数NtQuery Sy stemlnformat 1n,调用时将函数NtQuery Sy stemlnformat 1n 的第一个参数设置为16。
[0092](2)获取函数NtQuerySystemInformat1n返回的链表结构的数据;其中,在链表结构的数据节点中保存有系统中句柄结构信息。
[0093]步骤202、判断系统中所有的句柄结构信息的第N个句柄结构信息中的句柄类型是否是文件句柄类型,是则执行步骤203,否则执行步骤205;其中,N的初始值为I。
[0094]本实施例中,判断步骤2O 2例如可实施为判断调用函数NtQuerySystemInf ormat1n返回的链表结构的数据的第N个节点保存的句柄结构信息中的句柄类型是否是“file”文件句柄类型,若是,才代表该句柄结构信息是文件句柄结构信息。其中,N的初始值为I,即从所述链表结构的数据的第一个节点开始判断,第N个节点为按照所述链表结构的数据的链表走向走到的第N个节点。
[0095]步骤203、根据系统中所有的句柄结构信息的第N个句柄结构信息中的句柄值,获取该第N个句柄结构信息对应的文件的文件路径。
[0096]本实施例中,此步骤例如可实施为:根据调用函数NtQuerySystemInformat1n返回的链表结构的数据的第N个节点保存的文件句柄结构信息中的句柄值,调用Windows系统中查询信息文件函数NtQuery Informat1nFi Ie获取第N个节点保存的文件句柄结构信息对应的文件的文件路径。
[0097]步骤204、判断目标文件的文件路径是否与系统中所有的句柄结构信息的第N个句柄结构信息对应的文件的文件路径相一致,是则执行步骤207,否则执行步骤205。
[0098]例如,此步骤可以实施为判断目标文件的文件路径是否与调用函数NtQuerySystemInf ormat1n返回的链表结构的数据的第N个节点保存的句柄结构信息对应的文件的文件路径相一致。
[0099]步骤205、判断N是否等于M,若N等于M则结束流程,若N不等于M,则执行步骤206;其中,M为系统中所有的句柄结构信息的数量。
[0?00] 其中,当采用调用函数NtQuerySystemInformat1n返回的链表结构的数据为基础执行本实施例的方法时,M为所述链表结构的数据的节点总数。
[0101]步骤206、令N=N+1,随后返回步骤202。
[0102]步骤207、将系统中所有的句柄结构信息的第N个句柄结构信息确定为目标文件对应的文件句柄结构信息,并继续执行步骤208。
[0103]步骤208、将目标文件对应的文件句柄结构信息中的进程标识值,确定为占用所述目标文件的进程的进程标识值。[0?04] 本实施例中,若在调用函数NtQuerySystemInformat1n返回的链表结构的数据中查找目标文件对应的文件句柄结构信息,链表结构的数据的前N个节点保存的句柄结构信息均不是目标文件对应的文件句柄结构信息(句柄类型不是文件句柄类型或对应的文件的文件路径与目标文件的文件路径不一致),则执行到步骤206时,先判断是否已经遍历完该链表结构的数据,若没有,则步骤207中令N的值加I,即走到下一个节点继续返回执行步骤202。
[0105]本实施例中,对于系统中的每个句柄结构信息,先通过句柄类型确定该句柄结构信息是否是文件句柄结构信息,若是,再根据该文件句柄结构信息的句柄值获取对应的文件的文件路径后与目标文件的文件路径进行比较。该方法在系统的所有句柄结构信息中查找到目标文件对应的文件句柄结构信息的效率高。
[0106]当然,除了本实施例二提供的根据系统中的所有句柄结构信息查找目标文件对应的文件句柄结构信息的方法,还可以有其他实施方式获取到目标文件对应的文件句柄结构信息,例如:在根据步骤201获取到系统中所有的句柄结构信息后,可以先根据句柄结构信息中的句柄类型,筛选出系统中所有的文件句柄结构信息;然后再根据文件句柄结构信息中的句柄值,获取每个文件句柄结构信息对应的文件的文件路径;最后将获取到的所有文件句柄结构信息对应的文件的文件路径与目标文件的文件路径进行匹配,查找出其中一个与目标文件的文件路径一致的文件路径,并将查找到的该文件路径对应的文件句柄结构信息确定为目标文件对应的文件句柄结构信息。
[0107]图3为本发明获取文件占用进程的方法实施例三的流程图,如图3所示,本实施例在图1所示方法实施例的基础上,还包括终止占用目标文件的进程并删除目标文件的步骤,具体的,本实施例的方法可以包括:
[0108]步骤301、获取系统中所有的句柄结构信息;
[0109]本实施例中,步骤301的过程和上述方法实施例的步骤101或步骤201类似,此处不再赘述。
[0110]步骤302、判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则执行步骤303 ;否则,结束流程。
[0111]本实施例中,步骤302的过程和上述方法实施例的步骤102类似,或者在Windows系统中实施为上述实施例二中的步骤202-206,此处不再赘述。
[0112]步骤303、将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息。
[0113]本实施例中,步骤302的过程和上述方法实施例的步骤103类似,此处不再赘述。
[0114]步骤304、将目标文件对应的文件句柄结构信息中的进程标识值,确定为占用目标文件的进程的进程标识值。
[0115]步骤305、根据占用目标文件的进程的进程标识值,解除占用所述目标文件的进程对目标文件的占用。
[0116]本实施例中,当系统为Windows操作系统时,步骤305可以根据占用目标文件的进程的进程标识值,先调用系统的打开进程函数OpenProcess打开占用所述目标文件的进程,获取占用目标文件的进程的进程句柄,随后将获取到的进程句柄作为参数传入终止进程函数TerminateProcess,通过所述终止进程函数TerminateProcess结束占用目标文件的进程。
[0117]步骤306、删除目标文件。
[0118]本实施例中,当系统为Windows操作系统时,步骤306可以通过调用系统的删除文件函数DeleteFile删除目标文件。
[0119]本实施例,在获取到占用目标文件的进程的进程标识值之后,通过结束该进程标识值对应的进程,即可删除目标文件。本实施例三还给出了常用Windows操作系统下结束进程和删除目标文件的可行办法,方法简单有效。
[0120]上述方法实施例一或二或三中,步骤104或步骤208或步骤304之后,该方法还可包括步骤:根据占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名。
[0121 ]如图4所示,根据占用目标文件的进程的进程标识值获取占用目标文件的进程名的具体方法可以包括:
[ΟΙ22] 步骤401、通过调用进程信息快照获取函数063丨61'001116]^325肪口81101:获得系统中正在运行的所有进程信息列表;其中,进程信息包括进程标识值及进程名;
[0123]步骤402、通过调用第一个进程句柄获取函数Process32First,将CreateToolhelp32Snapshot获得的进程信息列表中第I个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存。
[ΟΙ24] 具体地,此步骤402中,调用函数Process32First先获取进程信息列表中第I个进程信息的进程句柄,然后根据所述进程信息列表中第I个进程信息的进程句柄,将第I个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存。
[0125]步骤403、判断占用所述目标文件的进程的进程标识值是否与PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致;若一致,则执行步骤404,若不一致,则执行步骤405;
[0126]步骤404、获取PR0CESSENTRY32中当前保存的进程信息中的进程名,作为占用所述目标文件的进程名;
[0127]步骤405、令附=附+1,并通过调用下一个进程句柄获取函数Process32Next,将所述进程信息列表中第NI个进程信息提取到PR0CESSENTRY32中保存,然后返回执行步骤403。
[0128]具体地,此步骤405中,调用函数ProCeSS32NeXt可获取所述进程信息列表中第NI个进程信息的进程句柄,NI的初始值为I,实际上函数Process32Next获取的就是PR0CESSENTRY32中当前保存进程信息在所述进程信息列表中的下一个进程信息的进程句柄。然后根据获取的第NI个进程信息的进程句柄,将第NI个进程信息提取到PR0CESSENTRY32 中保存。
[0129]本实施例中,函数CreateToolhelp32Snapshot用于获取系统的进程快照,即调用CreateToo lhelp32Snapshot得到系统中所有进程信息列表,通过函数Process32First获取系统的所有进程信息列表中第I个进程信息的进程句柄,根据该句柄将第I个进程信息提取至IJPR0CESSENTRY32中保存,然后通过函数Process32Next可获取到进程信息列表的下一个进程信息的进程句柄,并将Process32Next获取到的进程句柄对应的进程信息提取到PR0CESSENTRY32中保存。PR0CESSENTRY32只能保存最近一次存入的数据,因此,每次只需将占用所述目标文件的进程的进程标识值,与PR0CESSENTRY32中当前保存的进程信息中的进程标识值进行匹配即可。由于调用Windows函数CreateToolhelp32Snapshot,Process32First,Process32Next枚举系统中所有进程的方法已是成熟技术,此处只对如何结合使用这三个函数进行占用目标文件的进程名的获取进行说明,对具体的调用Windows函数 CreateToo Ihe lp32Snapshot,Proces s32Fir st,Process32Next 枚举系统进程的方法不再赘述。
[0130]图5为本发明获取文件占用进程的装置实施例一的结构示意图,如图5所示,本实施例的装置可以包括:句柄结构信息获取模块U、匹配模块12和进程标识确定模块13;其中,
[0131]句柄结构信息获取模块11,用于获取系统中所有的句柄结构信息,并在获取到系统中所有的句柄结构信息后向匹配模块12发送匹配指令;其中,获取的句柄结构信息包括句柄值、句柄类型和进程标识值;
[0132]匹配模块12,用于根据匹配指令,判断目标文件的文件路径是否与句柄结构信息获取模块11获取的系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与目标文件的文件路径相一致的文件句柄结构信息确定为目标文件对应的文件句柄结构信息,并将目标文件对应的文件句柄结构信息发送给进程标识确定模块13;
[0133]进程标识确定模块13,用于将匹配模块12提供的目标文件对应的文件句柄结构信息中的进程标识值,确定为占用所述目标文件的进程的进程标识值。
[0134]本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0135]优选地,当获取文件占用进程的装置应用于Windows操作系统时,图1中的句柄结构信息获取模块11通过调用查询系统信息的函数NtQuerySystemInf ormat1n(调用时将函数NtQuerySystemInformat1n的第一个参数设置为16),获取函数NtQuerySystemInf ormat1n返回的链表结构的数据;其中,在所述链表结构的数据节点中保存有系统中句柄结构信息。
[0136]图6为本发明获取文件占用进程的装置实施例二的结构示意图,该装置应用于Windows操作系统下,如图6所示,本实施例的装置在图5所示装置结构的基础上,进一步地,匹配模块12可以包括读取子模块21、第一判断子模块22、文件路径获取子模块23、第二判断子模块24和第三判断子模块25;其中,
[0137]读取子模块21,用于根据匹配指令读取句柄结构信息获取模块11获取的系统中所有的句柄结构信息的第N个句柄结构信息,读取完后向第一判断子模块22发送第一指令,并将当前N值发送给第三判断子模块25;其中,N的初始值为I;
[0138]第一判断子模块22,用于根据第一指令,判断读取子模块21本次读取的系统中所有的句柄结构信息的第N个句柄结构信息中的句柄类型是否是文件句柄类型;若是,则向文件路径获取子模块23发送文件路径获取指令;否则,向第三判断子模块25发送第三指令;
[0139]文件路径获取子模块23,用于在收到文件路径获取指令时,根据读取子模块21本次读取的系统中所有的句柄结构信息的第N个句柄结构信息中的句柄值,获取第N个句柄结构信息对应的文件的文件路径,随后向第二判断子模块24发送第二指令;其中,第二指令包括获取的系统中所有的句柄结构信息的第N个句柄结构信息对应的文件的文件路径;
[0140]第二判断子模块24,用于根据收到的第二指令,判断目标文件的文件路径是否与系统中所有的句柄结构信息的第N个句柄结构信息对应的文件的文件路径相一致;若是,则将第N个句柄结构信息确定为目标文件对应的文件句柄结构信息并发送给进程标识确定模块13;否则,向第三判断子模块25发送第三指令;
[0141]第三判断子模块25,用根据收到的第三指令,判断读取子模块21发来的当前N值是否等于M,若N等于M,则目标文件的文件路径与系统中所有的文件句柄结构信息对应的文件的文件路径均不相同,若N不等于M,则令N=N+1后向读取子模块21发送包括最新N值的匹配指令;其中,M为系统中所有的句柄结构信息的数量。
[0142]本实施例的装置,可以用于执行图1或图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0143]优选地,本发明获取文件占用进程的装置实施例二中,文件路径获取子模块23根据读取子模块21本次读取的链表结构的数据的第N个句柄结构信息中的句柄值,调用系统中查询信息文件函数NtQuery Informat1nFi Ie获取第N个句柄结构信息对应的文件的文件路径。
[0144]图7为本发明获取文件占用进程的装置实施例三的结构示意图,如图7所示,本实施例的装置在图5所示装置结构的基础上,进一步地,该获取文件占用进程的装置还包括进程名确定模块14;其中,进程标识确定模块13,还用于将占用所述目标文件的进程的进程标识值发送给进程名确定模块14;进程名确定模块14,用于根据收到的占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名。
[0145]图8为本发明获取文件占用进程的装置实施例四的结构示意图,该装置应用于Windows操作系统下,如图8所示,本实施例的装置在图7所示装置结构的基础上,进一步地,进程名确定模块14包括:
[0146]第一调用子模块3I,用于通过调用进程信息快照获取函数CreateToolhelp32Snapshot获得系统中正在运行的所有进程信息列表,并在获得系统中正在运行的所有进程信息列表后向第二调用子模块32发送第四指令;其中,每个进程信息包括进程标识值及进程名;
[0147]第二调用子模块32,用于根据第四指令,通过调用第一个进程句柄获取函数Pr0CeSS32FirSt,将第一调用子模块31获得的进程信息列表中第I个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存,随后向第四判断子模块33发送第五指令;
[0148]第四判断子模块33,用于根据第五指令,判断进程标识确定模块13提供的占用所述目标文件的进程的进程标识值是否与PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致;若一致,则获取PR0CESSENTRY32中当前保存的进程信息中的进程名,作为占用目标文件的进程名;若不一致,则向第三调用子模块34发送第六指令;
[0149]第三调用子模块34,用于根据第六指令,先令N1= N1+1,随后通过调用下一个进程句柄获取函数ProCeSS32NeXt,将第一调用子模块31获得的进程信息列表中第NI个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存,然后向第四判断子模块33发送第五指令;其中,NI的初始值为I。
[0150]本实施例的装置,可以用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0151]图9为本发明获取文件占用进程的装置实施例五的结构示意图,如图9所示,本实施例的装置在图5所示装置结构的基础上,进一步地,该获取文件占用进程的装置还包括解除占用模块15和文件删除模块16;其中:
[0152]解除占用模块15,用于根据进程标识确定模块13确定的占用目标文件的进程的进程标识值,解除占用所述目标文件的进程对目标文件的占用,随后向文件删除模块16发送进程终止通知;
[0153]文件删除模块16,用于在收到进程终止通知后,删除目标文件。
[0154]本实施例的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0155]图10为本发明获取文件占用进程的装置实施例六的结构示意图,如图10所示,本实施例的装置在图9所示装置结构的基础上,进一步地,解除占用模块15包括进程句柄获取子模块41和进程终止子模块42:其中,
[0156]进程句柄获取子模块41,用于根据进程标识确定模块13确定的占用所述目标文件的进程的进程标识值,调用系统的打开进程函数OpenProcess打开占用目标文件的进程,获取占用目标文件的进程的进程句柄,将获取的进程句柄发送给进程终止子模块42;
[0157]进程终止子模块42,用于将收到的进程句柄作为参数传入终止进程函数TerminateProcess,通过函数TerminateProcess结束占用目标文件的进程,随后向文件删除模块16发送进程终止通知;
[0158]文件删除模块16用于通过调用系统的删除文件函数删除目标文件。
[0159]本实施例的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0160]本发明实施例提供的获取文件占用进程的装置,可以由目标文件的句柄结构信息,获取占用该目标文件的进程,方便用户查找占用目标文件的进程,同样也可作为杀毒软件安全程序查找占用文件的进程源头,如果被占用的文件是病毒文件,而杀毒软件无法删除的时候,用本方案查找到占用目标文件的进程名,先结束进程,然后即可删除被进程占用的病毒文件,提高了对病毒文件的清理成功率,对维护计算机系统安全有积极意义。此外,通过提供应用windows函数的方式查找占用文件的进程的具体方式,使得该方案的实施更为高效稳定且便于维护。
[0161]图11为本发明电子设备一个实施例的结构示意图,可以实现本发明图1-4所示实施例的流程,如图11所示,上述移动设备可以包括:壳体51、处理器52、存储器53、电路板54和电源电路55,其中,电路板54安置在壳体51围成的空间内部,处理器52和存储器53设置在电路板54上;电源电路55,用于为上述电子设备的各个电路或器件供电;存储器53用于存储可执行程序代码;处理器52通过读取存储器53中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的获取文件占用进程的方法。
[0162]处理器52对上述步骤的具体执行过程以及处理器52通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-4所示实施例的描述,在此不再赘述。
[0163]该电子设备以多种形式存在,包括但不限于:
[0164](I)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
[0165](2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
[0166](3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
[0167](4)其他具有数据交互功能的电子设备。
[0168]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
[0169]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
[0170]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
【主权项】
1.一种获取文件占用进程的方法,其特征在于,包括: 获取系统中所有的句柄结构信息;其中,所述句柄结构信息包括句柄值、句柄类型和进程标识值; 判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息; 将所述目标文件对应的文件句柄结构信息中的进程标识值确定为占用所述目标文件的进程的进程标识值。2.根据权利要求1所述的获取文件占用进程的方法,其特征在于,所述系统为Windows操作系统;其中, 所述获取系统中所有的句柄结构信息,包括: 调用Windows操作系统中查询系统信息的函数NtQuery SystemInformat 1n,调用时将查询系统信息的函数NtQuerySystemInformat1n的第一个参数设置为16; 获取所述查询系统信息的函数NtQuerySystemInformat1n返回的链表结构的数据;其中,在所述链表结构的数据节点中保存有系统中句柄结构信息。3.根据权利要求1所述的获取文件占用进程的方法,其特征在于,所述判断目标文件的文件路径是否与系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息,包括: 步骤21:判断所述系统中所有的句柄结构信息的第N个句柄结构信息中的句柄类型是否是文件句柄类型,是则执行步骤22,否则执行步骤25;其中,N的初始值为I; 步骤22:根据所述第N个句柄结构信息中的句柄值,获取所述第N个句柄结构信息对应的文件的文件路径,并继续执行步骤23 ; 步骤23:判断所述目标文件的文件路径是否与所述第N个句柄结构信息对应的文件的文件路径相一致,是则执行步骤24,否则执行步骤25; 步骤24:将所述第N个句柄结构信息确定为所述目标文件对应的文件句柄结构信息; 步骤25:判断N是否等于M,若N等于M则结束流程,若N不等于M,则令N = N+1后返回步骤21;其中,M为所述系统中所有的句柄结构信息的数量。4.根据权利要求3所述的获取文件占用进程的方法,其特征在于,所述根据所述第N个句柄结构信息中的句柄值,获取所述第N个句柄结构信息对应的文件的文件路径,包括: 根据所述第N个句柄结构信息中的句柄值,调用系统中查询信息文件函数NtQuery Informat1nFi Ie获取所述第N个句柄结构信息对应的文件的文件路径。5.根据权利要求1所述的获取文件占用进程的方法,其特征在于,在将所述目标文件对应的文件句柄结构信息中的进程标识值确定为占用所述目标文件的进程的进程标识值之后,还包括: 根据所述占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名。6.根据权利要求5所述的获取文件占用进程的方法,其特征在于,所述系统为Windows操作系统;其中, 所述根据所述占用所述目标文件的进程的进程标识值,获取占用所述目标文件的进程名,包括: 通过调用进程信息快照获取函数CreateToolhe lp32Snapshot获得系统中正在运行的所有进程信息列表;所述进程信息包括进程标识值及进程名; 通过调用第一个进程句柄获取函数ProCesS32FirSt,将所述进程信息列表中第I个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存; 判断所述占用所述目标文件的进程的进程标识值是否与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致; 若所述占用所述目标文件的进程的进程标识值与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致,则获取所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程名,作为占用所述目标文件的进程名; 若所述占用所述目标文件的进程的进程标识值与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值不一致,则通过调用下一个进程句柄获取函数ProcesS32NeXt,将所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息在所述进程信息列表中对应的下一个进程信息提取到存放进程信息结构体PR0CESSENTRY32中保存,然后返回执行判断所述占用所述目标文件的进程的进程标识值是否与所述存放进程信息结构体PR0CESSENTRY32中当前保存的进程信息中的进程标识值相一致的步骤。7.根据权利要求1所述的获取文件占用进程的方法,其特征在于,在所述将所述目标文件对应的文件句柄结构信息中的进程标识值确定为占用所述目标文件的进程的进程标识值之后,还包括: 根据占用所述目标文件的进程的进程标识值,解除占用所述目标文件的进程对所述目标文件的占用; 删除所述目标文件。8.根据权利要求7所述的获取文件占用进程的方法,其特征在于,所述系统为Windows操作系统; 所述根据占用所述目标文件的进程的进程标识值,解除占用所述目标文件的进程对所述目标文件的占用,包括: 根据占用所述目标文件的进程的进程标识值,调用系统的打开进程函数OpenProcess打开占用所述目标文件的进程,获取占用所述目标文件的进程的进程句柄; 将获取到的所述进程句柄作为参数传入终止进程函数TerminateProcess,通过所述终止进程函数TerminateProcess结束占用所述目标文件的进程; 所述删除所述目标文件,包括:调用系统的删除文件函数DeleteFile删除所述目标文件。9.一种获取文件占用进程的装置,其特征在于,包括: 句柄结构信息获取模块,用于获取系统中所有的句柄结构信息;其中,所述句柄结构信息包括句柄值、句柄类型和进程标识值; 匹配模块,用于判断目标文件的文件路径是否与句柄结构信息获取模块获取的系统中所有的句柄结构信息中一个文件句柄结构信息对应的文件的文件路径相一致,若是,则将对应的文件的文件路径与所述目标文件的文件路径相一致的文件句柄结构信息确定为所述目标文件对应的文件句柄结构信息; 进程标识确定模块,用于将所述匹配模块确定的所述目标文件对应的文件句柄结构信息中的进程标识值,确定为占用所述目标文件的进程的进程标识值。10.根据权利要求9所述的获取文件占用进程的装置,其特征在于,所述系统为Windows操作系统时,所述句柄结构信息获取模块具体用于通过调用Windows操作系统中查询系统信息的函数NtQuerySystemInformat1n,获取所述查询系统信息的函数NtQuerySystemInformat1n返回的链表结构的数据;其中,调用时将查询系统信息的函数NtQuerySystemInformat1n的第一个参数设置为16;在所述链表结构的数据节点中保存有系统中句柄结构信息。
【文档编号】G06F9/48GK106020958SQ201610327243
【公开日】2016年10月12日
【申请日】2016年5月17日
【发明人】李文靖
【申请人】北京金山安全软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1