具体实施方式
依照本发明,提供了聚集多个反病毒软件应用程序的知识库的系统、方法和计算机可读介质。向诸如反病毒软件应用程序等用户模式应用程序提供了通过通用信息模型对诸如I/O请求等文件系统操作的访问,这免除了反病毒软件应用程序创建内核模式过滤器的需求。当截取I/O请求时,本发明使安装在计算设备上的每个反病毒软件应用程序执行扫描以便确定与请求相关联的数据是否是恶意软件。虽然会在反病毒软件应用程序的环境中描述本发明,但相关领域和其他领域的技术人员会理解,本发明也可用于软件开发的其他领域。因此,所述的本发明的实施例应该在实质上被构建成说明性的而非限制性的。
图1是依照现有技术配置的计算设备100的框图。计算设备100可以是多种设备中的任意一种,这多种设备包括但不限于个人计算设备、基于服务器的计算设备、个人数字助理、蜂窝电话、具有某些类型的存储器的其他电子设备等等。为了易于说明且因为他们对理解本发明并不重要,图1没有示出许多计算设备的典型组件,诸如键盘、鼠标、打印机和其他I/O设备、显示器等等。
图1所示的计算设备100包括硬件平台102、操作系统104和应用程序平台106。为了易于说明且因为他们对理解本发明并不重要,图1没有示出典型地包含在硬件平台102中的组件,诸如中央处理单元、存储器、硬盘驱动器等等。同样地,因为相似的理由,图1没有示出操作系统104或应用程序平台106的任何组件。
如图1所示,计算设备100的组件由位于底层的硬件平台102和位于顶层的应用程序平台106分层。图1的分层说明本发明更适宜在分级环境中实现。包含在计算设备100中的每个层次依赖于较低层中的系统。更具体地,应用程序平台105在操作系统104之上运行且不能直接访问硬件平台102的组件。相反,应用程序平台106对硬件平台102的任何访问由操作系统104管理。如本领域和其他领域的技术人员所公知的,操作系统104向应用程序平台106提供了应用程序编程接口(“API”),用于定义应用程序106可用的服务。
图2是适于说明向反病毒软件应用程序提供对与I/O请求相关联的数据的访问的现有技术过程的框图。如本领域和其他领域的技术人员公知的,计算机用户具有将数据读出和写入存储设备的持续需求,这些存储设备诸如硬盘、软盘、随机存取存储器、光盘(“CD”)等。例如,多数软件应用程序提供的通用操作是打开存储在存储设备上的文件并在计算机显示器上显示文件内容。然而,由于打开文件会造成执行与文件相关联的恶意软件,因此反病毒软件应用程序一般会在满足打开操作前执行文件的扫描或其他分析。如果检测到恶意软件,则执行扫描的反病毒软件应用程序会例如通过使打开操作失败来防止执行恶意软件。同样,反病毒软件应用程序会向计算机用户示出选项:删除恶意软件或将恶意软件置于“隔离区”。
如本领域和其他领域的技术人员所公知的,在计算设备中作出的I/O请求是由称为I/O系统的操作系统104(图1)的组件处理的。为了保护计算设备以免受到恶意软件的危害,当接收到I/O请求时会通知反病毒软件应用程序。现在参见图2,将描述向反病毒软件应用程序提供对与I/O请求相关联的数据的访问的公知过程。图2所示的计算设备100包括I/O系统200、本地或远程I/O设备202、用户应用程序204、反病毒过滤器206-210和驻留在用户或内核模式中的反病毒软件应用程序/驱动程序212-216。当从诸如用户应用程序204等用户应用程序生成执行I/O的请求时,I/O系统200接收到请求。如图2所示,用户应用程序在用户模式中运作并在内核模式中生成由I/O系统200满足的I/O请求。在满足请求之前,会通知反病毒过滤器206、208和210要调度满足一I/O请求。作为响应,反病毒过滤器206、208和210中的每一个会通知其各自的反病毒软件应用程序/驱动程序212、214和216,应该扫描与I/O请求相关联的数据。如果与I/O请求相关联的数据是恶意软件,则反病毒软件应用程序/驱动程序会被配置成防止I/O请求被满足。相反,如果I/O请求不涉及恶意软件,则I/O系统200会使得I/O请求被满足。例如,I/O系统200会使数据被写入到I/O设备202,在一些系统中,这些I/O设备202是诸如硬盘、软盘、闪存、磁盘、光盘(“CD”)等本地硬件设备。或者,I/O设备202可以是通过网络连接连接到计算设备100的远程硬件设备。
遗憾的是,图2所示的向反病毒软件应用程序提供对与I/O请求相关联的数据的访问的现有技术过程具有要求反病毒软软件供应商各自开发内核模式过滤器的缺陷。如图2所示,反病毒过滤器206、208和210只与特定的反病毒软件应用程序结合使用。此外,由于每种反病毒软件应用程序维护一内核模式过滤器以便执行必要的相同任务,计算机系统遭受到重复的代码同时载入到存储器中的性能负担。
遗憾的是,图2所示的向反病毒软件应用程序提供对与I/O请求相关联的数据的访问的现有技术过程具有潜在地阻碍从计算设备删除恶意软件的缺陷。当在相同的计算设备上安装两个或多个反病毒软件应用程序时,大家知道会发生数据冲突。例如,两个反病毒软件应用程序会确定存储在计算设备上的文件感染了恶意软件。第一反病毒软件应用程序会试图通过删除文件数据来为文件“去除感染”。然而,当第一反病毒软件应用程序试图删除文件数据时,一般会通知第二病毒软件应用程序。在这种情况下,第二反病毒软件应用程序会被配置成防止对受感染文件的任何访问。同样地,第一反病毒软件应用程序会被配置成防止诸如第二反病毒软件应用程序等其他应用程序访问受感染的文件。显然,在这种情况下,第一反病毒软件应用程序或第二反病毒软件应用程序都不能删除恶意软件。
图3是适于说明依照本发明向反病毒软件应用程序提供对与I/O请求相关联的数据的访问的过程的框图。以下旨在提供可以实现本发明的一个合适的计算设备300的示例性概述。图3所示的计算设备300包括可以用与以上参考图2描述的相同名称的组件相似方式操作的几个组件。计算设备300包括I/O系统302、I/O设备304、用户应用程序306、反病毒软件应用程序308、310和312、安全服务应用程序314和包括扫描高速缓存318和数据映射模块320的通用安全过滤器316。本发明所实现的软件实现例程包含在安全服务应用程序314和包括扫描高速缓存318和数据映射模块320的通用安全过滤器316中。一般而言,本发明实现的例程向诸如反病毒软件应用程序308、310和312等用户模式应用程序提供了对与I/O请求相关联的数据的访问,该I/O请求被调度为由I/O系统302来满足。如图3所示,反病毒软件应用程序308、310和312可以不使用内核模式过滤器运行。同样,计算设备300可以用于聚集多个反病毒软件应用程序的知识库来扫描数据并确定数据是否被恶意软件感染。虽然图3和所附文字使用反病毒软件应用程序来描述本发明的实施例,但本发明的软件实现例程可以与其他类型的应用程序结合使用。类似地,本发明的软件实现例程可与执行特定功能的服务而非应用程序通信。因此,图3所示的计算设备300的组件应该被构建为示例性的而非限制性的。
如上所述,本发明的一些软件实现例程位于通用安全过滤器316内。概括地描述本发明的一个实施例,通用安全过滤器316截取由诸如用户应用程序306等应用程序作出的I/O请求。作为响应,通用安全过滤器316执行被设计成防止恶意软件在计算设备30中传播或执行的例程。更具体地,通用安全过滤器316与安全服务应用程序314(下述)通信,使得反病毒软件应用程序分析与请求相关联的文件并确定文件是否包含恶意软件。如果检测到恶意软件,通用安全过滤器315会与I/O系统302通信并防止满足请求。
如图3所示,通用安全过滤器316包括扫描高速缓存318,用于提高本发明分析从I/O系统302截取的I/O请求的速度。例如,如本领域和其他领域的技术人员所公知的,用户应用程序会经常对相同的文件作出相继的I/O请求。在这种情况下,本发明会截取第一I/O请求并使得反病毒软件应用程序308、310和312扫描文件并验证该文件没有被感染恶意软件。在文件没有被感染的情况下,相继的I/O请求不会触发对文件的扫描。相反,扫描高速缓存318对于文件是否被感染恶意软件而跟踪文件的状态,这样使得不执行不必要的扫描。文件被分类为(1)已知恶意软件,(2)已知安全或(3)未知。由于扫描文件是资源密集型过程,因此防止不必要的扫描提高了本发明的速度。如下面将要详细描述的,扫描高速缓存318可以与除了被设计成防止恶意软件的传播和执行的系统之外的其他跟踪文件状态的系统结合使用。例如,一些软件应用程序允许用户“备份”或将数据保存到第二硬件设备。在这种情况下,软件应用程序对于第二硬件设备是否具有文件的最新版本而跟踪计算设备上每个文件的状态。扫描高速缓存318可与这种类型的系统结合使用以便跟踪计算设备上的文件的状态。
通用安全过滤器316包括数据映射模块320,它用于提高反病毒软件应用程序308、310和312能够扫描文件的可靠性和速度。一般而言,当新型的反病毒软件应用程序截取文件打开操作,会打开第二文件句柄以读出文件数据。然而,如本领域和其他领域的技术人员所公知的,会“锁定”文件以防止多个应用程序同时访问文件。反病毒软件应用程序在另一个应用程序“锁定”文件的情况下不能读出数据。此外,在现有技术中,打开新的句柄会防止另一应用程序打开文件,这会造成应用程序故障。然而,数据映射模块320向诸如反病毒软件应用程序308、310和312等应用程序提供了对文件数据的访问而无需创建第二文件句柄。然而,数据映射模块320向应用程序提供了对低层对象的访问,文件数据可以从该低层对象读出。无论是否有另一个应用程序“锁定”了文件,都可以访问低层对象。同样,创建第二文件句柄需要相当多的计算资源。因此,允许反病毒软件应用程序使用低层对象来读出文件数据提高了反病毒软件应用程序能够执行扫描以发现恶意软件的速度。如下文将详细描述的,数据映射模块320可与读出文件数据的其他系统结合使用。例如,一些软件应用程序在文件被存储在硬件设备上之前加密文件,并且在从硬件设备恢复时解密文件。在这种情况下,数据映射模块320可用于提供加密应用程序以访问文件中的数据的有效方法。
如图3所示,计算设备300包括安全服务应用程序314,其中该安全服务应用程序314用作到安装在计算设备300上的反病毒软件应用程序的接口。安全服务应用程序314允许反病毒软件应用程序注册和创建扫描概况。扫描概况标识出反病毒应用程序发现“感兴趣的”I/O请求。例如,扫描概况会指示当I/O请求是针对关于被恶意软件感染处于“未知”状态的文件时,反病毒软件应用程序会执行扫描。或者,会将扫描概况这样定义,使得当生成某些类型的I/O请求时,反病毒软件应用程序执行扫描。在任一情况下,反病毒软件应用程序向安全服务应用程序314注册并创建定义执行扫描的环境的概况。安全服务应用程序314负责在不同的经注册的反病毒软件应用程序之间的调度扫描。
本发明的实现不限于图3所示的示例性计算设备。例如,图3和所附文本描述了在用户模式中执行的反病毒软件应用程序308、310和312。然而,本发明的软件实现例程可以被配置成与在内核模式中执行的反病毒软件过滤器通信。同样,示出了计算设备300从用户应用程序306接收I/O请求。然而,如本领域和其他领域的技术人员所公知的,可从其他源接收I/O请求,诸如用于远程计算设备之间通信的协议。此外,I/O设备304被示为作为计算设备300的组件的硬件设备。然而I/O设备304可以是通过网络连接连接到计算设备300的远程硬件设备。或者,I/O请求可以不是针对硬件设备的。而是,I/O请求可针对能够使用创建文件命令访问的对象,所述创建文件命令包含但不限于管道、通信资源、磁盘设备、控制台、邮件插槽(mail slot)等等。因此,图3所示的计算设备300的组件应该被构建为示例性的而非限制性的。
图4是被设计成聚集多个反病毒软件应用程序的知识库的一个示例性方法400的流程图。概括而言,方法400通过通用信息模型使得反病毒软件应用程序接触I/O请求。当生成I/O请求时,方法400确定是否需要由安装在计算设备上的一个或多个反病毒软件应用程序扫描。当需要扫描时,方法400标识出对所生成类型的I/O请求感兴趣的反病毒软件应用程序。一个或多个反病毒软件应用程序会通过通用信息模型执行扫描以便确定恶意软件是否与I/O请求相关联。继续参考图1-3和所附的描述,现在将描述图4中所示的聚集多个反病毒软件应用程序的知识库的示例性方法400。
在判决框402处,方法400保持空闲并等待一般由诸如I/O系统302(图3)等操作系统的内核模式组件接收到的I/O请求。如本领域的技术人员所理解的,会通过多种不同的机制生成I/O请求。例如,文字处理程序的用户会从下拉菜单或其他基于图形的输入系统发出“打开文件”命令。为了满足“打开文件”命令,文字处理程序会发出要求从存储设备获取文件数据的API调用。作为另一例子,Web浏览器程序的用户会发出从远程计算机下载文件的命令。为了满足该命令,Web浏览器程序会发出将数据流存储在诸如I/O设备304(图3)等硬件设备的API调用。当生成I/O请求时,I/O系统302与硬件设备交互以满足请求。然而,方法400在I/O系统302满足I/O请求之前截取I/O请求,以防止对恶意软件的执行和/或传播。
在判决框404处,方法400确定在框402处接收到的I/O请求是否是创建新文件的命令。可在框402处截取的一种类型的I/O请求会创建新文件。这种类型的请求不能使计算设备受到恶意软件的影响。如以下在框422处所述,对创建新文件命令的请求的处理不同于方法400接收到的其他I/O请求。创建新文件的请求会使用多个可以从新型操作系统获取的不同命令中的一个生成。例如,在Windows操作系统的环境下,会使用被特别设计成创建新文件的API来创建新文件,诸如“CreateFile”API。或者,在某些情况下会使用诸如打开、覆盖和代替API等其他API来创建新文件。如果在框404处接收到的请求是创建新文件的命令,那么方法400前进到下述的框422。或者,如果请求不是创建新文件的命令,那么方法400前进到框406。
在判决框406,方法400确定在框402处截取的I/O请求是否可能使得计算设备受到恶意软件的影响。如本领域和其他领域的技术人员所公知的,某些I/O请求不具有使得计算设备受到恶意软件的影响的可能性。例如,如果I/O请求是“打开文件”命令且特定文件不包含任何数据,那么满足该命令不会使得计算设备受到恶意软件的影响。类似地,在框402处接收到的I/O请求可以是打开或关闭目录的命令。在这种情况下,I/O请求不会将计算设备受到恶意软件的影响。本领域和其他领域的技术人员会理解,其他类型的I/O请求不具有使得计算设备受到恶意软件的影响的可能性。因此,上述例子应该被构建为示例性的而非限制性的。如果在框402处接收到的请求不具有使得计算设备受到恶意软件的影响的可能性,那么方法400前进到下述的框426。或者,如果在框402处接收到的请求不具有使得计算设备受到恶意软件的影响的可能性,那么方法400前进到框408。
在框408处,方法400查询数据库,诸如扫描高速缓存318,并且标识出作为框402处接收到的I/O请求的对象的文件状态。如下面将详细描述的,当一个或多个反病毒软件应用程序扫描文件以查找恶意软件时,一变量与文件相关联。该变量表示三个可能的状态之一:包括(1)已知恶意软件,(2)已知好的或(3)未知。
为了说明起见且仅举例而言,图5示出了示例性扫描高速缓存318的内容。如所示的,扫描高速缓存318由三个列组成,每个包括多个条目。这些列被标识为文件索引502、第一比特504和第二比特506。文件索引502字段包含用于唯一地标识文件的值。如本领域和其他领域的技术人员所公知的,存储设备一般被分为成为卷的逻辑单元。每个卷具有一中央位置,有关卷上文件的信息被存储在所述的中央位置中。例如,WindowsNT文件系统(“NTFS”)维护主文件表(“MFT”),该MFT对卷上的每个文件包含一记录。当创建文件时,文件的记录存储在MFT中,并且分配预定量的空间以存储文件属性。例如,向每个文件分配唯一的文件索引以表示MFT中的文件位置。如下文将详细描述的,当一个或多个反病毒软件应用程序依照本发明扫描文件时,MFT中与文件相关联的索引值被输入到索引高速缓存318的文件索引502字段中。第一比特504和第二比特506字段各自存储一值,共同地标识文件的状态。例如,第一比特504和第二比特506字段都含有为“0”或“1”的值。在本发明的一个实施例中,如果第一比特504字段包含“1”而第二比特506字段包含“0”,那么文件的状态是“已知恶意软件”。或者,如果第一比特504字段包含“0”而第二比特506字段包含“1”,那么文件的状态是“已知好的”。同样,如果第一比特504字段包含“0”而第二比特506字段包含“0”,那么文件的状态是“未知”。虽然图5示出了具有特定属性的扫描高速缓存318,但本领域的技术人员会理解,扫描高速缓存318可以带有多于或少于所有所列属性操作。
跟踪文件状态的常规技术与扫描高速缓存318相比是易于出错且资源密集型的。例如,跟踪文件是否感染恶意软件的一种公知技术使用散列表。当截取I/O请求时,会使用基于字符串的文件名作为散列关键字来搜索散列表。然而,文件名称不总是唯一地标识文件。例如,当用户创建“链接”以引用文件时,文件会与一个或多个文件名相关联。在这种情况下,散列表对同一文件会包含多个条目。结果是,当文件被两个或多个文件名引用时,反病毒软件应用程序会执行不必要的扫描。如上所述,扫描高速缓存318使用从MFT获取的唯一文件索引来标识文件以防止发生重复的扫描。同样,与从位图查询比特相比计算散列关键字或搜索基于字符串的文件名是资源密集型的。例如,散列表一般消耗足够的存储空间,使得散列表中的条目最终被删除以容纳新的文件。然而,扫描高速缓存318中的条目需要十分少量的存储空间,使得无需删除条目来容纳新的条目。
如上所述,扫描高速缓存318会与其他系统结合使用以跟踪一个或多个文件的状态。仅举例而言,扫描高速缓存318可以与以下应用程序结合来实现:(1)“备份”应用程序,用于对于文件在第二硬件设备上的存储而跟踪文件的状态,(2)加密/解密应用程序,用于跟踪文件是否被加密,(3)以及内容过滤应用程序,用于跟踪文件是否包含不适当的内容。如本领域和其他领域的技术人员所公知的,用于存储附加数据的比特会被加到扫描高速缓存318中,以便容纳这些类型的系统的需求。
返回到图4,在判决框410处,方法400确定与文件相关联的状态是否是“已知好的”或没有感染恶意软件。在本发明的示例性实施例中,对于文件是否为“已知好的”的确定是通过分析包含在数据库中的数据作出的,该数据诸如包含在扫描高速缓存318中的比特信息。由于可使用本领域一般公知的技术来查询数据库和分析与文件索引相关联的信息,这里不提供本领域所使用的技术的描述。如果文件被标识为“已知好的”,方法400前进到下述的框426。或者,如果文件与不同于“已知好的”的状态相关联,那么方法400前进到框412。
在判决框412处,方法400确定与文件相关联的状态是否为“已知恶意软件”。类似于文件被标识为“已知好的”的情况,文件是否为“已知恶意软件”的确定是通过分析包含数据库中的数据,诸如包含在扫描高速缓存318中的比特信息来作出的。如果文件状态被标识为“已知恶意软件”,方法400前进到下述的框428。或者,如果文件与未知状态相关联,方法400前进到框414。
在框414处,方法400向在用户模式中执行的反病毒软件应用程序提供对文件数据的访问。如果到达了框414,那么与文件相关联的状态是“未知”,且方法400会使得一个或多个反病毒软件应用程序扫描作为在框402处截取的I/O请求的对象的文件。本发明向反病毒软件应用程序提供了访问文件数据的有效方法,使得可以快速地执行对恶意软件的扫描。以下参考图6描述向反病毒软件应用程序提供对文件数据的访问的方法的一个实施例。
在框416处,方法400选择将对文件执行扫描的反病毒软件应用程序,该文件是在框402处截取的I/O请求的对象。如先前参考图3所述,本发明的各方面允许反病毒软件应用程序注册和创建扫描概况。扫描概况定义反病毒软件应用程序“感兴趣”的I/O请求。方法400检查安装在计算设备上的反病毒软件应用程序的扫描概况,从而选择对所截取的I/O请求“感兴趣”的反病毒软件应用程序。
在框418处,方法400使得所选的反病毒软件应用程序扫描数据并确定作为在框402处接收到的I/O请求的对象的文件否是被感染了恶意软件。如上所述,当确定是否存在感染时,反病毒软件应用程序一般将数据模式与恶意软件“签名”进行匹配。然而,反病毒软件应用程序越来越多地使用主动的恶意软件检测技术。例如,一些反病毒应用程序通过使得数据在虚拟操作环境内“执行”来模拟程序动作。如果检测到在虚拟操作环境中误用/滥用资源,那么反病毒软件应用程序确定文件感染了恶意软件。在任何情况下,在框418处,所选反病毒软件应用程序获取文件数据并执行动作以确定文件数据是否感染了恶意软件。如以下将参考图6详细描述的,会使用对经注册的反病毒软件应用程序可用的通用信息模型来获取文件数据。
除了确定是否存在恶意软件感染外,反病毒软件应用程序会在框418处执行纠正动作。如本领域和其他领域的技术人员所公知的,新型的反病毒软件应用程序会能够删除被标识为恶意软件的数据或纠正恶意软件感染。在框418处删除恶意软件的情况下,接着会允许所选的反病毒软件应用程序采取纠正措施。因为每次时间只能选择一种反病毒软件应用程序,所以在框418处所采取的任何纠正动作是在存在数据冲突的可能性的情况下执行的。换而言之,方法400调度由反病毒软件应用程序采取的纠正措施相继发生,这意味着数据视图对于其他反病毒软件应用程序是一致的。
在判决框420处,方法400确定是否会选择任何其他的反病毒软件应用程序。如先前所述,方法400可用于聚集多个反病毒软件应用程序的知识库以便检测恶意软件的存在。如果将不选择其他反病毒软件应用程序,那么方法400前进到下述的框422。相反,如果将选择其他反病毒软件应用程序,那么方法400返回到框416并在框416到420之间反复直至所有对在框402处截取的I/O请求“感兴趣”的反病毒软件应用程序能够执行扫描。
在框422处,文件的状态存储在诸如扫描高速缓存318等数据库中。如上所述,在某些情况下,方法400会使得反病毒软件应用程序扫描文件并确定文件是否受到感染。在本发明的一个示例性实施例中,如果一个或多个反病毒软件应用程序检测到恶意软件的存在并不能纠正感染,那么文件在扫描高速缓存318中被标记为“已知恶意软件”。在这个实施例中,如果反病毒软件应用程序毒没有检测到恶意软件的存在,那么文件在扫描高速缓存318中被标记为“已知好的”。本领域和其他领域的技术人员会理解,存在用于确定文件是否感染恶意软件的其他可能的实施例。例如,在文件在扫描高速缓存318中被标识为“已知恶意软件”时,方法400会要求安装在计算设备上的大部分反病毒软件应用程序检测恶意软件。更一般地,方法400会被实现成为由反病毒软件应用程序生成的结果组计算加权值的系统。在这种情况下,加权值超过了阈值,那么文件在扫描高速缓存318中被标记为“已知恶意软件”。因为基于从应用程序接收到的输入计算加权值的系统一般在本领域是公知的,这里不提供对这些系统的进一步描述。
如上所述在框404处,在框402处截取的I/O请求可以是创建新文件的命令。在这种情况下,可以满足命令而不会使计算设备受到恶意软件的影响。在框422处,作为命令主题的文件状态在扫描高速缓存318中被标识为“已知好的”。如上所述在框408处,在本发明的一个实施例中,从MFT获取唯一的文件索引值,并用于在扫描高速缓存318中标识文件。然而,当从计算设备删除文件时,MFT会将与所删除的文件相关联的文件索引值重新分配给新的文件。当文件被删除时,本发明不会改变记录在扫描高速缓存318中的文件状态。而是,当接收到创建新文件的命令时,本方法简单地用作为命令对象的文件的状态覆盖已删除文件的状态。
如上所述,方法400使得文件的状态存储在诸如扫描高速缓存318等数据库中。在某些情况下,会在框422处执行其他管理程序以使得扫描高速缓存318能够适应文件系统中的增长。例如,在本发明的一个实施例中,当I/O请求针对没有在扫描高速缓存318中维护条目的先前未标识的文件,就创建较大的扫描高速缓存。较小的扫描高速缓存318的内容与先前未标识的文件的状态一起被复制到较大扫描高速缓存。这个实施例的优化使得分配给扫描高速缓存318的存储器为仍然是I/O请求的对象的其他文件按照高于容纳先前未标识的文件所需的最小值预定百分比增长。
在判决框424处,方法400确定与文件相关联的状态是否是“已知恶意软件”。当截取创建新文件的命令或一个或多个反病毒软件应用程序扫描具有“未知”状态的文件时,方法400到达框424处。在任一情况下,与文件相关联的状态存储在诸如扫描高速缓存318等数据库中。因此,在框424处确定文件是否感染恶意软件是通过调用先前存储的数据作出的。如果文件状态被标识为恶意软件,那么方法400前进到下述的框428。或者,如果文件没有被标识为恶意软件,那么方法400前进到框426。
在框426处,方法400将程序执行返回到诸如I/O系统302(图3)等操作系统组件。如上所述,方法400在满足I/O请求之前截取I/O请求,以防止执行和/或传播恶意软件。如果到达框426,那么在框402处截取的I/O请求或者不能用恶意软件感染计算设备,或者涉及由在安装在计算设备上的反病毒软件应用程序扫描和标识为非恶意软件。在任一情况下,满足I/O请求不会导致执行和/或传播恶意软件。因此,在程序执行返回到I/O系统302后,依照现有技术满足I/O请求。接着,方法400前进到框430,并在该处结束。
在框428,方法400将程序执行返回到诸如I/O系统302等操作系统组件。然而,如果到达框428,在框402处截取的I/O请求会导致执行和/或传播恶意软件。因此在程序执行返回到I/O系统302之后,I/O请求失败并将恶意软件感染通知计算机用户。接着方法400前进到框430,并在该处结束。
本发明的实现不限于图4中所示的示例性方法400。例如,方法400被图解为具有分立的开始和结束。然而,在本发明的实际实施例中,I/O请求在连续过程中被截取。当存在足够的信息以认为I/O请求会导致执行和/或传播恶意软件时,方法400会接着使得I/O请求失败。同样,本发明不限于以上提供的例子。例如,方法400主要在扫描文件数据的环境中描述。然而,本领域的技术人员会理解,方法400可用于扫描其他数据单元而不背离本发明的范围。
图6是可以与以上参考图4所描述的方法400结合使用以便以高度优化的方式向反病毒软件应用程序提供对文件数据的访问的一个示例性访问方法600的流程图。概括而言,方法600包括创建一个或多个反病毒软件应用程序用以执行扫描的部分对象。接着向与反病毒软件应用程序交互的用户模式应用程序提供访问部分对象所需的信息。最后,创建部分对象的视图,以允许一个或多个反病毒软件应用程序执行基本的文件系统操作。继续参考图1-5和所附描述,现在将描述图6中所示的示例性访问方法600。
在判决框602处,访问方法600保持空闲直至接收到扫描请求。如上所述,安全服务应用程序314(图3)用作到安装在计算设备300上的反病毒软件应用程序的接口。反病毒软件应用程序会创建定义反病毒软件应用程序执行扫描的环境的扫描概况。在框602处,安全服务应用程序314(图3)从反病毒软件应用程序接收扫描请求。因为可以使用本领域中一般公知的技术来实现两种用户模式应用程序之间请求的通信,因此这里将不提供这些技术的进一步描述。
在框604处,创建一个或多个反病毒软件应用程序将扫描的文件的部分对象。如本领域和其他领域的技术人员所公知的,部分对象允许内核和用户模式应用程序共享数据。在本发明的一个示例性实施例中,安全服务应用程序314向通用安全过滤器316作出请求,以创建将被扫描的文件的部分对象。如图2所示,在创建文件映射部分对象之前,操作系统104从用户模式转移到内核模式。更具体地,在用户模式中执行的安全服务应用程序314向在内核模式中执行的通用安全过滤器316作出请求之后,操作系统104从用户模式转移到内核模式。当完成到内核模式的转移时,通用安全过滤器316通过标识要扫描的文件和调用创建文件映射部分对象的函数来响应请求。
在框606处,访问要扫描的文件所需的信息对用户模式应用程序可用。更具体地,在框604处创建的文件映射部分对象由通用安全过滤器316插入到安全服务应用程序314的对象表中。如本领域和其他领域的技术人员所公知的,新型的操作系统一般在预定域内执行程序。例如,在一些操作系统中,程序只能访问对称为对象表的程序唯一的数据结构中引用的对象。通过将在框604处创建的部分对象插入到域安全服务应用程序314相关联的对象表中,在框604处创建的部分对象对安全服务应用程序314可用。如图2所示,在将文件映射部分对象插入到安全服务应用程序314的对象表中后,操作系统105从内核模式转移到用户模式。
在判决框608处,访问方法600保持空闲并等待反病毒软件应用程序请求文件数据。如上所述,当I/O操作被截取时,一个或多个反病毒软件应用程序会与通用信息模型交互以调度扫描。为了完成扫描,反病毒软件应用程序会需要执行基本文件系统操作。例如,一般地,反病毒软件应用程序会“读出”文件数据并将数据与已知恶意软件签名进行比较。依照本发明,反病毒软件应用程序能够使用对向安全服务应用程序314注册的应用程序可用的通用信息模型来执行基本文件系统操作。在本发明的一个实施例中,通用信息模型对以API组形式注册的应用程序可用。在任一情况下,在判决框608处,访问方法600保持空闲并等待反病毒软件请求文件数据。
在判决框610处,访问方法600确定要扫描的文件的视图是否需要映射到安全服务应用程序314的存储空间中。为了完成对安全服务应用程序314的虚拟地址空间的有效使用,尤其对于唯一文件可能同时发生的多次扫描,文件的“视图”会被映射到应用程序的存储空间中,以便允许应用程序访问部分的文件数据。因为所有的文件数据不能同时被载入到应用程序的存储器空间中,所以当请求当前视图没有的数据时映射新的视图。如果不能从安全服务应用程序314的存储空间中映射的视图获取在框608处请求的数据,那么访问方法600方法确定需要映射新的视图并前进到框612。相反,如果可以从映射到安全服务应用程序314的存储空间中的视图获取在框608处请求的数据,那么访问方法600前进到下述的框614处。
在框612处,映射在框604处创建的部分对象的视图,允许诸如安全服务应用程序314等用户模式应用程序满足对文件数据的请求。安全服务应用程序314获取由通用安全过滤器316提供的数据,该通用安全过滤器316标识将扫描的文件。如果在安全服务应用程序314的存储空间中已经映射了视图,那么访问方法600向操作系统104作出API调用以删除当前的视图。接着,安全服务应用程序314向操作系统104作出另一API调用以映射新的视图。在响应中,操作系统104为可以从中访问所请求数据的文件映射视图。在Windows操作系统的环境中,会使用“MapViewOfFile()”和“UPMapViewOfFile()”API将文件映射入和出应用程序的存储空间。然而,这里所提供的例子应该被构建为示例性的而非限制性的。
在框614处,当发生请求时,在框608处请求的数据被传送到反病毒软件应用程序。当所需的视图被映射(在框612处)到安全服务应用程序314的存储空间中时,系统能够使用本领域中一般公知的方法将数据发送到做出请求的反病毒软件应用程序。
在判决框616处,访问方法600确定生成在框602处接收到的扫描请求的反病毒软件应用程序是否完成了访问文件数据。如上所述,安全服务应用程序314通过将一组基本的文件系统操作提供给安装在计算设备上的反病毒软件应用程序用作接口。当反病毒软件应用程序完成扫描文件时,应用程序通知安全服务应用程序314扫描已完成,且访问方法600前进到框618,并在此处结束。相反,如果反病毒软件应用程序没有完成扫描文件并继续访问文件数据,那么访问方法600返回到框608到616,直至反病毒软件应用程序完成扫描文件。
访问方法600会与其他系统结合使用,以为执行基本文件系统操作提供非常快速的方式。仅通过示例,访问方法600可以与以下应用程序结合实现:(1)加密/解密应用程序,用于读出文件和写入文件,以及(2)内容过滤应用程序,用于读出文件数据并确定文件数据是否含有不适当的资料。然而,由于访问方法600可以由任何类型的应用程序使用以执行基本文件系统操作,因此这里所提供的例子应该被构建为说明性的而非限制性的。
虽然示出和描述了本发明的优选实施例,应该理解,可以对它们作出各种修改非不背离本发明的精神和范围。