Windows应用程序虚拟化的实现方法

文档序号:6440237阅读:1422来源:国知局
专利名称:Windows应用程序虚拟化的实现方法
技术领域
本发明涉及虚拟化技术,尤其涉及一种Windows应用程序虚拟化的实现方法。
背景技术
瘦客户端技术是将应用程序运行在后端服务器上,并通过网络将其显示信息输出到远端客户机上,同时接受远端客户机发送的输入请求,从而达到资源集中管理、维护成本降低、服务质量提高等目标。随着云计算的发展,软件即服务(Software as a Service)允许用户通过远程客户端访问操作运行在服务器上的应用程序。从中可发现,人们更关注应用程序提供的服务,而不是该应用程序运行在什么操作系统上、该应用程序在哪里运行、操作系统如何支持其运行等。应用程序虚拟化技术是将应用程序从底层操作系统中隔离出来,并且与其他应用程序隔离开来,从而降低应用程序与操作系统之间的耦合度,降低应用程序之间的干扰的技术。通过应用程序虚拟化技术,可以在同一操作系统中独立地运行多个应用程序。目前,为应用程序建立虚拟执行环境的方法主要包括以下几种(1)采用虚拟机技术为应用程序建立虚拟执行环境虚拟机技术是在软、硬件之间引入虚拟层,可以为应用程序提供独立的运行环境, 屏蔽硬件平台的动态性、分布性和异构性,支持硬件资源的共享和复用,并为每个用户提供属于个人独立、隔离的计算环境,同时,为管理员提供硬件资源和软件资源的集中管理。虚拟机技术使得在同一台计算机资源上可以同时运行多个操作系统。多个用户可通过网络登录到相应操作系统中,运行独立的应用程序。从而,虚拟机为应用程序的运行提供了相互隔离的运行环境。(2)通过文件系统隔离技术为应用程序建立虚拟执行环境杰路(Jails)通过在原操作系统中划分出执行环境Jail,为程序运行提供了 Unix 系统的“根”目录模式,限制应用程序仅可访问Jail里的资源。每一个Jail被绑定一个IP 地址。Jail中的进程无法与Jail外的进程通信交互。该系统在FreeBSD的内核中实现原型,可视为一个轻量级虚拟机。安全运行环境(SEE)采用直接隔离(One-Way Isolation)机制实现了一个安全的执行环境。SEE通过实现一个隔离文件系统,使得执行环境中运行的应用程序对文件系统的操作限制在隔离出的文件系统中。在SEE中运行的应用程序可以读取操作系统中的资源, 但任何修改操作限制在SEE内。SEE通过维护一张修改文件映射表,方便用户查看在SEE中所做的修改。SEE可对在其内所做的修改进行回滚、提交操作。SEE系统在Linux系统中实现。同样,康施(Consh)提供远程资源和本地资源的透明访问,为网络计算处理建立了一个受限的执行环境,其实现在Linux系统的用户层中。另一种执行环境阿尔卡 (Alcatraz)是通过截获应用程序修改文件的操作、重定向文件的位置和为程序维护文件修改视图,使得程序对系统的修改控制在一个缓存目录中,将不可信程序执行后的效果与原系统隔离,其实现在Linux系统上,在虚拟文件系统VFS (Virtual File System)层截获文件操作。先进部署系统PDS Progressive Deployment System)是一个为方便应用程序的部署而设计的虚拟执行环境,通过截获应用程序运行过程中有关文件操作和注册表操作的系统调用来实现应用程序运行过程中的软件资源的按需下载。(3)通过配置文件的方式为应用程序建立虚拟执行环境守护神(Janus)通过监视和限制辅助程序的系统调用,将辅助程序运行在一个相对安全的执行环境中。其是依照下列假设,即如果适当地限制一个应用程序对底层操作系统资源的访问,那么这个应用程序对系统的危害会很小。由于各个应用程序需求不同,设计一个适用于通常所用应用程序的限制机制是一件挑战的事。可配置盒箱MAPBox不仅提供了 Janus等所具有的隔离功能,并且是可配置的。MAPBox通过应用程序的功能以及为完成该功能所需要的资源将应用程序归类,然后根据应用程序的类别属性来构建初始化相应类别的沙箱。这有点类似多用途电子邮件扩展类型(MIME-types),用来标记数据文件的格式。其实现在Linux系统上。系统调用跟踪(Systrace)通过分析应用程序运行过程中访问的系统调用产生相应的系统调用策略,并根据该策略限制应用程序的运行。Systrace中的应用程序不需要运行在特权态,并且可根据策略自动提升权限。Systrace将策略的产生分为两个阶段,即训练阶段和用户使用阶段。在训练阶段,记录程序运行过程中的系统调用信息。程序执行完后, 运用工具分析该记录信息,自动产生系统调用策略。在用户使用阶段,针对不确定的策略, 与用户交互,根据用户的选择确定相应的系统调用策略。其实现在Linux系统上。(4)通过应用程序隔离技术建立虚拟执行环境豆-豆荚(Pea-Pod)提供一种不可信遗留程序的隔离和迁移机制。Pea中的特权程序被限制在小部分系统资源中运行,从而可预防特权程序的入侵。Pod将一组程序和用户隔离在一个虚拟环境中。Pod提供一种从检查点重启机制,方便程序的迁移。Pod隔离那些通过文件系统或互联网进行通信的应用程序组件。Pea隔离那些通过进程间通信机制进行交互的应用组件。其实现在Linux系统上。羽量虚拟机FVM(Feather-weight Virtual Machine)提供了这样一种机制,即实际又隔离。FVM是为Windows程序构造的一个操作系统级的轻量级虚拟机。FVM是通过命名空间虚拟化和COWkopy-onirite)模式实现了虚拟机间的资源的相互隔离并能充分共享操作系统资源。其可以实现通信的隔离。FVM主要包括以下部分文件虚拟化、注册表虚拟化、系统对象虚拟化、网络接口虚拟化、进程间通信限制和后台服务虚拟化。FVM实现在 Windows系统的内核层,其虚拟化操作将会影响该操作系统中运行的所有应用程序,对系统影响较大。由上述分析可知,为应用程序建立虚拟执行环境是软件即服务架构中的关键,即从操作系统中隔离出执行环境,并实现执行环境之间的隔离。目前,虚拟执行环境的实现方法中存在如下缺陷上述几种虚拟执行环境的实现方法要求首先将应用程序安装在原操作系统中,并且应用程序的配置信息和运行文件存放在操作系统中,使得应用程序与操作系统的耦合度较高,不便于按需加载应用程序和保存用户在使用应用程序过程中产生的个性化定制数据和私有文件数据。

发明内容
本发明提供一种Windows应用程序虚拟化的实现方法,用以降低应用程序与操作系统的耦合度。本发明提供一种Windows应用程序虚拟化的实现方法,包括根据配置文件,截获应用程序在运行过程中调用的与系统注册表有关的第一系统调用,使用在所述应用程序执行时注入的动态链接库中的系统调用,重写所截获的第一系统调用,并使用重写后的系统调用将私有注册表和系统注册表进行融合,形成虚拟注册表, 以使所述应用程序根据所述虚拟注册表对所述私有注册表和所述系统注册表进行访问;根据所述配置文件,截获所述应用程序在运行过程中调用的与文件操作有关的第二系统调用,根据所截获的第二系统调用中的路径参数,获取文件所属的空间,并根据所述配置文件中存储的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作所述文件的操作类型相适应的路径信息,然后,根据所述路径信息对所述文件进行操作。本发明提供的Windows应用程序虚拟化的实现方法,通过构建虚拟注册表,将应用程序运行过程中所依赖的配置信息存放在私有注册表中,与操作系统的系统注册表独立开;通过对文件操作进行虚拟化,建立独立于系统空间的用户空间、软件空间,从而将用户在使用应用程序过程中产生的个性化定制数据和私有数据保存在独立于系统空间的空间中,同时整合应用程序对用户资源、软件资源和系统资源的访问,达到了降低应用程序与操作系统的耦合度的目的。


图1为本发明一实施例提供的Windows应用程序虚拟化的实现方法的流程图;图2A为本实施例的虚拟注册表的功能架构图;图2B为本发明一实施例提供的文件访问虚拟化实现过程的流程图;图2C为本发明一实施例提供的双向链表的结构示意图;图3为本发明另一实施例提供的Windows应用程序虚拟化的实现方法的流程图。
具体实施例方式图1为本发明一实施例提供的Windows应用程序虚拟化的实现方法的流程图。如图1所示,本实施例的方法包括步骤101、根据配置文件,截获应用程序在运行过程中调用的与系统注册表有关的第一系统调用,使用在所述应用程序执行时注入的动态链接库中的系统调用,重写所截获的第一系统调用,并使用重写后的系统调用将私有注册表和系统注册表进行融合,形成虚拟注册表,以使所述应用程序根据所述虚拟注册表对所述私有注册表和所述系统注册表进行访问。其中,降低应用程序与操作系统的耦合度,也就是将应用程序运行过程中所依赖的配置信息和运行文件存放在独立空间中,并将用户在使用应用程序过程中产生的个性化定制数据和私有文件数据保存在独立空间中,同时整合应用程序对用户资源、软件资源和系统资源的访问。为实现上述目的,本实施例预先建立了私有注册表,用于存储应用程序运行过程中所依赖的配置信息等。基于此,本步骤101采用虚拟注册表的方式,即通过重写系统调用实现将私有注册表和系统注册表进行融合,形成虚拟注册表,以使应用程序在运行过程中能够根据虚拟注册表实现对私有注册表和系统注册表的相应访问。为了实现私有注册表与系统注册表的融合,应用程序在执行时,会向动态链接库 (DLL)中注入一系统调用,该系统调用用于实现对与系统注册表有关的系统调用的重写,以便于将私有注册表与系统注册表进行融合,使得应用程序可以访问私有注册表获取所需配直fe息。在实际实现过程中,首先根据配置文件,截获应用程序在运行过程中调用的与系统注册表有关的系统调用,即第一系统调用。然后,使用在应用程序执行时注入动态链接库中的系统调用重写所截获的第一系统调用,使用重写后的系统调用将私有注册表和系统注册表进行融合,形成虚拟注册表。这样,应用程序在运行过程中就可以根据虚拟注册表对私有注册表和系统注册表进行访问,而不再仅对系统注册表进行访问,从而可以从私有注册表中获取所需配置信息,在一定程度上实现了与操作系统的隔离。其中,所述重写可以是用动态链接库中的系统调用替换第一系统调用,还可以是使用动态链接库中的系统调用对第一系统调用的参数进行修改,使得修改后的第一系统调用能够将系统注册表与私有注册表融合在一起。在本步骤中,所拦截的与系统注册表有关的第一系统调用主要是指对注册表进行读取、创建、修改或删除操作紧密相关的系统调用。其中,每个第一系统调用包括Unicode 版本和ASCII版本。步骤101实现了虚拟注册表。步骤102、根据所述配置文件,截获所述应用程序在运行过程中调用的与文件操作有关的第二系统调用,根据所截获的第二系统调用中的路径参数,获取文件所属的空间,并根据所述配置文件中存储的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作所述文件的操作类型相适应的路径信息,然后,根据所述路径信息对所述文件进行操作。为了实现降低应用程序与操作系统的耦合度的目的,还需要将运行文件、使用应用程序所产生的个性化定制数据和私有文件数据保存在独立空间,并且还要整合应用程序对用户资源、软件资源和系统资源的访问,为了实现该目的,本实施例预先建立独立于系统空间的软件空间和用户空间。其中,软件空间用于存储与软件相关的数据,例如运行文件等。用户空间用于存储与用户有关的数据,例如用户使用应用程序所产生的个性化定制数据、私有文件数据等。其中,系统空间、软件空间和用户空间彼此之间存在路径映射关系,也就是说可以根据其中一个空间找到另外两个空间。其中,系统空间、软件空间和用户空间相互之间的路径映射关系预先存储在配置文件中。在系统空间、软件空间和用户空间共同存在的基础上,通过截获与文件操作相关的系统调用,即第二系统调用,并根据系统调用的路径参数,获取所要操作的文件所属的空间,然后根据预先存储在配置文件中的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作文件的操作类型相适应的路径信息,然后根据返回的路径信息到相应的空间中去对文件进行操作,即执行系统调用。步骤102实现了文件访问虚拟化。
10
虚拟注册表和文件访问虚拟化实现了从操作系统中隔离出应用程序的虚拟执行环境,降低了应用程序与操作系统的耦合度。本实施例通过构建虚拟注册表,将应用程序运行过程中所依赖的配置信息存放在私有注册表中,与操作系统的系统注册表独立开,通过对文件操作进行虚拟化,建立独立于系统空间的用户空间、软件空间,从而将用户在使用应用程序过程中产生的个性化定制数据和私有数据保存在独立于系统空间的空间中,同时整合应用程序对用户资源、软件资源和系统资源的访问,达到了降低应用程序与操作系统的耦合度的目的。下面将详细说明通过重写后的系统调用如何将私有注册表和系统注册表进行融合,形成虚拟注册表,从而使应用程序通过虚拟注册表对私有注册表和系统注册表的访问。图2A为本实施例的虚拟注册表的功能架构图。如图2A所示,该功能架构主要包括私有注册表读写层(VRIOLayer)、私有注册表操作层(VROPLayer)、注册表融合层(Virtual Registry)系统注册表(Original Windows APIs)和私有注册表(Private Registry)。其中,私有注册表读写层(VRIOLayer):维护私有注册表内容。该私有注册表读写层主要包括以下操作接口 创建键(CreateKey)、设置值(SetValue)^iJ 建值(CreateValue)、查询记录(QueryRecord)、删除(Delete)、获取下一个节点 (GetNextNode)、获取下一个键(GetNextKey)、获取版本号(GetVersion)等,这些接口用来辅助私有注册表读写层完成对私有注册表内容的增加、删除、修改和查找等操作。其中GetVersion用来读取私有注册表的版本(Version)号。私有注册表每做一次改变,其 Version号就增1。该Version号被应用程序创建的多个进程所共享,用来在多个进程间维护私有注册表的一致性。私有注册表操作层(VROPLayer):维护内存中的私有注册表。私有注册表操作层主要包括以下操作接口 创建键(CreateKeyExW)、删除键(DeleteKeyW)、删除值 (DeleteValueff)、枚举键(EnumKeyExW)、枚举值(EnumValueW)、打开键(OpenKeyExW)、查询键信息(QueryInfoKeyff)、查询值信息(QueryValueExff)、设定值(SetValueExff)、读取键的安全信息(GetKeykcurity)、设定键的安全信息(ktKeykcurity)、读取版本号 (GetVersion)等,这些操作接口用来辅助私有注册表操作层完成与私有注册表相关的增加、删除、修改、查找的操作。例如,该私有注册表操作层需要将键中数据项值从内存二进制值形式转化为相应的数据存储格式(例如FF,00,FF,00),并传送该数据存储格式的字符串给私有注册表读写层,然后由私有注册表读写层将该数据存储格式的字符串存储到私有注册表中。当从私有注册表中读取相应值时,采用相反的转化,即私有注册表读写层从私有注册表中读取字符串并交给私有注册表操作层,由私有注册表操作层将数据存储格式的字符串转换为内存二进制格式。其中,本实施例的私有注册表操作层以树状结构来管理私有注册表,其中注册表的数据项值存储在注册表键中,并且子键存储在父键中。路径值标识了从根键到目标键最短路径所经过的键。注册表融合层(Virtual Registry)通过虚拟键(HKEY)句柄实现私有注册表与系统注册表的融合。具体的,通过生成虚拟HKEY句柄,并通过向虚拟HKEY句柄中注册事件对象,则该句柄将指向一个修改通知节点。所有的修改通知节点存储在双向链表中。若重写第一系统调用的操作发生,则触发注册的事件对象。生成虚拟键句柄的过程包括截获应用程序打开创建注册表键值的第一系统调用,根据应用程序打开创建注册表键值的第一系统调用中的注册表键的路径值,返回虚拟键句柄;如果路径值存在于系统注册表中,则打开系统注册表键,并将返回的句柄存储在虚拟键句柄中;如果路径值存在于私有注册表中,则打开私有注册表键,并将返回的句柄存储在虚拟键句柄中;如果是创建新注册表键,则在私有注册表中创建新键,并将返回的句柄存储在虚拟键句柄中。对于系统注册表或私有注册表来说,主要包括查询、修改、删除和修改通知等操作。故本实施例以查询、修改、删除和修改通知为例,详细说明重写后的系统调用将私有注册表和系统注册表进行融合,以实现虚拟化的过程。对于查询操作在生成虚拟HKEY句柄后,向虚拟HKEY中注册虚拟注册表查询事件,当与该虚拟注册表查询事件对应的修改通知节点被触发时,就会执行虚拟注册表查询事件。也就是说,当应用程序查询注册表键值时,通过截获应用程序查询注册表键值的第一系统调用,与虚拟注册表查询事件对应的修改通知节点就被触发,然后根据所截获的第一系统调用中HKEY参数,进行虚拟注册表的查询操作。本实施例的虚拟注册表的查询操作包括以下操作根据第一路径值在私有注册表中查询第一键值(实际是一字符串),如果第一键值存在私有注册表中,根据第一键值执行相应操作;如果第一键值不存在私有注册表中, 判断第一路径值是否存在删除列表中;如果第一路径值存在删除列表中,返回键值不存在信息;如果第一路径值不存在删除列表中,说明该键值存在与系统注册表中并且没有被删除,根据第一路径值从系统注册表中查询第一键值。其中,第一键值是指路径值标识的注册表键值;第一路径值虚拟键句柄(HKEY)中存储的路径值。例如第一键值为时HKEY_LOCAL_MACHINE\SOFTWARE时,可以根据第一键值执行查询的操作。删除列表是存储应用程序删除的系统注册表中的键值。通过该删除列表可实现系统注册表中键值不会被修改,可应用程序已无法访问系统注册表中已删除的键值。由上述查询事件的操作流程可见,应用程序优先在私有注册表中进行查询,在私有注册表中不存在时,查询系统注册表,实现了私有注册表与系统注册表的融合,在一定程度上实现了应用程序与操作系统的隔离。对于修改操作在生成虚拟HKEY句柄后,在虚拟HKEY句柄中注册虚拟注册表修改事件,当与该虚拟注册表修改事件对应的修改通知节点被触发时,就会执行虚拟注册表修改事件。也就是说,当应用程序修改注册表键值时,通过截获应用程序修改注册表键值的第一系统调用,与虚拟注册表修改事件对应的修改通知节点就被触发,然后根据所截获的第一系统调用中HKEY参数,进行虚拟注册表的修改操作。本实施例的虚拟注册表的修改操作包括以下操作根据第二路径值在私有注册表中查询第二键值,如果第二键值存在私有注册表中,根据第二键值在私有注册表中执行相应修改操作;如果第二键值不存在私有注册表中,判断第二路径值是否存在于系统注册表中;如果第二路径值存在系统注册表中,根据第二路径值在私有注册表中创建第二键值并执行相应修改操作;如果第二路径值不存在系统注册表,返回键值不存在信息。其中,第二键值是指路径值标识的注册表键值;第二路径值虚拟键句柄(HKEY)中存储的路径值。
由上述查询事件的操作流程可见,应用程序优先在私有注册表中进行查询并修改,在私有注册表中不存在时,查询系统注册表并在私有注册表中创建第二键值,然后在私有注册表中进行修改操作,实现了私有注册表与系统注册表的融合,在一定程度上实现了应用程序与操作系统的隔离。对于删除操作在生成虚拟HKEY句柄后,在虚拟HKEY句柄中注册虚拟注册表删除事件,当与该虚拟注册表删除事件对应的修改通知节点被触发时,就会执行虚拟注册表删除事件。也就是说,当应用程序删除注册表键值时,通过截获应用程序删除注册表键值的第一系统调用,与虚拟注册表删除事件对应的修改通知节点就被触发,然后根据所截获的第一系统调用中HKEY参数,进行虚拟注册表的删除操作。本实施例的虚拟注册表的删除操作包括以下操作根据第三路径值在私有注册表中查询第三键值,如果第三键值存在私有注册表中,根据第三键值在私有注册表中执行相应删除操作,并判断第三路径值是否存在系统注册表中;如果第三键值不存在私有注册表中,直接判断第三路径值是否存在系统注册表中;如果第三路径值存在系统注册表中,在删除列表中记录第三路径值;如果第三路径值不存在系统注册表中,返回键值不存在信息。其中,此处的删除列表与查询操作中的删除列表是同一个。一个虚拟执行环境维护一个删除列表。其中,第三键值是指路径值标识的注册表键值;第三路径值虚拟键句柄(HKEY)中存储的路径值。由上述可见,应用程序优先在私有注册表中执行删除操作,并在执行删除操作后, 将系统注册表中的存在的第三路径值存放到删除列表中,实现私有注册表与系统注册表的删除同步,实现了私有注册表与系统注册表的融合,在一定程度上实现了应用程序与操作系统的隔离。对于修改通知操作在生成虚拟HKEY句柄后,在虚拟HKEY句柄中注册虚拟注册表修改通知事件,当与该虚拟注册表修改通知事件对应的修改通知节点被触发时,就会执行虚拟注册表修改通知事件。也就是说,当应用程序修改通知注册表键值时,通过截获应用程序修改通知注册表键值的第一系统调用,与虚拟注册表修改通知事件对应的修改通知节点就被触发,然后根据所截获的第一系统调用中HKEY参数,进行虚拟注册表的修改通知操作。本实施例的虚拟注册表的修改通知操作包括以下操作从版本号存储空间中获取私有注册表的版本号,如果所获取的私有注册表的版本号与本地存储的版本号相同,根据私有注册表的版本号执行相应注册操作;如果所获取的私有注册表的版本号与本地存储的版本号不相同,重构私有注册表,并保存重构的私有注册表的版本号,并根据重构的私有注册表的版本号执行相应注册操作;在执行所截获的系统调用所对应的注册表操作之后,再次从版本号存储空间中获取私有注册表的版本号,如果私有注册表的版本号发生了改变,根据第四路径值和执行相应注册操作所注册的事件对象,激活注册事件,发出修改通知;如果私有注册表的版本号没有发生改变,则退出该系统调用。其中,本地存储的版本号是指应用程序在运行过程中所产生的当前进程所存储的私有注册表的版本号。其中,版本号存储空间中的私有注册表的版本号可以被应用程序运行过程所产生的各个进程或线程所访问。其中,重构私有注册表是指重新读取私有注册表文件,并在内存中构建索引节点和私有注册表的树状结构。本实施例通过在虚拟HKEY句柄中注册虚拟注册表查询、修改、删除以及修改通知等事件,实现了各种操作情况下系统注册表与私有注册表的融合,充分发挥了私有注册表的作用,在配置信息上实现了应用程序与操作系统的格式。下面详细描述步骤102中文件访问虚拟化的实现过程,如图2B所示,主要包括以下步骤步骤1021、根据配置文件,截获应用程序运行过程中调用的与文件操作有关的第二系统调用。步骤1022、获取所截获的第二系统调用中的路径参数。步骤1023、判断所述路径参数的格式是否为长路径格式;如果判断结果为否,说明该路径参数为短路径格式,则执行步骤IOM ;如果判断结果为是,执行步骤1025。步骤1024、将短路径格式的路径参数转换为长路径格式的路径参数,并执行步骤 1025。步骤1025、根据路径参数的头部信息判断该路径参数是否属于其中一个空间,如果判断结果为是,执行步骤10 ;如果判断结果为否,执行步骤1(^8。步骤1(^6、根据配置文件中存储的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作该文件的操作类型相适应的路径信息,并执行步骤1027。根据文件所属空间的不同,以及对文件操作类型的不同,将会返回不同的路径信息,下面逐一进行说明。本实施例中,所述空间包括系统空间、软件空间和用户空间;所述对文件的操作类型可以是创建、删除、修改或读取。当要操作的文件不存系统空间、软件空间和用户中间中,且对文件进行创建、删除、修改或读取操作时,根据系统空间与用户空间之间的路径映射关系返回文件在用户空间中的路径信息。当要操作的文件存在系统空间中,而不存在软件空间和用户空间中,且对文件进行读取操作时,根据系统空间与软件空间之间的路径映射关系返回文件在软件空间中的路
径信息。当要操作的文件存在系统空间中,而不存在软件空间和用户空间中,且对文件进行创建或修改操作时,根据系统空间与用户空间之间的路径映射关系返回文件在用户空间中的路径信息,并将文件从系统空间复制到用户空间中。当要操作的文件存在系统空间中,而不存在软件空间和用户空间中,且对文件进行删除操作时,根据系统空间与用户空间之间的路径映射关系返回文件在用户空间中的路径信息,并将文件从系统空间复制到用户空间中,并将系统空间的路径值存放到与系统空间对应的删除列表中。其中,通过该删除列表,可实现系统文件不会被修改,可应用程序却无法访问该文件。当要操作的文件存在软件空间中,而不存在用户中间中,且对文件进行读取操作时,返回文件在软件空间中的路径信息。当要操作的文件存在软件空间中,而不存在用户空间中,且对文件进行创建或修改操作时,根据软件空间与用户空间之间的路径映射关系返回文件在用户空间中的路径信息,并将所述文件从所述软件空间复制到所述用户空间中。
14
当要操作的文件存在软件空间中,而不存在用户空间中,且对文件进行删除操作时,根据软件空间与用户空间之间的路径映射关系返回文件在用户空间中的路径信息,并将文件从软件空间复制到用户空间中,并将软件空间的路径值存放到与软件空间对应的删除列表中。当要操作的文件存在用户空间中,且对文件进行创建、删除、修改或读取操作时, 返回文件在用户空间中的路径信息。本实施例还将上述返回路径信息的过程称为文件重定向规则,并得到如表1所示的结果。表 1
系统空间软件空间用户空间操作类型返回的路径(System(Software(User信息space,简 ·己为space,简子己为space,简 ·己为S)P)U)否否否读/写/删除U是否否读S是否否写U是否否删除U否否否读P否是否写U否是否删除U否是/否是读/写/删除U其中,在执行步骤10 之前,本实施例已将存储空间划分为系统空间、软件空间和用户空间,并将系统空间、软件空间和用户空间相互之间的路径映射关系存储到配置文件中。同时,在配置文件中创建了与系统空间和软件空间一一对应的删除列表。步骤1027、根据返回的路径信息对文件进行相应操作。该步骤1027也就是执行系统调用的过程。步骤1028、结束对路径参数修改的操作,依照原路径参数执行对文件的操作,并返回。当判断出路径参数不存在任何空间时,结束对文件的操作。进一步,举例说明本实施例中应用程序如何访问系统中的文件当应用程序调用文件枚举访问函数查找符合条件的第一个文件 (FindFirstFileExff)时,记录参数信息,并构造三个空间的路径信息,返回虚拟FIND文件句柄,并通过该虚拟查找(FIND)文件句柄实现优先访问用户空间中的文件,其次是软件空间中的文件,再次是系统空间中的文件。
当应用程序调用文件枚举访问函数查找下一个符合条件的文件(FindNextFileW) 时,通过虚拟FIND文件句柄,首先返回用户空间中的文件,然后返回存在于软件空间中但不存在于用户空间中也不存在于删除列表中的文件,最后返回存在于系统空间中但不存在于软件空间、用户空间中也不存在于删除列表中的文件。当应用程序调用文件枚举访问函数关闭FIND文件句柄(FindClose)时,关闭虚拟 FIND文件句柄。通过上述操作,实现了应用程序访问文件时的虚拟化,即允许应用程序从软件空间和用户空间中访问文件,实现了与操作系统的隔离。进一步,为了实现对某些系统调用过程中产生的参数或系统调用结束时产生的参数等进行存储,本实施例预先划分出了参数缓存空间,并将存储缓存空间存储在双向链表中,也就是说以双向链表的形式来存储参数。基于此,在执行与操作文件有关的系统调用过程中返回路径信息时,检查存储在双向链表中的参数缓存空间中是否存在空闲参数节点;如果存在空闲参数节点,为返回的路径信息分配参数节点,并将返回的路径信息存储到所分配的参数节点中,并将所述分配的参数节点标识未已被分配;如果不存在空闲参数节点,为返回的路径信息创建参数节点, 并将所创建的参数节点插入双向链表中的参数缓存空间中,同时将返回的路径信息存储到所创建的参数节点中,并将所创建的参数节点标识未已被分配。其中,参数节点就是一小块内存空间。进一步,当应用程序根据返回的路径信息对文件进行相应操作结束后,就会将释放返回的路径信息所占用的参数节点,此时,判断被释放的参数节点是否来自参数缓存空间;如果被释放的参数节点来自参数缓存空间,将被释放的参数节点收回并将收回的参数节点标识未未被使用,以便于其他参数使用该参数节点进行存储。其中,对于应用程序在运行过程中返回的或需要修改的各种参数均可以使用双向链表中的参数缓存空间进行缓存,并不限于对文件操作过程中返回的路径信息,例如后面出现的在对系统对象进行重命名过程中需要修改的参数(例如重命名后的系统对象名) 也可以使用双向链表中的参数缓存空间进行缓存。本实施例提供一种参数节点的实现结构,包括标志位字段用于标识该参数节点是否被使用,例如填充Oxffff表示该节点未被使用;0x0表示该节点正被使用,即已被分配;内存空间用来存储参数的内存空间;内存空间长度字段表示存储参数的内存空间的实际长度。双向链表结构如图2C所示。通过双向链表对参数进行缓存,可以提高所实现的虚拟环境的性能和可用性。图3为本发明另一实施例提供的Windows应用程序虚拟化的实现方法的流程图。 本实施例基于图1所示实施例实现,如图3所示,本实施例的方法在步骤102之后还包括步骤103、根据配置文件,拦截应用程序在运行过程中调用的与系统对象有关的第三系统调用,以所创建的与第三系统调用所调用的系统对象相关的第一个进行的进程号为标识,使用标识对所述系统对象进行重命名操作,根据重命名的系统对象名对系统对象进行操作。在本实施例中,为实现应用程序虚拟化环境中各应用程序之间的隔离,在访问系统对象时,需要对系统对象进行重命名,以虚拟化执行环境间共享的系统对象。其中,对系
16统对象的访问包括打开一个系统对象或者查询系统对象是否存在。基于此,本实施例根据采用本实施例提供的虚拟化环境创建的第一个进程的进程号作为标识,对系统对象进行重命名操作的过程包括当查询一个系统对象是否存在时,首先使用原系统对象名判断该系统对象是否存在;如果不存在,在原系统对象名后追加与该系统对象相关的第一个进程的进程号,以对该系统对象进行重命名,然后根据重命名的系统对象名创建该系统对象。当打开一个系统对象时,首先使用原系统对象名判断是否可以打开该系统对象; 如果系统对象不可以被打开,则在原系统对象名后追加与该系统对象相关的第一个进程的进程号,以对该系统对象进行重命名,然后根据重命名的系统对象名打开该系统对象。步骤104、根据配置文件,拦截应用程序在运行过程中调用的与传递消息有关的第四系统调用,根据与应用程序对应的共享内存空间,对根据第四系统调用创建的进程进行控制操作,所述共享内存空间用于存储与应用程序对应的进程的进程号。为了实现应用程序虚拟化环境中,应用程序之间的隔离,还需要限制虚拟执行环境中进程间的通信。为此,本实施例根据配置文件,拦截应用程序调用的与传递消息有关的系统调用(即第四系统调用),据此获取执行环境中的存在进程。在执行上述任一系统调用时,该系统调用会创建进程,并会为所创建的进程分配进程号,而且该系统调用所产生的进程主要用于传递消息,也就是说需要与其他进程进行通信。为了实现限制进程间通信,本实施例通过为该应用程序创建一共享内存空间,允许属于该应用程序的进程访问该共享内存空间,而不属于该应用程序的进程不能访问该共享内存空间,并且该共享内存空间用于存储该应用程序下的进程的进程号。其中,存在于同一进程中的线程间可以通信,对于同一应用程序的各个进程中的线程间也可以通信;而不同应用程序的进程中的线程不可以通信。其中,通过线程号可以找到该线程所依存的进程,进而根据进程号判断该线程是否属于当前应用程序。具体的,当系统调用创建的进程在启动时,先将该进程的进程号注册到共享内存空间中。当进程请求与一目标进程(即第一目标进程)通信时,检查第一目标进程的进程号是否存在共享内存空间中,如果是,允许该进程与第一目标进程通信,如果否,拒绝该进程与第一目标进程通信。另外,当有目标进程(即第二目标进程)请求与该进程通信时,读取目标进程的进程号,检查目标进程的进程号是否存在共享内存空间中,如果是,允许该进程与目标进程通信,如果否,拒绝该进程与目标进程通信。第一目标进程和第二目标进程都是进程。进一步,当进程退出时,将该进程的进程号从共享内存空间中删除。由此可见,通过上述方式实现了限制进程间通信的目的,提高了应用程序之间的隔离度,使得在同一操作系统中可以同时运行多个应用程序。本实施例在实现应用程序虚拟化的基础上,进一步通过系统对象的虚拟化和对进程间通信的限制,使得应用程序之间实现隔离,允许同一操作系统中同时运行多个应用程序。在上述各实施例中,应用程序在运行过程中会创建多进程、多线程,并且在多进程、多线程间存在共享数据,因此需要维护共享数据的一致性。为了防止多进程或多线程彼此在访问共享数据时产生矛盾,本实施例提供一种实现机制,即为进程和线程分别建立关键域,实现对各进程和各线程之间的隔离。例如为线程或进程建立一关键域,当某一线程或进程对共享数据进行操作时,首先进入该关键域,这样其他线程或进程就无法对该共享数据进行操作,从而保证了各线程或各进程所共享的数据的一致性。基于上述建立关键域的方案,上述步骤103中在原系统对象名后追加与系统对象相关的第一个进程的进程号,以对系统对象进行重命名的操作可通过以下步骤实现首先,进入第一关键域,并在第一关键域中执行后续操作。所述后续操作包括从双向链表中的参数缓存空间中申请空闲参数节点,该空闲参数节点用于存储重命名后的系统对象名;然后,在原系统对象名后追加与系统对象相关的第一个进程的进程号,得到重命名后的系统对象名,并将重命名后的系统对象名存储到所申请的空闲参数节点中。并在修改参数后立即离开第一关键域。通过上述操作,当有多个线程同时访问同一系统对象时,可以防止同时对系统对象名进行重命名造成冲突。基于上述建立关键域的方案,上述步骤101中在虚拟HKEY句柄中所注册的各种与虚拟注册表有关的事件具体可以在关键域中执行。例如对于虚拟注册表查询事件在根据第一路径值在所述私有注册表中查询第一键值之前,可以先执行如下操作进入第二关键域,并从版本号存储空间中读取私有注册表的版本号;将所读取的私有注册表的版本号与本地存储的版本号进行比较,判断是否需要重构私有注册表;如果判断结果为是,则重构私有注册表,然后再执行根据第一路径值在重构的私有注册表中查询第一键值以及其他操作;如果判断结果为否,则直接执行根据第一路径值在原私有注册表中查询第一键值以及其他操作。当虚拟注册表查询事件结束后,离开第二关键域。另外,对于虚拟注册表修改事件或虚拟注册表删除事件在根据第二路径值在所述私有注册表中查询第二键值之前,或者在根据第三路径值在所述私有注册表中查询第三键值之前,也可以先执行如下操作进入第二关键域,并从版本号存储空间中读取私有注册表的版本号;将所读取的私有注册表的版本号与本地存储的版本号进行比较,判断是否需要重构私有注册表;如果判断结果为是,则重构私有注册表,然后再执行根据第二路径值或第三路径值在重构的私有注册表中查询第二键值或第三键值以及其他操作;如果判断结果为否,则直接执行根据第二路径值或第三路径值在原私有注册表中查询第二键值或第三键值以及其他操作。当虚拟注册表修改事件或虚拟注册表删除事件结束后,离开第二关键域。进一步,在进入第二关键域之前包括应用程序的当前进程执行打开版本号存储空间的操作,并判断打开操作是否成功;如果打开操作成功,读取版本号存储空间中的私有注册表的版本号,并将读取的私有注册表的版本号存储在本地;如果打开操作失败,创建版本号存储空间,并初始化私有注册表的版本号,将初始化得到的私有注册表的版本号分别存储到所创建的版本号存储空间和本地。所述本地是指当前进程存在的空间中。通过上述操作,可以实现对当前进程的私有注册表版本号的初始化。基于上述各实施例或实施方式,本实施例给出本发明所实现的面向应用程序的虚拟执行环境的一种系统结构,主要包括1、截获系统调用根据配置文件来截获相应的系统调用,实现可配置地虚拟不同组件。2、虚拟注册表重写与系统注册表操作相关的系统调用,采用写拷贝(Copy-On-Write ;简称为C0W)机制来协助应用程序对系统注册表和私有注册表的访问。3、文件访问虚拟化重写与文件操作相关的系统调用中的路径名参数,并采用COW机制来协助应用程序对用户空间、软件空间和用户空间的访问。4、系统对象虚拟化 重写与系统对象操作相关的系统调用中的对象名,协助应用程序对原系统对象和私有对象的访问。5、限制进程间的通信限制应用程序仅可向其所在的执行环境中的对象发送消息, 实现应用程序的多实例运行。本实施例的面向应用程序的虚拟化执行环境的启动过程如下步骤1、加载程序从配置文件(setting, ini)或命令行中读取配置信息,其中命令行的配置信息优先于配置文件中的配置信息。配置文件主要包含的属性有(1)启动执行文件名(MartExeName)启动Exe文件的相对路径;⑵虚拟注册表(VirtualRegistry)虚拟注册表文件的相对路径;(3) 文件重定向(FileRedirection)文件访问重定向配置文件的相对路径;(4)系统对象 (SystemObject)是否虚拟化系统对象;(5)内部进程(Interprocess)是否限制进程间的
ififn。步骤2、将配置信息写入当前进程的环境变量中,步骤3、创建子进程,启动应用程序的可执行文件,并将挂钩动态链接库 (detoured. dll)和注入动态链接库(ApplicationExeAssistant. dll)注入到子进程中。步骤4、子进程加载其所依赖的ApplicationExeAssistant. dll动态链接库, ApplicationExeAssistant. dll中的动态链接库主函数(DllMain)函数被调用。步骤5、在DllMain中读取环境变量值,并根据环境变量值将修改后的系统调用挂钩在原系统调用中。步骤6、应用程序运行过程中,当调用到被挂钩的系统调用时,会执行修改后的系统调用的相关操作。步骤7、应用程序退出后,加载程序也退出。本发明所实现的面向应用程序的虚拟执行环境具有以下有益效果(1)通过将应用程序运行过程中所依赖的配置信息和运行文件存放在独立空间中,并将用户在使用应用程序过程中产生的个性化定制数据和私有文件数据保存独立空间中,同时整合应用程序对用户资源、软件资源和系统资源的访问,降低了应用程序与操作系统的耦合度。(2)通过虚拟化虚拟执行环境间共享的系统对象,并限制虚拟执行环境间的通信,实现虚拟执行环境之间比较完全的隔离,使得在同一操作系统中可运行同一应用程序的多个实例,提高了应用程序间的隔离度。(3)通过在用户层,实现一个面向应用程序的单用户、单程序的轻量级虚拟执行环境,并采用参数缓存、共享数据一致性维护和优化虚拟注册表等方法提高虚拟执行环境的性能和可用性,提高了资源利用率和执行效率。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范
围。 20
权利要求
1.一种Windows应用程序虚拟化的实现方法,其特征在于,包括根据配置文件,截获应用程序在运行过程中调用的与系统注册表有关的第一系统调用,使用在所述应用程序执行时注入的动态链接库中的系统调用,重写所截获的第一系统调用,并使用重写后的系统调用将私有注册表和系统注册表进行融合,形成虚拟注册表,以使所述应用程序根据所述虚拟注册表对所述私有注册表和所述系统注册表进行访问;根据所述配置文件,截获所述应用程序在运行过程中调用的与文件操作有关的第二系统调用,根据所截获的第二系统调用中的路径参数,获取文件所属的空间,并根据所述配置文件中存储的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作所述文件的操作类型相适应的路径信息,然后,根据所述路径信息对所述文件进行操作。
2.根据权利要求1所述的Windows应用程序虚拟化的实现方法,其特征在于,所述根据配置文件,截获应用程序在运行过程中调用的与系统注册表有关的第一系统调用,使用在所述应用程序执行时注入的动态链接库中的系统调用,重写所截获的第一系统调用,并使用重写后的系统调用将私有注册表和系统注册表进行融合,形成虚拟注册表,以使所述应用程序根据所述虚拟注册表对所述私有注册表和所述系统注册表进行访问包括截获所述应用程序打开创建注册表键值的第一系统调用,根据所述应用程序打开创建注册表键值的第一系统调用中的注册表键的路径值,返回虚拟键句柄;如果所述路径值存在于所述系统注册表中,则打开系统注册表键,并将返回的句柄存储在所述虚拟键句柄中; 如果所述路径值存在于所述私有注册表中,则打开私有注册表键,并将返回的句柄存储在虚拟键句柄中;如果是创建新注册表键,则在所述私有注册表中创建新键,并将返回的句柄存储在虚拟键句柄中;截获所述应用程序查询注册表键值的第一系统调用,并根据所述应用程序查询注册表键值的第一系统调用中虚拟键句柄参数,进行所述虚拟注册表的查询操作;所述虚拟注册表的查询操作包括根据第一路径值在所述私有注册表中查询第一键值,如果所述第一键值存在所述私有注册表中,根据所述第一键值执行相应操作;如果所述第一键值不存在所述私有注册表中,判断所述第一路径值是否存在于删除列表中;如果所述第一路径值存在所述删除列表中,返回键值不存在信息;如果所述第一路径值不存在所述删除列表中,根据所述第一路径值从所述系统注册表中查询所述第一键值;截获所述应用程序修改注册表键值的第一系统调用,并根据所述应用程序修改注册表键值的第一系统调用中虚拟键句柄参数,进行虚拟注册表的修改操作;所述虚拟注册表的修改操作包括根据第二路径值在所述私有注册表中查询第二键值,如果所述第二键值存在所述私有注册表中,根据所述第二键值在所述私有注册表中执行相应修改操作;如果所述第二键值不存在所述私有注册表中,判断第二路径值是否存在于所述系统注册表中;如果所述第二路径值存在所述系统注册表中,根据所述第二路径值在所述私有注册表中创建所述第二键值并执行相应修改操作;如果所述第二路径值不存在所述系统注册表,返回键值不存在信息;截获所述应用程序删除注册表键值的第一系统调用,并根据所述应用程序删除注册表键值的第一系统调用中虚拟键句柄参数,进行虚拟注册表的删除操作;所述虚拟注册表的删除操作包括根据第三路径值在所述私有注册表中查询第三键值,如果所述第三键值存在所述私有注册表中,根据所述第三键值在所述私有注册表中执行相应删除操作,并判断所述第三路径值是否存在所述系统注册表中;如果所述第三键值不存在所述私有注册表中,直接判断所述第三路径值是否存在所述系统注册表中;如果所述第三路径值存在所述系统注册表中,在所述删除列表中记录所述第三路径值;如果所述第三路径值不存在所述系统注册表中,返回键值不存在信息;截获所述应用程序修改通知注册表键值的第一系统调用,并根据所述应用程序修改通知虚拟注册表键值的第一系统调用中虚拟键句柄参数,进行虚拟注册表的修改通知操作; 所述虚拟注册表的修改通知操作包括获取所述私有注册表的版本号,如果所获取的私有注册表的版本号与本地存储的版本号相同,根据所述私有注册表的版本号执行相应注册操作;如果所获取的私有注册表的版本号与本地存储的版本号不相同,重构所述私有注册表, 并保存重构的私有注册表的版本号,并根据重构的私有注册表的版本号执行相应注册操作;在执行相应注册操作之后,再次获取所述私有注册表的版本号,如果所述私有注册表的版本号发生了改变,根据第四路径值和执行相应注册操作所注册的事件对象发出修改事件通知;如果所述私有注册表的版本号没有发生改变,则返回。
3.根据权利要求1所述的Windows应用程序虚拟化的实现方法,其特征在于,所述根据所截获的第二系统调用中的路径参数,获取文件所属的空间,并根据所述配置文件中存储的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作所述文件的操作类型相适应的路径信息,然后,根据所述路径信息对所述文件进行操作包括判断所述路径参数的格式是否为长路径格式;如果所述路径参数的路径格式为短路径格式,将短路径格式的路径参数转换为长路径格式的路径参数;当根据所述路径参数的头部信息判断出所述文件不存在于所述系统空间、所述软件空间和所述用户空间中,且对所述文件进行创建、删除、修改或读取操作时,根据所述系统空间与所述用户空间之间的路径映射关系返回所述文件在所述用户空间中的路径信息;当根据所述路径参数的头部信息判断出所述文件存在所述系统空间中,而不存在所述软件空间和所述用户空间中,且对所述文件进行读取操作时,根据所述系统空间与所述软件空间之间的路径映射关系返回所述文件在所述软件空间中的路径信息;当根据所述路径参数的头部信息判断出所述文件存在所述系统空间中,而不存在所述软件空间和所述用户空间中,且对所述文件进行创建或修改操作时,根据所述系统空间与所述用户空间之间的路径映射关系返回所述文件在所述用户空间中的路径信息,并将所述文件从所述系统空间复制到所述用户空间中;当根据所述路径参数的头部信息判断出所述文件存在所述系统空间中,而不存在所述软件空间和所述用户空间中,且对所述文件进行删除操作时,根据所述系统空间与所述用户空间之间的路径映射关系返回所述文件在所述用户空间中的路径信息,并将所述文件从所述系统空间复制到所述用户空间中,并将所述系统空间的路径值存放到与所述系统空间对应的删除列表中;当根据所述路径参数的头部信息判断出所述文件存在所述软件空间中,而不存在所述用户中间中,且对所述文件进行读取操作时,返回所述文件在所述软件空间中的路径信息;当根据所述路径参数的头部信息判断出所述文件存在所述软件空间中,而不存在所述用户空间中,且对所述文件进行创建或修改操作时,根据所述软件空间与所述用户空间之间的路径映射关系返回所述文件在所述用户空间中的路径信息,并将所述文件从所述软件空间复制到所述用户空间中;当根据所述路径参数的头部信息判断出所述文件存在所述软件空间中,而不存在所述用户空间中,且对所述文件进行删除操作时,根据所述软件空间与所述用户空间之间的路径映射关系返回所述文件在所述用户空间中的路径信息,并将所述文件从软件空间复制到所述用户空间中,并将所述软件空间的路径值存放到与所述软件空间对应的删除列表中;当根据所述路径参数的头部信息判断出所述文件存在所述用户空间中,且对所述文件进行创建、删除、修改或读取操作时,返回所述文件在所述用户空间中的路径信息; 根据返回的路径信息对所述文件进行相应操作。
4.根据权利要求3所述的Windows应用程序虚拟化的实现方法,其特征在于,所述根据所述配置文件,截获所述应用程序在运行过程中调用的与文件操作有关的第二系统调用, 根据所截获的第二系统调用中的路径参数,获取文件所属的空间,并根据所述配置文件中存储的系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作所述文件的操作类型相适应的路径信息,然后,根据所述路径信息对所述文件进行操作之前包括将存储空间划分为所述系统空间、所述软件空间和所述用户空间,并将所述系统空间、 所述软件空间和所述用户空间相互之间的路径映射关系存储到所述配置文件中; 在所述配置文件中创建与所述系统空间和所述软件空间一一对应的删除列表。
5.根据权利要求1-4任一项所述的Windows应用程序虚拟化的实现方法,其特征在于, 还包括根据所述配置文件,拦截所述应用程序在运行过程中调用的与系统对象有关的第三系统调用,以所创建的与所述第三系统调用所调用的系统对象相关的第一个进行的进程号为标识,使用所述标识对所述系统对象进行重命名操作,根据重命名的系统对象名对所述系统对象进行操作;根据配置文件,拦截所述应用程序在运行过程中调用的与传递消息有关的第四系统调用,根据在与所述应用程序对应的共享内存空间中存储的进程号,对所述应用程序运行过程中创建的进程进行限制控制操作,以限制控制所述应用程序创建的进程与其他应用程序创建的进程间的通信。
6.根据权利要求5所述的Windows应用程序虚拟化的实现方法,其特征在于,所述以所创建的与所述第三系统调用所调用的系统对象相关的第一个进程的进程号为标识,使用所述标识对所述系统对象进行重命名操作,根据重命名的系统对象名对所述系统对象进行操作包括使用原系统对象名判断所述系统对象是否存在或者是否可以被打开; 如果所述系统对象不存在或不可以被打开,检查所述原系统对象名中是否存在所述系统对象所属进程的信息;如果判断结果为不存在,则在所述原系统对象名后追加与所述系统对象相关的第一个进程的进程号,以对所述系统对象进行重命名;根据重命名的系统对象名,执行创建或打开所述系统对象的操作。
7.根据权利要求5所述的Windows应用程序虚拟化的实现方法,其特征在于,根据在与所述应用程序对应的共享内存空间中存储的进程号,对所述应用程序运行过程中创建的进程进行限制控制操作,以限制控制所述应用程序创建的进程与其他应用程序创建的进程间的通信包括当所述应用程序运行过程中创建的进程启动时,将所述进程的进程号注册到所述共享内存空间中;当所述进程请求与第一目标进程通信时,检查所述第一目标进程的进程号是否存在所述共享内存空间中,如果是,允许所述进程与所述第一目标进程通信,如果否,拒绝所述进程与所述第一目标进程通信;当所述进程退出时,将所述进程的进程号从所述共享内存空间中删除。
8.根据权利要求3或4所述的Windows应用程序虚拟化的实现方法,其特征在于,还包括在返回路径信息时,检查存储在双向链表中的参数缓存空间中是否存在空闲参数节占. 如果存在空闲参数节点,为所述返回的路径信息分配参数节点,并将所述返回的路径信息存储到所分配的参数节点中,并将所分配的参数节点标识为已被分配;如果不存在空闲参数节点,为所述返回的路径信息创建参数节点,并将所创建的参数节点插入所述双向链表中的参数缓存空间中,同时将所述返回的路径信息存储到所创建的参数节点中,并将所创建的参数节点标识为已被分配;在根据返回的路径信息对所述文件进行相应操作结束时,判断被释放的参数节点是否来自所述参数缓存空间,如果被释放的参数节点来自所述参数缓存空间,将被释放的参数节点收回并将收回的参数节点标识为未被使用。
9.根据权利要求6所述的Windows应用程序虚拟化的实现方法,其特征在于,在所述原系统对象名后追加与所述系统对象相关的第一个进程的进程号,以对所述系统对象进行重命名包括进入第一关键域;从双向链表中的参数缓存空间中申请空闲参数节点;在所述原系统对象名后追加与所述系统对象相关的第一个进程的进程号,得到重命名后的系统对象名;将重命名后的系统对象名存储到所申请的空闲参数节点中; 离开所述第一关键域。
10.根据权利要求2所述的Windows应用程序虚拟化的实现方法,其特征在于,在根据第一路径值在所述私有注册表中查询第一键值之前,或者在根据第二路径值在所述私有注册表中查询第二键值之前,或者在根据第三路径值在所述私有注册表中查询第三键值之前包括进入第二关键域;从版本号存储空间中读取私有注册表的版本号;将所读取的私有注册表的版本号与本地存储的版本号进行比较,判断是否需要重构所述私有注册表;如果判断结果为是,则重构所述私有注册表;当所述虚拟注册表查询事件结束之后,或者当所述虚拟注册表修改事件结束之后,或者当所述虚拟注册表删除事件结束之后,还包括 离开所述第二关键域。
全文摘要
本发明提供一种Windows应用程序虚拟化的实现方法。该方法包括根据配置文件,截获应用程序在运行过程中调用的与系统注册表有关的第一系统调用,重写所截获的第一系统调用,并使用重写后的系统调用将私有注册表和系统注册表进行融合,形成虚拟注册表;根据配置文件,截获应用程序在运行过程中调用的与文件操作有关的第二系统调用,获取文件所属的空间,并根据系统空间、软件空间和用户空间相互之间的路径映射关系,返回与操作所述文件的操作类型相适应的路径信息,然后,根据路径信息对文件进行操作。本发明技术方案降低了应用程序与操作系统的耦合度,降低了运行在同一操作系统中的应用程序间的干扰。
文档编号G06F9/44GK102520944SQ201110402069
公开日2012年6月27日 申请日期2011年12月6日 优先权日2011年12月6日
发明者孙海雷, 康俊彬, 怀进鹏, 沃天宇, 胡春明 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1