文件打开方法及装置的制作方法

文档序号:6432399阅读:212来源:国知局
专利名称:文件打开方法及装置的制作方法
技术领域
本发明涉及数据处理技术领域,特别涉及一种文件打开方法及装置。
背景技术
随着网络的迅速发展,信息数量日益增加,存储信息的各种电子文件数量也越来越多。无论是在日常的休闲娱乐中,还是在紧张忙碌的工作中,都常常会看到或用到各种各样的文件,打开文件也几乎成为了人们每天必不可少的事。现有的文件打开方式都是通过常规的Windows API (Application ProgrammingInterface,应用程序编程接口 )机制实现,且文件的打开操作会被文件过滤驱动捕获和控制。其中,文件过滤驱动是一种Windows驱动程序,其依附在文件系统上,可以截获系统对文件的访问,并提供过滤控制等功能。在装有杀毒软件的机器上,文件打开动作被文件过滤驱动捕获后,会激活一次病毒扫描。在实现本发明的过程中,发明人发现现有技术至少存在以下问题现有的文件打开方式中,文件打开时激活的病毒扫描在多数情况下是不必要的,且会加重系统负担;另外,在多个杀毒软件共存的情况下,其中一款杀毒软件的文件打开操作会引起另一款杀毒软件的病毒扫描,扫描又会打开文件,另一款杀毒会被激活,然后再去扫描,由此引发文件的重复打开,导致系统出现兼容性问题。

发明内容
为了在打开文件的同时,避免出现因文件的重复打开而引起的兼容性问题以及加重系统负担的问题,本发明实施例提供了一种文件打开方法及装置。所述技术方案如下一方面,提供了一种文件打开方法,所述方法包括捕获文件打开动作,并获取对应的原始文件系统设备对象和原始文件系统分发函数地址;直接向所述原始文件系统设备对象所在的文件系统发送文件打开请求,并由所述文件系统将所述文件打开请求传递给所述原始文件系统分发函数地址所对应的原始文件系统分发函数,由所述原始文件系统分发函数执行文件打开操作。进一步地,所述捕获文件打开动作之前,还包括搜索32位动态链接库文件的导入表,以预设的函数地址替换所述导入表中保存的函数地址;相应地,由所述原始文件系统分发函数执行文件打开操作时,具体包括由所述原始文件系统分发函数按照替换后的预设的函数地址执行文件打开操作。进一步地,所述捕获文件打开动作之后,还包括记录所述文件打开动作所对应的参数;相应地,由所述原始文件系统分发函数执行文件打开操作时,具体包括由所述原始文件系统分发函数按照记录的参数执行文件打开操作。
其中,所述获取对应的原始文件系统设备对象,具体包括通过预先编写的驱动程序在记录有文件系统设备对象的VPB结构中查找对应的原始文件系统设备对象。所述获取对应的原始文件系统分发函数地址,具体包括以BOOT方式启动预先编写的驱动程序,通过所述预先编写的驱动程序获取对应的原始文件系统分发函数地址。所述直接向所述原始文件系统设备对象所在的文件系统发送文件打开请求,具体包括使用IoCreateFileSpecifyDeviceObjectHint函数,并以所述原始文件系统设备对象为参数,将所述文件打开请求直接发送给所述原始文件系统设备对象所在的文件系统。另一方面,还提供了一种文件打开装置,所述装置包括捕获模块,用于捕获文件打开动作;第一获取模块,用于在所述捕获模块捕获到文件打开动作后,获取对应的原始文件系统设备对象;第二获取模块,用于在所述捕获模块捕获到文件打开动作后,获取对应的原始文件系统分发函数地址;发送模块,用于直接向所述第一获取模块获取到的原始文件系统设备对象所在的文件系统发送文件打开请求,并由所述文件系统将所述文件打开请求传递给所述第二获取模块获取到的原始文件系统分发函数地址所对应的原始文件系统分发函数;打开模块,用于由所述原始文件系统分发函数执行文件打开操作。进一步地,所述装置,还包括替换模块,用于搜索32位动态链接库文件的导入表,以预设的函数地址替换所述导入表中保存的函数地址;相应地,所述打开模块,具体用于由所述原始文件系统分发函数按照所述替换模块替换后的预设的函数地址执行文件打开操作。进一步地,所述装置,还包括记录模块,用于记录所述捕获模块捕获到的文件打开动作所对应的参数;相应地,所述打开模块,具体用于由所述原始文件系统分发函数按照所述记录模块记录的参数进行文件打开操作。其中,所述第一获取模块,具体用于通过预先编写的驱动程序在记录有文件系统设备对象的VPB结构中查找对应的原始文件系统设备对象。所述第二获取模块,具体用于以BOOT方式启动预先编写的驱动程序,通过所述预先编写的驱动程序获取对应的原始文件系统分发函数地址。所述发送模块,具体用于使用IoCreateFileSpecifyDeviceObjectHint函数,并以所述原始文件系统设备对象为参数,将所述文件打开请求直接发送给所述原始文件系统设备对象所在的文件系统。本发明实施例提供的技术方案带来的有益效果是通过捕获文件打开动作,直接向对应的原始文件系统设备对象所在的文件系统发送文件打开请求,由对应的原始文件系统分发函数进行文件打开操作,实现了对文件过滤驱动的穿透,从而避免了因每次打开文件都进行病毒扫描的不必要操作,且避免了在安装多个杀毒软件时,因重复打开文件进行扫描所造成的系统负担加重问题及兼容性问题。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I是本发明实施例一提供的文件打开方法流程图;图2是本发明实施例二提供的文件打开方法流程图;图3是本发明实施例二提供的文件打开过程中的穿透流程图;图4是本发明实施例三提供的文件打开装置的结构示意图;图5是本发明实施例三提供的另一种文件打开装置的结构示意图;图6是本发明实施例三提供的又一种文件打开装置的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例一由于现有的文件打开方式中,文件打开动作会被文件过滤驱动捕获和控制,从而激活病毒扫描,该种操作不仅会增加系统的负担,针对安装多个杀毒软件的情况,该种操作还可引发多个杀毒软件的兼容性问题。对此,本实施例提供了一种文件打开方法,该方法通过穿透原有的文件打开方式中的文件过滤驱动操作,直接将文件打开请求发送到文件系统来执行打开操作,从而避免了因文件过滤驱动的控制所造成的系统负担加重问题及兼容性问题。参见图1,本实施例提供的方法流程具体如下101 :捕获文件打开动作,并获取对应的原始文件系统设备对象和原始文件系统分发函数地址;102:直接向原始文件系统设备对象所在的文件系统发送文件打开请求,并由文件系统将文件打开请求传递给原始文件系统分发函数地址所对应的原始文件系统分发函数;103 :由原始文件系统分发函数执行文件打开操作。进一步地,捕获文件打开动作之前,还包括搜索32位动态链接库文件的导入表,以预设的函数地址替换导入表中保存的函数地址;相应地,由原始文件系统分发函数执行文件打开操作时,具体包括由原始文件系统分发函数按照替换后的预设的函数地址执行文件打开操作。其中,32位动态连接库文件的导入表中记录了可执行文件需要使用到的系统API函数的地址,这个API函数的地址即为导入表中保存的函数地址,例如,NtCreateFile和NtOpenFile等函数的地址。以预设的函数地址替换导入表中保存的函数地址是为了在文件过滤驱动捕获和控制文件打开操作之前,穿透中间经过的过滤驱动,从而将文件打开请求直接传递到原始文件系统设备对象所在的文件系统,并由原始文件系统分发函数执行文件打开操作,进而避免因每次打开文件都进行病毒扫描的不必要操作,且避免了在安装多个杀毒软件时,因重复打开文件进行扫描所造成的系统负担加重问题及兼容性问题。具体实现时,可以预设的函数MyNtCreateFile的地址替换导入表中保存的函数的地址,当然,还可以采用其他预设的函数,本实施例不对具体的预设的函数地址进行限定,能够实现对文件过滤驱动的穿透即可。进一步地,捕获文件打开动作之后,还包括记录文件打开动作所对应的参数;相应地,由原始文件系统分发函数执行文件打开操作时,具体包括由原始文件系统分发函数按照记录的参数执行文件打开操作。其中,获取对应的原始文件系统设备对象,具体包括通过预先编写的驱动程序在记录有文件系统设备对象的VPB(Volume ParameterBlock,卷参数块)结构中查找对应的原始文件系统设备对象。获取对应的原始文件系统分发函数地址,具体包括以BOOT方式启动预先编写的驱动程序,通过预先编写的驱动程序获取对应的原始文件系统分发函数地址。直接向原始文件系统设备对象所在的文件系统发送文件打开请求,具体包括使用IoCreateFileSpecifyDeviceObjectHint函数,并以原始文件系统设备对象为参数,将文件打开请求直接发送给原始文件系统设备对象所在的文件系统。本实施例提供的方法,通过捕获文件打开动作,直接向对应的原始文件系统设备对象所在的文件系统发送文件打开请求,由对应的原始文件系统分发函数进行文件打开操作,实现了对文件过滤驱动的穿透,从而避免了因每次打开文件都进行病毒扫描的不必要操作,且避免了在安装多个杀毒软件时,因重复打开文件进行扫描所造成的系统负担加重问题及兼容性问题。为了更加详细地阐述本实施例提供的方法,接下来,以实施例二为例,对本实施例提供的方法进行解释说明,详见如下实施例二 实施例二本实施例提供了一种文件打开方法,该方法通过穿透原有的文件打开方式中的文件过滤驱动,直接将文件打开请求发送到文件系统来执行文件打开操作,从而对上述实施例一提供的方法作进一步详细的解释说明,避免了因文件过滤驱动的控制所造成的系统负担加重问题及兼容性问题。参见图2,本实施例提供的方法流程具体如下201 :搜索32位动态链接库文件的导入表,并以预设的函数地址替换导入表中保存的函数地址;其中,32位动态链接库文件的导入表,即为可执行文件必备的kernel32. dll的导入表,其记录了文件需要使用到的系统API函数的地址。搜索该32位动态链接库文件的导入表,以预设的函数地址替换导入表中保存的函数地址的过程即为实现hook的过程,通过在ring应用层执行hook,即可先对打开文件等操作进行控制,从而在替换地址之后,当调用原来函数时,流程会进入到替换后的预设的函数。本实施例不对导入表中保存的原函数地址及替换后的地址进行限定,此处hook的函数可以是NtCreateFile和NtOpenFile等函数,替换后的预设的函数地址可根据需要进行设定。具体实现时,可以预设的函数MyNtCreateFile的地址替换导入表中保存的函数的地址,当然,还可以采用其他预设的函数,本实施例不对具体的预设的函数地址进行限定,能够实现对文件过滤驱动的穿透即可。如图3所示,替换导入表中保存的函数地址后,文件打开流程由原来的虚箭头所示流程修改为实箭头所示的流程,从而穿透了原有流程中可能存在的文件过滤驱动。需要说明的是,对于多次打开同一文件或打开多个文件的情况,无需每次重复执行该步骤,替换kernel32. dll导入表中记录的系统API函数的地址一次即可,替换之后,每当调用原来的系统API函数时,都将改成调用替换后的地址所对应的函数,以此穿透原来的文件过滤驱动。202 :捕获文件打开动作,并记录打开动作所对应的参数;针对该步骤,本实施例不对捕获文件打开动作的具体方式进行限定,由于现有的文件打开方式中也会存在捕获文件打开动作的操作,因此可通过现有的实现方式实现。对于打开动作所对应的参数,本实施例对此不进行具体限定,包括但不限于文件名,申请的权限等参数。记录打开动作所对应的参数,即将打开动作所对应的参数保存到内存中,以备后续根据记录的参数执行打开操作。203 :获取对应的原始文件系统设备对象和原始文件系统分发函数地址;具体地,文件系统指用于存储文件的磁盘或分区,而文件系统设备对象可以是某个磁盘,或某个分区,不同的文件对应不同的文件系统设备对象,例如,如果待打开的文件位于C磁盘,则可将C磁盘作为该文件对应的文件系统设备对象。而文件系统分发函数用于执行文件打开操作,对于不同的文件系统设备对象,其可以调用多个文件系统分发函数。当文件系统设备对象接收到文件打开请求时,即可调用对应的文件系统分发函数。在本实施例中,针对经过文件过滤驱动捕获并修改后的文件系统设备对象及文件系统分发函数,本实施例将未被文件过滤驱动修改的该文件原本对应的文件系统设备对象称为原始文件系统设备对象,该原始文件系统设备对象调用的文件系统分发函数称为原始文件系统分发函数。本实施例不对获取原始文件系统设备对象和原始文件系统分发函数地址的方式进行限定。实际应用中,可预先编写用于获取原始文件系统设备对象和原始文件系统分发函数地址的驱动程序,通过该预先编写的驱动程序来获取原始文件系统设备对象和原始文件系统分发函数地址。由于VPB(Volume Parameter Block,卷参数块)结构中记录了文件系统设备对象,因此,可通过预先编写的驱动程序在记录有文件系统设备对象的VPB结构中查找对应的原始文件系统设备对象。另外,由于预先编写的驱动程序以BOOT方式启动时,此时系统记录的信息都是未经修改过的,且可信的,则驱动程序以BOOT方式启动时获取到的文件系统分发函数地址即为原始文件系统分发函数地址。因此,可以BOOT方式启动预先编写的驱动程序,通过该预先编写的驱动程序获取对应的原始文件系统分发函数地址。204:直接向原始文件系统设备对象所在的文件系统发送文件打开请求,并由文件系统将文件打开请求传递给原始文件系统分发函数地址所对应的原始文件系统分发函数;具体地,直接向原始文件系统设备对象所在的文件系统发送文件打开请求时,本实施例不对具体的发送方式进行限定,具体实现时,可使用IoCreateFileSpecifyDeviceObjectHint函数,并以原始文件系统设备对象为参数,将文件打开请求直接发送给原始文件系统设备对象所在的文件系统。其中,IoCreateFileSpecifyDeviceObjectHint 函数为 Windows 系统自用的已有API函数,通过使用该函数即可将文件打开请求直接发送给原始文件系统设备对象所在的文件系统;当该文件打开请求被发送到原始文件系统设备对象所在的文件系统后,即将触发原始文件系统设备对象调用对应的原始文件系统分发函数,因而由该文件系统将该文件打开请求传递给原始文件系统分发函数地址所对应的原始文件系统分发函数,由该原始文件系统分发函数执行文件打开操作,从而绕开了中间的文件过滤驱动。205:由原始文件系统分发函数按照替换后的预设的函数地址及记录的参数执行文件打开操作。针对该步骤,由原始文件系统分发函数按照替换后的预设的函数地址执行文件打开操作时,原来的文件打开流程已经被修改,如图3所示,虚箭头所指的流程为原来的文件打开流程,其存在的NtCreateFile函数被替换为MyNtCreateFile函数,文件打开流程也因此由原来虚箭头所指的流程变为实箭头所指的流程,从而绕过了中间可能存在的文件过滤驱动,避免了过滤驱动截获对文件的访问而引起的对文件进行扫描等不必要的操作,即使安装了多个杀毒软件,通过本实施例提供的方法打开文件时,另一款杀毒软件不会检测到该文件的打开动作,从而不会被激活去扫描文件,因此避免了兼容性问题,也避免了加重系统负担的问题。另外,由原始文件系统分发函数按照记录的参数执行文件打开操作的目的是为了符合原来的文件打开方式。例如,原来的文件打开动作对应的参数表明其仅具有读权限,则在记录该参数,并根据该参数打开文件时,仍保持其仅具有读权限,从而与原打开文件的权限要求保持一致,满足用户对文件打开的原始需求。本实施例提供的方法,通过捕获文件打开动作,直接向对应的原始文件系统设备对象所在的文件系统发送文件打开请求,由对应的原始文件系统分发函数进行文件打开操作,实现了对文件过滤驱动的穿透,从而避免了因每次打开文件都进行病毒扫描的不必要操作,且避免了在安装多个杀毒软件时,因重复打开文件进行扫描所造成的系统负担加重问题及兼容性问题。实施例三本实施例提供了一种文件打开装置,参见图4,该装置包括捕获模块401,用于捕获文件打开动作;第一获取模块402,用于在捕获模块401捕获到文件打开动作后,获取对应的原始文件系统设备对象;第二获取模块403,用于在捕获模块401捕获到文件打开动作后,获取对应的原始文件系统分发函数地址;发送模块404,用于直接向第一获取模块402获取到的原始文件系统设备对象所在的文件系统发送文件打开请求,并将文件打开请求传递给第二获取模块403获取到的原始文件系统分发函数地址所对应的原始文件系统分发函数;打开模块405,用于由原始文件系统分发函数执行文件打开操作。进一步地,参见图5,该装置,还包括替换模块406,用于搜索32位动态链接库文件的导入表,以预设的函数地址替换导入表中保存的函数地址;相应地,打开模块405,具体用于由原始文件系统分发函数按照替换模块406替换后的预设的函数地址执行文件打开操作。进一步地,参见图6,该装置,还包括记录模块407,用于记录捕获模块401捕获到的文件打开动作所对应的参数;相应地,打开模块405,具体用于由原始文件系统分发函数按照记录模块407记录的参数进行文件打开操作。其中,第一获取模块402,具体用于通过预先编写的驱动程序在记录有文件系统设备对象的VPB结构中查找对应的原始文件系统设备对象。第二获取模块403,具体用于以BOOT方式启动预先编写的驱动程序,通过预先编写的驱动程序获取对应的原始文件系统分发函数地址。发送模块404,具体用于使用 IoCreateFileSpecifyDeviceOb jectHint 函数,并以原始文件系统设备对象为参数,将文件打开请求直接发送给原始文件系统设备对象所在的文件系统。本实施例提供的装置,通过捕获文件打开动作,直接向对应的原始文件系统设备对象所在的文件系统发送文件打开请求,由对应的原始文件系统分发函数进行文件打开操作,实现了对文件过滤驱动的穿透,从而避免了因每次打开文件都进行病毒扫描的不必要操作,且避免了在安装多个杀毒软件时,因重复打开文件进行扫描所造成的系统负担加重问题及兼容性问题。需要说明的是上述实施例提供的文件打开装置在打开文件时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的文件打开装置与文件打开方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种文件打开方法,其特征在于,所述方法包括 捕获文件打开动作,并获取对应的原始文件系统设备对象和原始文件系统分发函数地址; 直接向所述原始文件系统设备对象所在的文件系统发送文件打开请求,并由所述文件系统将所述文件打开请求传递给所述原始文件系统分发函数地址所对应的原始文件系统分发函数,由所述原始文件系统分发函数执行文件打开操作。
2.根据权利要求I所述的方法,其特征在于,所述捕获文件打开动作之前,还包括 搜索32位动态链接库文件的导入表,以预设的函数地址替换所述导入表中保存的函数地址; 相应地,由所述原始文件系统分发函数执行文件打开操作时,具体包括 由所述原始文件系统分发函数按照替换后的预设的函数地址执行文件打开操作。
3.根据权利要求I所述的方法,其特征在于,所述捕获文件打开动作之后,还包括 记录所述文件打开动作所对应的参数; 相应地,由所述原始文件系统分发函数执行文件打开操作时,具体包括 由所述原始文件系统分发函数按照记录的参数执行文件打开操作。
4.根据权利要求I所述的方法,其特征在于,所述获取对应的原始文件系统设备对象,具体包括 通过预先编写的驱动程序在记录有文件系统设备对象的卷参数块VPB结构中查找对应的原始文件系统设备对象。
5.根据权利要求I所述的方法,其特征在于,所述获取对应的原始文件系统分发函数地址,具体包括 以BOOT方式启动预先编写的驱动程序,通过所述预先编写的驱动程序获取对应的原始文件系统分发函数地址。
6.根据权利要求I所述的方法,其特征在于,所述直接向所述原始文件系统设备对象所在的文件系统发送文件打开请求,具体包括 使用IoCreateFileSpecifyDeviceObjectHint函数,并以所述原始文件系统设备对象为参数,将所述文件打开请求直接发送给所述原始文件系统设备对象所在的文件系统。
7.一种文件打开装置,其特征在于,所述装置包括 捕获模块,用于捕获文件打开动作; 第一获取模块,用于在所述捕获模块捕获到文件打开动作后,获取对应的原始文件系统设备对象; 第二获取模块,用于在所述捕获模块捕获到文件打开动作后,获取对应的原始文件系统分发函数地址; 发送模块,用于直接向所述第一获取模块获取到的原始文件系统设备对象所在的文件系统发送文件打开请求,并由所述文件系统将所述文件打开请求传递给所述第二获取模块获取到的原始文件系统分发函数地址所对应的原始文件系统分发函数; 打开模块,用于由所述原始文件系统分发函数执行文件打开操作。
8.根据权利要求7所述的装置,其特征在于,所述装置,还包括 替换模块,用于搜索32位动态链接库文件的导入表,以预设的函数地址替换所述导入表中保存的函数地址; 相应地,所述打开模块,具体用于由所述原始文件系统分发函数按照所述替换模块替换后的预设的函数地址执行文件打开操作。
9.根据权利要求7所述的装置,其特征在于,所述装置,还包括 记录模块,用于记录所述捕获模块捕获到的文件打开动作所对应的参数; 相应地,所述打开模块,具体用于由所述原始文件系统分发函数按照所述记录模块记录的参数进行文件打开操作。
10.根据权利要求7所述的装置,其特征在于,所述第一获取模块,具体用于通过预先编写的驱动程序在记录有文件系统设备对象的卷参数块VPB结构中查找对应的原始文件系统设备对象。
11.根据权利要求7所述的装置,其特征在于,所述第二获取模块,具体用于以BOOT方式启动预先编写的驱动程序,通过所述预先编写的驱动程序获取对应的原始文件系统分发函数地址。
12.根据权利要求7所述的装置,其特征在于,所述发送模块,具体用于使用IoCreateFileSpecifyDeviceObjectHint函数,并以所述原始文件系统设备对象为参数,将所述文件打开请求直接发送给所述原始文件系统设备对象所在的文件系统。
全文摘要
本发明公开了一种文件打开方法及装置,属于数据处理技术领域。方法包括捕获文件打开动作,并获取对应的原始文件系统设备对象和原始文件系统分发函数地址;直接向原始文件系统设备对象所在的文件系统发送文件打开请求,并由文件系统将文件打开请求传递给原始文件系统分发函数地址所对应的原始文件系统分发函数,由原始文件系统分发函数执行文件打开操作。本发明通过直接向原始文件系统设备对象所在的文件系统发送文件打开请求,由原始文件系统分发函数执行文件打开操作,实现对文件过滤驱动的穿透,从而避免了因每次打开文件都进行病毒扫描的不必要操作,且避免安装多个杀毒软件时,因重复打开文件进行扫描造成的系统负担加重问题及兼容性问题。
文档编号G06F17/30GK102982031SQ20111026003
公开日2013年3月20日 申请日期2011年9月5日 优先权日2011年9月5日
发明者谢飞, 高小明, 马劲松, 刘桂泽 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1