首页> 中国专利> 合并的注册表项中的虚拟删除

合并的注册表项中的虚拟删除

摘要

诸如注册表项或值等元素通过为元素创建删除标记来虚拟地删除。两组或多组单独的实际注册表项/值作为一个合并的(虚拟的)注册表来呈现给在竖井中运行的进程。操作系统通过监视由计算机或计算机系统上的竖井中的进程做出的注册表项或值系统请求并过滤掉与删除标记相关联的元素来提供注册表的合并视图。特殊处理响应于检测到特定类型的注册表项或值系统访问请求来调用,这些注册表项或值系统访问请求的类型包括但不限于:枚举、打开、创建、重命名或删除。

著录项

  • 公开/公告号CN101535949A

    专利类型发明专利

  • 公开/公告日2009-09-16

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200780041085.6

  • 申请日2007-10-16

  • 分类号G06F9/06(20060101);G06F9/00(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人顾嘉运

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 22:40:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-27

    专利权的转移 IPC(主分类):G06F9/06 变更前: 变更后: 登记生效日:20150511 申请日:20071016

    专利申请权、专利权的转移

  • 2012-06-27

    授权

    授权

  • 2009-11-11

    实质审查的生效

    实质审查的生效

  • 2009-09-16

    公开

    公开

说明书

背景

注册表是在包括微软WINDOWS 9x、WINDOWS CE、WINDOWS NT、WINDOWS 2000和WINDOWS XP在内的某些操作系统中使用的中央分层数据库。注册表用于存储针对一个或多个用户、应用程序和硬件设备来配置系统所需的信息。注册表包括WINDOWS在操作期间不断引用的信息,诸如每一个用户的简档、安装在计算机上的应用程序、每一个应用程序可创建的文档类型、文件夹和应用程序图标的属性页设置、系统上存在什么硬件、正在使用的端口等。有时期望呈现由两个或多个实际项构成的注册表项的逻辑视图。

有时也期望允许对于注册表目录的不同部分的不同访问级别。例如,可能期望允许应用程序A删除特定注册表项但不允许应用程序B删除该注册表项,或允许应用程序A对于特定项添加其自己的值。本发明的各实施例解决了这些和其他需求。

概述

两组或多组单独的实际注册表项作为单个(虚拟)注册表呈现给在被称为竖井(silo)的受控执行环境中运行的应用程序。通常可用于对注册表中的项和项值执行的所有操作都可对合并的注册表执行,然而,操作系统控制对合并的注册表中的项的访问级别。操作系统通过注册表过滤器驱动程序或其他内核级操作系统代码来提供注册表的合并视图。注册表过滤器模型为单个回调提供指示调用该回调的原因的通知码。回调处理程序可被实现为具有用于处理各种通知的代码的大型开关语句。触发特殊处理的通知类型的示例包括:枚举子项、枚举项值、查询项、查询值、设置项值、修改项的安全性、加载项、关闭项、创建或打开项、删除项、删除值或重命名项。

对注册表项或值的虚拟删除的需求在包括以下条件在内的各种情形中可能变成必要的或期望的:

·做出删除注册表项或值的请求的用户基于与该项/值相关联的ACL(访问控制列表)具有删除该项或值的许可。

·合并项的专用构成位置经由其访问掩码具有删除许可。

·对于接收到对其的删除请求的合并项启用删除语义支持。

当满足所有以上条件时,可在专用位置中为正被虚拟地删除的注册表项或值创建删除标记。从竖井的观点来看,所标记的注册表项或值已被删除。因此,在请求特定类型的注册表项/值访问操作时可能需要特殊的虚拟删除处理。触发特殊虚拟删除处理的请求类型的示例包括枚举、打开、创建、重命名、删除项以及删除值。

附图简述

在附图中:

图1是示出其中可以实现本发明各方面的示例性计算环境的框图;

图2是根据本发明的某些实施例的用于合并注册表项或值的系统的框图;

图3是根据本发明的某些实施例的用于合并注册表项或值的方法的流程图;

图4是根据本发明的某些实施例的图3的方法的一部分的流程图;

图5是根据本发明的某些实施例的对于打开/创建请求的虚拟删除处理的流程图;

图6是根据本发明的某些实施例的对于枚举请求的虚拟删除处理的流程图;

图7是根据本发明的某些实施例的对于删除请求的虚拟删除处理的流程图;

图8是根据本发明的某些实施例的对于查询的虚拟删除处理的流程图。

详细描述

概览

有时期望呈现由两个或多个实际项构成的注册表项的逻辑视图。例如,可能期望提供现有注册表项和新的空项之间的合并。由一进程创建新注册表项和值将进入最初空的项,但来自现有注册表的所有状态将对于该进程可见。这允许进程存储其单独项中的“专用”改变,但不修改注册表的共享的“公共”部分。然而,通常当前已知的操作系统向所有进程提供注册表项的相同视图。

因此,在许多系统中,在操作系统进程层以及操作系统本身的机器边界处存在系统中有限的密封点,但在这些层之间,使用诸如访问控制列表(ACL)以及与运行应用程序的用户的身份相关联的特权等安全控制来控制对注册表项或值的进程访问。因为对系统资源的访问与运行应用程序的用户的身份而不是与应用程序本身相关联,所以应用程序可访问该应用程序不需要的注册表项或值,如以上示例所展示的。因为多个应用程序可能能够修改同一个注册表项或值,所以可能导致应用程序之间的不兼容。也可能产生安全问题,因为一个应用程序可能恶意或故意干扰另一应用程序的操作。

此处被称为竖井的操作系统内隔离/密封机制允许对在使用操作系统的单个实例的单个计算机上运行的进程进行分组和隔离。操作系统的单个实例将系统的处理空间分为多个并排和/或嵌套的执行环境(竖井),从而允许对某些注册表项的受控共享以及对其他项的访问限制。操作系统通过为每一个竖井创建不同的注册表视图来控制注册表项共享和访问。该视图对于在竖井中运行的进程表现为单个目录,该单个目录是两组或多组构成项的并集。即,对于应用程序可用的项取决于该应用程序在哪个竖井中运行并且在一竖井中运行的应用程序“看见”的注册表通过表面上合并两组或多组项来创建。服务于计算机或计算机系统的单个OS映像由此提供注册表的不同视图以控制哪个进程、进程组、应用程序或应用程序组可使用哪些项以及应用程序是否能够读取或读写项。对项的访问以及对项的访问程度因此直接关联于或基于进程、应用程序、进程组、应用程序组被放置的竖井而不是仅由用户特权来确定。

对注册表的合并支持可经由注册表过滤器驱动程序或其他内核级操作系统代码来实现。在某些实施例中注册表过滤器模型为单个回调提供指示调用该回调的原因的通知码。在某些实施例中回调处理程序因此是具有用于处理各种通知的代码的大型开关语句。接收特殊处理的通知包括枚举注册表项、枚举注册表项的值、查询关于注册表项的信息、查询值、设置项值、修改项的安全性、加载项、关闭项、创建项、重命名项以及删除项或删除项值。创建项通知在调用者想要创建或打开注册表项时接收。驱动程序检查正被访问的项的名称并确定是否需要特殊处理。如果发出请求的进程不在竖井中,则无需特殊处理。如果发出请求的进程在竖井中,则检索发出该请求的竖井的合并项元数据。如果正被访问的项名在合并项中,则执行特殊处理。如果在专用位置处存在项(竖井专用的注册表项),则在转发该请求时使用该专用位置。如果在专用位置处不存在项,则检查公共位置来寻找该项。如果在公共位置处存在项(全局注册表项),则在转发该请求时使用该公共位置。如果在公共或专用位置处不存在项,则返回信息以使得或者可返回错误(即,指示无法打开不存在的项的错误)或者可创建该项。如果正被访问的项名不在合并项中,则不执行特殊处理。如果执行特殊处理,则将元数据与该项相关联。

如果元数据在创建项操作期间与请求相关联并且打开该项的请求是成功的,则将该元数据附加到该项。当项被关闭时,删除与该项相关联的任何元数据。当客户机应用程序试图枚举打开的项的子项值时,调用特殊处理程序。检索与该项相关联的任何元数据。如果找到元数据,并且该元数据指示该项是合并项,则将存在于每一个构成项中的项列表的内容返回给调用者。

在某些实施例中用于查询项的注册表API通过传入索引并返回结果来实现。对于给定索引,考虑构成项的内容,确定对于该索引应返回什么,并返回该内容。跟踪枚举期间的每一个构成目录中的当前位置,并且每次都返回适当的下一个值。即,返回来自一个构成项的所有结果。在还未枚举相同的项名的情况下返回后续项的结果。如果调用者查看当前索引之下的索引,则重置内部高速缓存的索引并重启处理。可枚举项中的子项或项中的值。子项或值如所请求地返回给调用者。如果接收到请求项名的请求,则返回相对于竖井的名称而不是注册表中的项的实际名称。因此,如果接收到检索项信息的请求,则检索该信息并更新所请求的信息以使其匹配调用者期望的信息。例如,假设请求项的名称。检索该项的名称并更新发回到调用者的名称以使其匹配调用者惯用于打开该项的名称,从而保持构成项的所有内容都在同一个合并项中的错觉。如果正在重命名项,则基于展示给应用程序的“合并”目录视图来确认新名称或新位置。由此,如果用户想要将项移至新位置,则基于命名空间的竖井视图来更新该新位置。

当两个或多个实际注册表项经由一个逻辑视图来展示时,删除项或值可展示或显示其他构成项组之一中具有与所删除的项/值相同的名称的项或值。通常在合并项情况下,对各组构成项排序。当发生冲突(即,在两个或多个构成项中存在具有相同名称的值)时,排序策略确定将展示哪个值。然而,如果排名最高的项已被删除,则将在没有干预(absent intervention)的情况下展示来自其他(下一个排名最高的)构成项的具有相同名称的值。该项的展示可能不是合乎需要的。因此,需要“记住”在构成项中存在过具有相同名称的项或值并防止在同名的排名更高的项已被删除时展示该值。

例如,假设相同的项同时出现在合并的注册表的公共部分和专用部分两者中。通常,在展示合并项时,注册表目录的专用目录、位置或部分是允许写入的而公共部分是只读的。这两个部分构成逻辑项视图。新的项和值以及可能被修改的值(经由例如写时复制(copy-on-write))被写入到专用位置。因此专用项中所创建的值将屏蔽一个或多个公共项中具有相同名称的值。但是,如果专用项中的值被删除,则可展示或显示公共值中的一个。对于先前访问专用注册表项值的应用程序而言,该专用值将不会看上去已被删除。该应用程序现在将访问先前隐藏但现在改为展示的注册表值,其就该应用程序所知道的而言是同一个值,但该先前隐藏的注册表项的内容很可能是不同的。此外,删除注册表值的进一步尝试将失败,因为现在正被打开的值处于只读位置中。这是成问题的。

为了解决这些问题,根据本发明的实施例,在专用项中添加标记以指示所标记的注册表项或值将被认为是“已删除”并且因此应该不再经由逻辑合并项视图可见。因此,在本发明的实施例中,为删除标记提供存储并且在注册表项或值访问操作期间创建并遵循删除标记。存储删除标记需要用于删除信息的某一种持久存储。因此,删除数据可指示所删除的注册表项或值、位置或子位置的名称以及该注册表项或值、位置或子位置被删除的位置。这些目标可通过存储标识删除的注册表项或值的特殊注册表项或值、存储诸如删除的注册表项或值的重解析点等另一注册表标记、将数据存储在外部(单独的)存储中来实现。

在某些WINDOWS操作系统中,注册表是事务型的(transactional),这意味着多个注册表操作可作为一组来一起完成。当已完成所有操作时,可或者提交或者中止改变。因此或者所有改变都出现,或者没有一个改变出现。因此,在本发明的某些实施例中,如果删除标记作为事务的一部分来创建,则删除标记直到提交事务才出现,并且如果事务被中止,则删除标记也消失。

在从合并项中删除注册表项或值时需要创建删除标记。在接收到对于先前从合并位置中删除的注册表项或值的打开注册表项或值的请求、接收到对于先前从合并位置中删除的注册表项或值的枚举注册表项或值的请求、接收到对于先前从合并位置中删除的注册表项或值的创建注册表项或值的请求等时需要遵循删除标记。

在本发明的某些实施例中,当注册表项或值被删除时,具有相同名称的注册表项或值将不会再次从除了合并项的专用部分之外的构成位置中展示。在这种情况下,如果来自构成(公共)位置的具有相同名称的注册表项或值随后开始存在,则该注册表项或值将不会在该合并项中可见。在本发明的某些实施例中,标记只在合并项的公共部分中存在与正被删除的注册表项或值同名的注册表项或值的情况下才创建。在这种情况下,删除专用注册表项或值否则将导致展示或显示同名的公共注册表项或值。如果同名的注册表项或值随后开始存在,则该注册表项或值将会在合并项中可见。

示例性计算环境

图1及以下讨论旨在提供可在其中实现本发明的合适计算环境的简要概括描述。然而,应当理解,构想了所有种类的手持式、便携式和其它计算设备来结合本发明使用。尽管以下描述了通用计算机,但是这仅是一个示例,并且本发明只需具有网络服务器互操作性和交互的瘦客户机。由此,本发明可在其中蕴含了极少或最小客户机资源的联网的主存服务的环境,例如其中客户机设备仅用作浏览器或到万维网的接口的联网环境中实现。

尽管并非所需,但本发明可经由开发者使用的,和/或包括在网络浏览软件中的应用程序编程接口(API)来实现,该网络浏览软件将在诸如程序模块等由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,程序模块的功能可以在各个实施例中按需进行组合或分布。此外,本领域的技术人员可以理解,本发明可以用其它计算机系统配置来实施。适用于本发明的其它众所周知的计算系统、环境和/或配置包括但不限于,个人计算机(PC)、自动柜员机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费者电子设备、网络PC、小型计算机、大型计算机等等。本发明也可以在其中任务由通过通信网络链接或其它数据传输介质的远程处理设备来执行的分布式计算环境中实践。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。

因此,图1示出了其中可实现本发明的合适的计算系统环境100的一个示例,尽管如上所述,计算系统环境100仅为合适的计算环境的一个示例,并非对本发明的使用范围或功能提出任何局限。也不应该把计算环境100解释为对示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。

参考图1,用于实现本发明的示例性系统包括计算机110形式的通用计算设备。计算机110的组件可以包括,但不限于,处理单元120、系统存储器130和将包括系统存储器在内的各种系统组件耦合至处理单元120的系统总线121。系统总线121可以是几种类型的总线结构中的任何一种,包括存储器总线或存储控制器、外围总线、以及使用各种总线体系结构中的任一种的局部总线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为夹层(Mezzanine)总线)。

计算机110通常包括各种计算机可读介质。计算机可读介质可以是能由计算机110访问的任何可用介质,而且包含易失性、非易失性介质以及可移动和不可移动介质。作为示例而非局限,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CDROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它介质。通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任意信息传送介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。以上的任何组合也应包括在计算机可读介质的范围内。

系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,它通常储存在ROM 131中。RAM 132通常包含处理单元120可以立即访问和/或目前正在其上操作的数据和/或程序模块。作为示例而非局限,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。

计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器141,对可移动、非易失性磁盘152进行读写的磁盘驱动器151,以及对诸如CD ROM或其它光学介质等可移动、非易失性光盘156进行读写的光盘驱动器155。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141通常由不可移动存储器接口,诸如接口140连接至系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动存储器接口,诸如接口150连接至系统总线121。

上文讨论并在图1中示出的驱动器及其关联的计算机存储介质为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。在图1中,例如,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同,也可以与它们不同。操作系统144、应用程序145、其它程序模块146和程序数据147在这里被标注了不同的标号是为了说明至少它们是不同的副本。用户可以通过输入设备,诸如键盘162和定点设备161(通常指鼠标、跟踪球或触摸垫)向计算机110输入命令和信息。其它输入设备(未示出)可以包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些和其它输入设备通常由耦合至系统总线121的用户输入接口160连接到处理单元120,但是也可由诸如并行端口、游戏端口或通用串行总线(USB)之类的其它接口和总线结构连接。

监视器191或其它类型的显示设备也经由接口,诸如视频接口190连接至系统总线121。诸如北桥等图形接口182也可连接到系统总线121。北桥是与CPU或主机处理单元120通信的芯片组,并承担了加速图形端口(AGP)通信的责任。一个或多个图形处理单元(GPU)184可以与图形接口182通信。在这一点上,GPU 184一般包括诸如寄存器存储等片上存储器存储,并且GPU 184与视频存储器186通信。然而,GPU 184仅是协处理器的一个示例,且因此计算机110中可包括各种协处理设备。监视器191或其它类型的显示设备也通过接口,如视频接口190连接至系统总线121,而视频接口190又与视频存储器186通信。除监视器191之外,计算机也可包括其它外围输出设备,如扬声器197和打印机196,它们通过输出外围接口195连接。

计算机110可使用至一个或多个远程计算机,如远程计算机180的逻辑连接在网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相对于计算机110所描述的元件,尽管在图1中仅示出了存储器存储设备181。图1中所示的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其它网络。这样的联网环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。

当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连接至LAN171。当在WAN联网环境中使用时,计算机110通常包括调制解调器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器172可以是内置或外置的,它可以通过用户输入接口160或其它适当的机制连接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或其部分可被储存在远程存储器存储设备中。作为示例而非局限,图1示出远程应用程序185驻留在存储器设备181上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。

本领域的普通技术人员可以理解,计算机110或其它客户机设备可作为计算机网络的一部分来部署。在这一点上,本发明涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统。本发明可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。本发明也可应用于具有编程语言功能、解释和执行能力的独立计算设备。

合并的注册表项或值中的虚拟删除

操作系统监视由在竖井中运行的进程做出的注册表访问请求(例如,WINDOWS注册表)。在计算机或计算机系统中可同时存在多个竖井。多个进程可在每一个竖井中执行。单个操作系统映像创建竖井并创建和监视所有竖井中的所有进程。注册表项的竖井专用视图由操作系统通过在表面上将两个或多个实际后台(backing)存储(注册表项)一起合并为对于竖井看上去是单个项的样子来创建。即,两个或多个单独的注册表项可作为单个项展示给竖井(以及在该竖井中运行的进程)。可使用这些实际后台存储中的一个或多个来为这些竖井中的一个或多个构建竖井专用视图的一部分。

图2示出了用于如上所述的合并的注册表中的注册表项或值的虚拟删除的系统200的一个实施例。系统200可驻留在一台或多台计算机上,诸如以上参考图1所述的计算机110。在图2中,一个或多个执行环境可在计算机110上运行。所构想的一种类型的执行环境是竖井(以上已更详细地描述)。在图2中,描绘了竖井202和竖井220。竖井可以是嵌套的,即,竖井202自身可包括竖井(未示出)。竖井可被嵌套成任何所需层次。另一竖井内所嵌套的竖井有时被称为子竖井,而其中嵌套竖井的竖井有时被称为其父竖井。父竖井可控制其资源(包括注册表项或值在内)对于其子竖井可用的程度。

竖井可用于创建隔离的执行环境以使得与一个竖井相关联的资源对于在该竖井中运行的进程可用而不可由在计算机或计算机系统或计算机网络中的其他计算机上运行的其他竖井来访问。例如,如果竖井202是隔离的执行环境,则对于在竖井202中运行的进程216可用的资源(未示出)将对于诸如在第二竖井,即,竖井220中运行的诸如进程226等进程不可用。然而,在竖井202中运行的第二进程(诸如进程217)可访问该资源。类似地,对于进程226和227可用的资源对于在竖井202中运行的资源216和217不可用。

或者,根据本发明的实施例,竖井可用于创建半隔离的或受控的执行环境,其中某些资源是共享的而某些资源不是共享的,或者其中资源的某些部分是共享的而该资源的其他部分不是共享的。这样一个构想到的资源是注册表。例如,在竖井202中诸如进程216和217等一个或多个进程正在运行并可访问注册表。在本发明的某些实施例中,注册表是虚拟合并的项目录212,其中尽管对于进程216和217而言作为单个实际目录出现,但虚拟合并注册表212实际上是操作系统通过使用回调在特定情况下对特定类型的操作执行特殊处理而创建的两组或多组注册表项的并集的虚拟视图。由操作系统214创建的视图可包括被合并在一起以创建虚拟合并注册表的注册表的公共项和专用或本地(对于竖井而言)项的并集。在本发明的某些实施例中,折叠重复项,且在存在重复项时使用专用项的值。例如,公共注册表中的一个项是 egistrymachinesoftware。该项例如可以是应用程序可写入机器全局状态的位置。期望允许在竖井中运行的应用程序将其自己的状态写入其自己的 egistrymachinesoftware的副本(即, egistrymachinesilo0000software)但使得该竖井能够在 egistrymachinesoftware的公共版本中共享该状态。以此方式,该竖井能够看见在外部系统中做出的任何改变但能够做出其自己的改变或写入将只存在于其专用位置中并且由此将不会影响处于该竖井外部的系统的新项。因此,合并注册表项 egistrymachinesoftware和 egistrymachinesilo0000software。竖井将看见被称为 egistrymachinesoftware的项但其内容将会是实际的 egistrymachinesoftware和registrymachinesilo0000software的组合。因此,在本发明的某些实施例中由操作系统创建的合并注册表包括全局项的值,而该项的专用、非共享部分与特定竖井相关联(例如,与竖井202相关联),并且可表示例如,在该竖井中运行的应用程序的本地或专用项。例如,在图2中,与竖井202相关联的虚拟合并项212包括从全局项204的值导出的可共享部分204a以及从本地项(与竖井202相关联的专用、非共享项206)的值导出的不可共享(专用)部分206a。与竖井220相关联的虚拟合并注册表232包括从全局项204的值导出的可共享部分204a以及从本地项(与竖井220相关联的专用、非共享项203)的值导出的不可共享部分236a。在本发明的某些实施例中,项212的可共享部分204a是只读的,而项212的专用、非共享部分206a是读写的,但可以理解,所构想的本发明并不限于此。即,虚拟合并注册表项的专用部分可以是只读的或读写的或者可包括只读或读写的部分。类似地,虚拟合并注册表项的可共享部分可以是只读的或读写的或者可包括仅仅只读的或读写的部分。此外,可以理解,所构想的本发明并不限于合并两个值或两组项。可合并任何数量的项(n个项)以创建虚拟合并注册表。虚拟合并注册表在本发明的某些实施例中并非持久存储在永久存储上或本质上在存储器中创建,而是由操作系统214通过监视注册表项访问请求并如以下更详细描述地执行与访问请求的类型相关联的特殊处理来按需动态推导出。

因此,可以理解,因为在计算机上或计算机系统中可能同时存在不止一个竖井,所以也可能同时存在不止一个注册表视图,即,在竖井和虚拟合并注册表之间存在一对一的对应关系,但在特定计算机或计算机系统上在任一时刻可能存在任何数量的竖井及合并视图。此外,虚拟合并注册表中的每一项的一部分可包括可共享部分,其对于计算机系统中的所有竖井而言可以是相同的或不相同的,并且可以与实际后台注册表204相同或不相同。在本发明的某些实施例中,在系统中的所有竖井中运行的所有应用程序或进程共享竖井的合并注册表的单个可共享部分,其可能存在或不存在于竖井在其上运行的特定计算机上。此外,作为合并注册表的可共享或不可共享部分的“后台”的实际目录可存在于诸如可移动盘、CD ROM、USB钥匙等可移动介质上。类似地,实际后台注册表可驻留在远程系统上。对于合并注册表的专用或不可共享部分及其后台存储而言亦是如此。

在本发明的某些实施例中,操作系统214中创建注册表的合并视图(例如,合并项212和232)的机制是过滤器驱动程序,其能够通过注册回调来将其自身插入到操作的代码路径中。在本发明的某些实施例中,所注册的回调包括RegNtPreCreateKeyEx(Ex),RegNtPostCreateKeyEx(Ex)、RegNtPreQueryKey、RegNtPreEnumerateKey、RegNtPreEnumerateValueKey、RegNtPreRenameKey和RegNtPreKeyHandleClose,但可以理解,可注册其他回调。在本发明的某些实施例中,对其执行特殊处理(例如,经由回调)的操作是对注册表项的枚举、打开、创建、重命名和关闭操作。例如,枚举操作可以与RegNtPreEnumerateKey和RegNtPreEnumerateValueKey回调相关联,打开和创建与RegNtPreCreateKeyEx(Ex)、RegNtPostCreateKeyEx(Ex)相关联,关闭与RegNtPreKeyHandleClose回调相关联,而重命名与RegNtPreRenameKey回调相关联。在某些实施例中,当注册表项访问请求从进程发出时,操作系统经由回调来监视该请求并且如果操作是对于其将发生特殊处理的操作中的一个,则执行特殊处理。例如,在图2中,操作系统214可监视诸如由竖井202中的进程216发起的请求240等注册表项访问请求并执行特殊处理以便从专用项206(与竖井202相关联)和公共项204中创建虚拟合并注册表212。虚拟合并注册表212中从专用项206导出的项的各部分由(虚拟的)专用项206a来表示,而虚拟合并注册表212中从公共项204导出的各部分由(虚拟的)公共项204a来表示。

每一个构成(后台存储)项都可以与一排名相关联(例如,在图2中,专用(后台存储)项206与排名210相关联、公共项(后台存储)204与排名208相关联)。在某些实施例中排名在需要时用作平局打破器(tie breaker)。例如,如果请求项访问(例如,打开、枚举等),并且所指示的值存在于两组同名项中,则可使用构成组的排名来确定向请求者展示哪个值,即,向请求者展示具有最高排名的项组中项的值(作为示例,项的可写入部分)。类似地,如果给定名称是一个构成目录中的项并且相同的名称是另一组构成项中的子目录,则在某些实施例中向请求者展示具有最高排名的组中的条目。

例如,在某些实施例中注册表项枚举是来自所有构成项组的所有项的并集。如果在不止一个构成组中存在相同的名称,则使用每一构成组的排名来确定应展示哪个组的版本的值。在创建项时,如果该项还未存在于任一构成组中,则它将在具有最高排名的组中创建。在重命名项时,查询每一构成项组以确定新名称尚未被使用,并且如果未被使用,则将该项重命名为该新名称。

在本发明的某些实施例中,当对于注册表项或值的虚拟删除的需求变成必要的或期望的时候,注册表项或值(位于合并项的专用部分中)用删除标记来标记而不是实际上被删除。从竖井的观点来看,如此标记的注册表项或值已被删除。

为了解决以上需求,将删除标记与在合并项环境中接收到对于其的删除请求的注册表项或值相关联。在展示合并项时,通常将存在可写入的合并项的专用部分以及只读的公共部分(由一个或多个公共位置构成)。专用位置和公共位置或目录两者构成逻辑合并项。新注册表项或值以及可能可修改的注册表项或值(经由写时复制操作)通常进入合并项的专用部分。合并项的公共部分中的注册表项或值通常是可见的但是不可修改的。专用位置中所创建的具有与构成公共位置或目录中的一个或多个注册表项或值相同的名称的注册表项或值通常将屏蔽或隐藏公共注册表项或值,因为专用注册表项或值的排名高于类似命名的公共注册表项或值。但如果排名最高的专用注册表项或值被删除,则可显示或展示公共注册表项或值中的一个,因为现在公共注册表项或值是该名称的排名最高的注册表项或值。对于先前访问过专用注册表项或值的应用程序而言,该专用注册表项或值将不会看上去已被删除。先前已访问过专用注册表项或值的应用程序现在可访问先前隐藏但现在改为展示的注册表项或值,其据该应用程序所知是同一个注册表项或值,但该先前隐藏的注册表项或值的内容很可能是不同的。此外,删除注册表项或值的进一步尝试将失败,因为现在正被打开的注册表项或值处于只读位置中。这是成问题的。为了解决这些问题,将标记添加到专用位置以指示所标记的注册表项或值将被认为是“已删除的”并因此应当不再经由逻辑合并项视图可见。因此,在本发明的实施例中,提供用于删除标记的存储并且在注册表项或值访问操作期间创建并遵循删除标记。存储删除标记需要用于删除信息的某一种持久存储。构想用于存储删除标记的多个选项。一个选项是装饰所删除的注册表项或值的名称以指示删除。例如,如果注册表值“ABC”被删除,则可将具有名称“$$deleted$$:ABC”的新的值写入到专用位置中的注册表目录。即,删除标记可通过创建具有从正被删除的项或值的名称导出的经装饰的名称的新的项或值来创建并可被写入到注册表的专用部分。适当的装饰或消息的存在指示虚拟地删除的注册表项或值。显而易见的是,任何类型的装饰或消息都可指示虚拟删除:所示装饰仅仅是一种可能的装饰的示例。另一选项是将删除标记作为重解析点来存储。另一选项是将删除标记存储在外部数据库中。例如,诸如注册表项或值的名称、经装饰的名称或重解析点等删除标记可被存储在注册表项或值系统中的另一位置中(或许被存储在被称为“删除的注册表项或值”的注册表项或值、位置或子位置中)或者删除标记可被存储在另一非注册表项或值系统存储中。在这种情况下,将存储删除的注册表项或值的名称,而不是存储经装饰的名称以指示虚拟地删除的注册表项或值,从而需要查找操作以确定给定注册表项或值是否已被虚拟地删除。因此,删除数据可指示所删除的注册表项或值的名称以及该注册表项或值被删除的位置。这些目标可通过存储标识删除的注册表项或值的删除标记、存储诸如删除的注册表项或值的重解析点等另一注册表标记、或将删除数据存储在外部(单独的)存储中来实现。因为删除可在事务中发生,所以所使用的任何实现都应当是知晓事务的。将数据存储在外部存储中要求该外部存储可参与事务,这意味着该外部存储将知道事务何时被提交,并且将在提交期间提交结果。类似地,如果事务被中止,则该外部存储将回退(或撤销)改变。该外部存储还必需在事务中提供动作已经发生的视图,但在该事务之外使得看上去像该动作还未发生。

在从合并项中删除注册表项或值时需要创建删除标记。在接收到对于先前从合并位置中删除的注册表项或值的打开注册表项或值的请求、接收到对于先前从合并位置中删除的注册表项或值的枚举注册表项或值的请求、接收到对于先前从合并位置中删除的注册表项或值的创建注册表项或值的请求等时需要遵循删除标记。

在本发明的某些实施例中,当注册表项或值被删除时,具有相同名称的注册表项或值将不会再次从除了合并项的专用位置之外的构成位置中展示。在这种情况下,如果来自构成(公共)位置的具有相同名称的注册表项或值随后开始存在,则该注册表项或值将不会在该合并项中可见。在本发明的某些实施例中,标记只在合并项的公共部分中存在与正被删除的注册表项或值同名的注册表项或值的情况下才创建。在这种情况下,删除专用注册表项或值否则将导致展示或显示同名的公共注册表项或值。如果同名的注册表项或值随后开始存在,则该注册表项或值将会在合并项中可见。

在本发明的某些实施例中,操作系统的过滤器驱动程序挂钩各种注册表项或值访问操作并且与上述合并项操作协同展示用于虚拟地删除的注册表项或值的正确语义。例如,对于诸如枚举操作等操作而言删除标记本身是被隐藏的,并且已经被虚拟地删除的任何注册表项或值都是被隐藏的。即,可过滤掉删除标记以使得在接收到枚举请求时不返回删除标记。类似地,对其存在删除标记的注册表项或值不响应于枚举请求来返回。对于诸如创建或打开等操作而言防止调用者打开删除标记或虚拟地删除的注册表项或值。在合并项环境中,在接收到打开或创建操作请求时提供逻辑以确定是否试图打开合并项的专用或公共部分中的注册表项或值。如果打开操作中所指定的注册表项或值处于公共部分中,则执行检查以确定在专用位置中是否存在对于该注册表项或值的删除标记。如果存在,则打开失败(例如,返回“未找到状态对象名”)。不允许打开删除标记形式的注册表项或值。对于重命名操作而言,将注册表项或值重命名为删除标记形式的名称是不被准许的。对于删除操作而言,在合并项的专用部分中为注册表项或值创建删除标记。在某些实施例中删除标记通过创建具有注册表项或值名称的经装饰的版本的新注册表项或值来创建。项或值名称的经装饰的版本将要删除的原始项或名称用作基础并对其添加前缀或后缀或两者以创建经装饰的版本。经装饰的注册表项或值的存在指示该项或值已被虚拟地删除。传统上,项在可被删除之前必须是空的。在项虚拟删除的情况下,在本发明的某些实施例中,创建对于项的删除标记、删除嵌套的删除标记并且然后如果适当则执行普通删除处理。(例如,删除可在项从专用位置打开的情况下发生。)也可查询项。查询的结果可包括诸如子项和值的数量等信息。在某些实施例中,过滤查询操作以更新子项/值计数以及最大子项长度和最大值名称长度字段。

图3是根据本发明的实施例的用于合并项的方法的流程图。在302,操作系统(例如,图2的OS 214)监视注册表项访问请求(诸如由在竖井202中运行的进程216做出的访问请求240)。当操作系统检测到(例如,经由回调)项访问请求(304)时,操作系统214确定所做出的访问请求的类型(306、314、322、326、330和334)并执行适当的处理,如将在以下更详细地描述的。

例如,在306,操作系统可确定项访问请求是打开或创建项的操作(306)。图4是可在随后发生的处理(308)的流程图。当打开或创建请求被发送到其上存在合并注册表的卷时,调用使得操作系统的过滤器驱动程序能够检查该请求以确定是否需要特殊处理的创建回调(例如,RegNtPreCreateKeyEx(Ex))。在调用打开或创建操作时,提供绝对路径名或相对于现有打开的项的路径名。在使用相对打开时,名称解析开始于相对句柄所引用的注册表节点。在绝对打开的情况下,操作系统的IO管理器解析名称,对象管理器解析名称中指向设备对象的一部分并将该名称的未解析余额(balance)(尚未被解析的部分)连同指向其所处的设备对象的指针一起传回到I/O管理器。当所指的项的一部分是竖井视图(402)而不是全局部分时需要特殊处理。如此处所使用的,“使用竖井视图”来执行操作意味着项的名称在竖井的虚拟合并注册表中而不是在注册表的普通的实际视图中解释。

在402,如果打开是绝对打开(不是相对打开)并且调用者处于竖井中,则处理在404处继续。在本发明的某些实施例中,操作系统通过观察访问请求中的若干字段来确定打开或创建项是相对还是绝对打开/创建。如果访问请求仅包括项名并且发起该请求的线程不属于在竖井中运行的进程,则该请求被认为是绝对打开。可使用请求中所存储的信息来检索与项相关联的元数据(408)。

由此,在404,在竖井的上下文中检查正被访问的项的名称。新的项对象使用竖井视图来创建,只要请求中所引用的项最初在竖井中打开。因为过滤了对项对象的所有访问请求,所以可访问两个或多个后台对象以提供竖井视图。项也使用竖井视图来打开,只要使用相对打开而不是绝对打开。在本发明的某些实施例中,如果请求中表示现有打开的项的字段不为空,则该请求被认为是相对请求。在402,如果调用者不在竖井中或如果原始项不在竖井中打开,则处理照常进行(406)。如果请求使用绝对名称(即,项的名称使用路径名来显式引用并且请求的打开项字段为空),则操作系统确定发起请求的进程(调用者)是否处于竖井中。在本发明的某些实施例中,操作系统通过确定发起访问请求的线程是否处于竖井中来确定调用者是否处于竖井中。或者,在某些实施例中操作系统可通过检查可用竖井标识符来标记的访问请求以确定该请求是否源自竖井中的调用者来确定调用者是否处于竖井中。如果调用者处于竖井中,则项使用竖井视图来打开并返回专用值。

因此,如果请求中所引用的项最初不是在竖井中打开的,或如果请求是绝对打开并且调用者不在竖井中,则处理在406处继续。在404,如果操作将使用竖井视图来处理,则检查请求中的项的名称并在竖井的上下文中解释该项的名称。在本发明的某些实施例中,为竖井提供具有与底层机器相同的分层结构的注册表的视图(即,竖井的视图看上去具有与基础结构或“系统竖井”相同的分层结构)。例如,如果在基础结构中存在 egistrymachinesoftware,则在竖井中展示 egistrymachinesoftware。这可完成以使得期望该分层结构的应用程序将找到它。然而,可改变作为该分层结构的后台的项以使得竖井中的 egistrymachinesoftware实际上是实际的 egistrymachinesoftware和 egistrymachinesilo000software(竖井专用注册表)的合并。发生普通出错处理。即,例如在打开操作中,如果搜索由访问请求中的名称来标识的项但在任一目标项中都未找到,则返回出错消息。如果在适当的项中找到子项,则将打开的项返回给调用者。可在打开的项被返回给调用者之前附加元数据以便成功地打开或创建。如果未找到项,则创建项或返回出错消息。在408,检索竖井的合并注册表项元数据。在410,如果未在合并注册表中找到所请求的名称,则处理照常进行(406)。例如,可返回陈述未找到项的出错消息。在410,如果在合并注册表视图中未找到所请求的名称,则返回信息以使得能够确定是否要创建或打开该名称的项(412)。在某些操作系统中,可使用“创建操作”来同时打开和创建项。在416,如果所请求的操作是“打开项”(即,该请求试图访问现有项),则操作系统通过确定在合并注册表的专用(不可共享)部分中是否存在该项来首先检查专用构成项。在416,如果操作系统确定在虚拟合并注册表的专用部分中不存在该项,则检查合并注册表的公共部分。如果在合并注册表的公共部分中不存在该项,则返回出错消息。如果在合并注册表中找到该项,则返回打开的项。在412,如果确定将要创建项(即,请求是创建项请求),则在414,操作系统检查公共位置以确保在合并注册表的公共部分中尚不存在该项。如果存在,则导致出错(418)。如果不存在,则在合并注册表的专用部分中创建项,将元数据与该项相关联并将所创建的项连同该元数据一起返回给调用者(420)。

在本发明的某些实施例中,元数据将在RegNtPrePostCreate期间被附加到打开的项。

再次参考图3,存在若干种不同类型的枚举请求。如果操作系统检测到对项的子项的枚举请求,则返回项的列表。在314,如果操作系统在314处检测到枚举项操作,则首先,操作系统确定是否存在与该项相关联的元数据(316)。在本发明的某些实施例中,操作系统从该元数据中确定注册表是否是合并视图(318)。在任一种情况下,如果注册表是合并视图(318),则返回合并在一起的两个项的结果(320)。如果注册表不是合并视图,则执行普通处理。如果操作是对项的值的请求(326),则返回这些项的值(328)。合并项的全局和专用值。

如果操作是查询(322)(诸如对名称或关于项的其他信息的请求),则在324,检索项的实际名称并更新该名称(如果有必要的话)以反映对于请求者的合适名称。在某些情况下,如果接收到对项的名称的请求或接收到对关于项的其他信息的请求,则返回相对于竖井的名称而不是该项的全局名称。

如果遇到的操作是重命名项(330),则操作系统必须确保作为相对于竖井的名称的新的名称(项将被重命名为的名称)在底层注册表看见它之前被转换为全局名称以使得注册表正确地重命名该项。在334,如果操作被确定为关闭,则调用RegNtPreKeyHandleClose回调。在336,删除与正被关闭的项相关联的任何元数据。可以理解,以上所列出的动作中的一个或多个可以是可任选的或被跳过并且各动作可以按除了图3所描绘的之外的顺序来进行。

图5示出了遵循虚拟删除的创建/打开操作的某些实施例。在502,接收对注册表项或值的创建/打开请求。在504,如上所述地执行普通竖井合并项处理。在506,确定正被打开的注册表项或值是否处于公共构成位置。在508,如果正被打开的注册表项或值位于合并项的公共部分中,则确定是否存在对于所述注册表项或值的删除标记并且如果是,则在510,打开请求失败。在508,如果确定不存在对于所述注册表项或值的删除标记,则执行普通竖井合并项处理(512)。在506,如果确定正被打开的注册表项或值、位置或子位置不在公共构成位置中,则处理在512处继续。删除标记可以按如上所述的任何合适的方式来实现。

图6示出了遵循虚拟删除的注册表项枚举操作的某些实施例。在602,接收对注册表项或值、位置或子位置的枚举请求。在604,如上所述地执行普通竖井合并项处理。在606,从专用位置(合并项的专用位置)中过滤删除标记。在608,过滤掉公共位置中具有专用位置中的对应的删除标记的条目。在610,执行普通竖井合并项操作。在本发明的某些实施例中,过滤掉对于其存在删除标记的注册表项或值。显示结果或以其他方式返回结果。

图7示出了虚拟删除操作的某些实施例。在702,接收对注册表项或值的删除请求。在704,如果未对合并项启用虚拟删除语义,则普通处理在706处继续。然而,如果对于合并项启用虚拟删除语义,则处理在708处继续并且为正被删除的注册表项或值创建删除标记。在710,如果对其接收到删除请求的注册表项或值处于专用位置中,则“删除”该注册表项或值(706)。在710,如果对其接收到的删除请求的注册表项或值处于公共位置中,则处理在712处继续。在712,如果与该删除请求相关联的访问许可允许删除,则“删除”该注册表项或值(706)。在712,如果与该删除请求相关联的访问许可不允许删除,则不删除该注册表项或值(714)。

图8示出了查询项操作的某些实施例。在802,接收对注册表项的查询请求。在804,执行普通竖井查询项操作。在806,基于存在的任何删除标记更新子项/值计数。在808,执行普通竖井合并项操作。

此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,本发明的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用本发明的域专用编程模型的创建和/或实现的各方面的一个或多个程序较佳地用高级过程语言或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要,程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译的或解释的语言,且与硬件实现相结合。

尽管结合各附图的优选实施例描述了本发明,但是可以理解,可以使用其它类似的实施例,或可以对所述实施例进行修改或添加来执行本发明的相同功能而不背离本发明。因此,本发明不应限于任何单个实施例,而是应该根据所附权利要求书的广度和范围来解释。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号