受限命名空间环境中的反向名称映射
背景
文件系统是一种在存储上(例如,在盘上)用于存储并组织计算机文件以及这些文件所包含的数据的方法。大多数文件系统使用文件持久存储在其上的底层非易失性数据存储设备。典型的存储设备提供对有时被称为扇区,一般每一个都是512字节的固定大小的块的阵列的访问。文件系统软件负责将这些扇区组织成文件和目录。文件系统还跟踪哪些扇区属于哪个文件以及哪些扇区未被使用。传统文件系统提供打开、创建、移动和删除文件和目录两者的功能。
文件系统通常具有将文件名与盘上存储文件内容的位置相关联的数据结构。通常这通过将文件名连接到诸如MS-DOS文件系统中的FAT或类似UNIX文件系统中的inode等某种文件分配表的索引来完成。文件系统目录可以是平面的或可允许分层结构。在分层目录中,每一个目录都可包括一个或多个子目录。在某些文件系统中,文件名是结构化的,且对于文件名扩展和版本号具有特殊句法。在其他文件系统中,文件名是简单的字符串,且每个文件的元数据都被存储在别处。
在许多文件系统中,文件可通过不止一个标识符来访问。例如,某些较老的操作系统(以及由此较老的应用程序)只支持8.3文件名。较新的操作系统可继续支持8.3文件名。例如,在某些较老的微软操作系统中,“Documents andSettings”文件夹可通过使用诸如“DOCUME~1”(8.3文件名)等名称来访问,而较新的系统可或者使用“Documents and Settings”或者使用“DOCUME~1”来访问该文件夹。“DOCUME~1”引用是到“Documents and Settings”文件夹的硬链接,这意味着“DOCUME~1”是单独的文件系统实体,并指向与“Documents andSetting”硬链接相同的物理位置。同一个文件可经由任一名称来访问。此外,同一个文件可能能够使用其文件标识符即文件ID(在微软操作系统中是经常被称为文件ID的数值)来打开。文件ID是别名,因为它不是单独的文件系统实体,而是访问文件夹的物理位置的另一种方式。
在大多数当前商用操作系统中,应用程序与在机器上运行的其他应用程序共享文件系统命名空间。应用程序对文件的访问由将访问控制列表(ACL)附加到每一个命名的文件的安全机制来仲裁。ACL将用户与对该特定资源的一组访问权限相关。例如,对于特定资源的ACL可指定用户1被允许对文件1进行读写访问而用户2被允许对文件1进行只读访问。因为对基于ACL的许可控制的广泛使用,所以多个应用程序经常被允许共享文件。对文件的访问基于与运行应用程序或进程的人的身份相关联的特权而不是基于应用程序自身的需求和特性。该方法可能有问题。例如,用户可能具有宽泛的访问特权(例如,管理员状态),因为他运行的某些程序需要该访问级别。例如,因为由用户1运行的程序1需要访问文件一到十,所以用户1的访问特权必须准许他访问文件一到十。假设程序2只需要访问文件一和二。在用户1运行程序2时,程序2将仍然可访问文件一到十,因为用户1的特权允许对文件一到十的访问。因此,因为一般而言文件系统操作是以基于ACL的许可控制为基础的,所以文件相同命名空间可以是并且一般是对于在机器上运行的由用户1启动的所有进程而言或多或少是全局的。基于ACL的许可控制导致多个问题,包括:一个问题可将处理时间浪费在处理它不应考虑的事情上,不是程序所期望的新文件的存在可能导致该程序不正确地操作,不同的程序可对同一个文件写入或修改,从而导致干扰等。该问题恶化,因为并非所有的程序都具有相同的可信度等级。程序2可能并非与程序1一样可信,但因为用户的特权允许他访问文件一到十,所以程序2可访问文件一到十并可恶意地修改它们。另外,可能存在即使程序使用文件的相同的名称的情况下也期望为不同的程序提供不同的文件的情况。最终,不同的程序可使用相同的名称而意指不同的文件。因此,需要比可容易地使用ACL和特权来获取的更好的对共享资源的控制。
概述
为了解决对比由ACL提供的更强大的访问控制机制的需求,创建竖井(silo),其通过将竖井专用分层命名空间与竖井相关联来限制或控制进程、程序、程序集或应用程序的执行环境。竖井专用命名空间为在该竖井中的运行的进程、程序、程序集或应用程序提供全局命名空间的视图。该新命名空间通过创建虚拟分层结构并将现有的实际的、非易失性(例如,盘上)文件系统的各片段联结到该虚拟分层结构的叶节点以创建竖井专用虚拟分层结构来创建。虚拟分层结构被存储在易失性存储(例如,存储器)中并且不影响存储在非易失性存储中的系统分层结构。新命名空间可通过合并作为单个(虚拟的)合并文件系统目录来呈现给在竖井中运行的应用程序的两个或多个单独的实际文件系统目录来创建。
文件系统分层结构的竖井专用视图(或者在嵌套竖井的情况下的父分层结构的视图)可通过创建并展示虚拟分层结构或树来创建,该虚拟分层结构或树的节点可被链接回到与竖井所在的外部系统环境相关联的实际分层结构中的节点或名称(或者链接到父竖井中的节点或名称)。虚拟分层结构是易失性的。它并非被持久存储到永久存储(例如,不被写入到盘或其他稳定的存储介质)而仅驻留在存储器或其他易失性介质中并且可在启动竖井时动态创建。当竖井退出时,可丢弃虚拟分层结构。相反,实际分层结构是永久性的(被持久存储到稳定介质)并且独立于竖井的存在或不存在。竖井可通过使得竖井为在该竖井中运行的进程提供根来实现。例如,竖井可提供将由在该竖井中运行的进程来使用的虚拟目录的根。所提供的根可表示对于该竖井中的进程的文件系统目录的根。该竖井中的进程无法看见或表达该虚拟根上方的任何名称。一个或多个分层结构可以与竖井相关联。
竖井专用分层命名空间可通过对现有分层命名空间进行剪除和/或嫁接(graft)来创建。例如,虚拟分层结构可通过将分支从系统分层结构嫁接到直接或间接附连到与竖井相关联的虚拟根的节点上来创建。对于虚拟文件系统而言,嫁接操作使得或者文件或者目录出现在该文件系统的进程视图中的一个或多个地方。虚拟文件系统实现有效地在系统的实际文件系统命名空间上构建了新的文件系统视图。
两个或多个单独的实际文件系统目录可作为单个(虚拟的)合并文件系统目录来呈现给在在竖井中运行的应用程序。通常可用于对文件系统目录执行的所有操作都能够对合并目录执行,然而,操作系统可基于竖井命名空间最初如何被设置来控制对合并目录中的文件的访问级别。操作系统通过监视由计算机或计算机系统上的竖井中的进程做出的文件系统请求,并响应于检测到特定类型的文件系统访问请求,通过执行特殊处理来提供看上去合并的目录的视图,来提供文件系统目录的合并视图。触发特殊处理的改变或请求的类型的示例包括枚举、打开、创建、重命名、关闭或删除。构成目录中的一个或多个可以是公共目录而其他构成目录可以是专用目录,以使得在竖井中运行的进程可具有对公共构成目录的一个访问级别以及对专用构成目录的第二个访问级别。类似地,因为合并文件系统目录是通过组合一个或多个公共目录以及专用目录来创建的,所以在这两个位置中可能都存在同一个名称。通常,当这发生时,专用位置名称所指示的实际文件可由进程来访问而公共位置位置中的名称所指示的实际文件是被隐藏的并由此不可由进程来访问。
在竖井中运行的进程可通过说出其希望访问的文件的相对于竖井的名称来访问该竖井的分层命名空间中的文件。试图通过另一名称来访问该文件将失败。然而,某些文件系统也允许通过非分层文件标识符(例如,通过文件ID)(对于许多应用程序的正确执行而言重要的特征)来引用文件。因此,存在查明由在竖井中运行的进程发出的文件ID是否对应于该竖井中的文件以允许限制该进程对其分层命名空间的访问的需求。
某些WINDOWS文件系统提供确定对于给定文件ID的一个或多个分层文件名的能力,由此提供了创建文件的所有可能名称的列表的能力。为了确定进程对文件ID所标识的文件的访问是否应被准许,构造该文件ID所标识的文件的实际名称的列表,并且对于所构造的列表中的每一个实际名称,确定是否可能说出转换为给定实际名称的相对于竖井的名称。这可通过确定竖井重定向前缀中的任一个是否匹配实际名称的开头来实现。如果存在前缀匹配,则打开对于竖井可见的文件并检索所打开的文件的文件ID。如果文件ID匹配,则保存匹配该文件ID的相对于竖井的名称。如果找到其文件ID匹配初始文件ID的竖井名称,则允许打开操作使用所保存的相对于竖井的名称来继续。当在合并目录的公共和专用部分中使用同一个名称时需要获取文件的文件ID并且将所获取的文件ID与最初说出的文件ID进行比较。通过将原始文件ID与所获取的文件ID进行比较,进程对命名的文件的访问可被限于该进程对专用的、相同命名的文件的访问。
类似地,在竖井中运行的进程也可试图构建已使用文件ID来打开的文件的名称。过滤从该构建尝试返回的结果以使得只返回在该竖井中可见的名称,由此将进程对文件的访问限于其分层命名空间中的文件。
附图简述
在附图中:
图1是示出其中可以实现本发明各方面的示例性计算环境的框图;
图2和2a是根据本发明的某些实施例的用于文件ID的反向映射的系统的框图;
图3是根据本发明的某些实施例的用于文件ID的反向映射的系统的另一框图;
图4是根据本发明的某些实施例的用于文件ID的反向映射的方法的流程图;以及
图5是根据本发明的某些实施例的用于过滤返回给使用文件ID来访问文件的进程的结果的方法的流程图。
详细描述
概览
基于分层命名空间布局来限制对命名的资源(诸如文件)的访问通常是方便的。这在其中由应用程序说出的资源名称在被发送至底层资源传递系统(例如,文件系统)之前转换的环境中可能尤其重要。例如,应用程序可试图通过说出名称来打开文件。可转换所说出的名称。在某些系统中,该名称被转换为的名称可用于限制对文件的访问。例如,或许通过将文件转换为特定分层名称,对该文件的访问可被限于“只读”而不是“读写”。然而,当对于资源存在不止一个名称时,通过使用替换名称来访问该资源来避开该限制机制是可能的。换言之,一方可能能够通过经由不包括目录结构的名称来访问资源来阻扰或绕开分层定义的限制机制。这一避开机制的一个示例是使用诸如文件ID等文件/目录的别名来访问文件/目录。
为了解决该问题,当竖井中的进程试图使用文件ID来访问文件或目录时,本发明的各实施例检查文件的可能的实际名称中的每一个以确定是否可能发出将转换为具有所提供的文件ID的文件的实际名称的相对于竖井的名称。在某些实施例中,这通过确定竖井重定向前缀中的任一个是否匹配考虑中的实际名称的开头来完成。如果该文件可由在该竖井中运行的进程来访问,则在该竖井视图中打开该文件,检索该文件的文件ID并将其与原始文件ID进行比较。如果该文件ID匹配,则授权访问。如果该文件ID不匹配,则请求失败。通常,返回指示对象不存在的错误。
例如,假设在竖井中运行的进程试图打开由文件ID 1234表示的文件。竖井过滤机制将构建对于由所说出的文件ID表示的文件的所有可能的“名称”的列表。例如,假设一个可能的名称是\X\Y\Z\B。竖井过滤机制现在将试图查明是否存在可在该竖井中说出的将转换为\X\Y\Z\B的名称。让我们也假设,例如,该竖井命名空间具有将相对于竖井的名称\A转换为实际名称\X\Y\Z的规则。因为该竖井中所说出的具有前缀\A的名称将转换为具有前缀\X\Y\Z的实际名称,所以存在在竖井中说出将产生给定实际名称的名称的方式。过滤机制现在将使用相对于竖井的名称““\A\B”来打开候选文件并检索其文件ID。这是重要的,因为在合并目录情况下存在可被映射到相对于竖井的名称“\A\B”的不止一个实际名称是可能的。(例如,如果在专用合并目录中存在文件“B”,则这将在公共合并目录中隐藏任何“B”)。因此,在用相对于竖井的名称并在竖井视图中打开文件后,检索打开的候选文件的文件ID。如果该文件ID匹配最初说出的文件id,即,本情况中的1234,则可允许在竖井中访问该文件。如果候选实际名称中没有一个可经由相对于竖井的名称来访问,或如果候选文件中没有一个导致返回相同的文件ID,则根本不向竖井展示该文件。竖井中的进程无法打开该文件,并且接收指示不存在具有该文件ID的文件的状态码。
在竖井中运行的进程还可试图生成已使用文件ID来打开的文件的名称列表中的一个或多个。当竖井进程请求由文件ID标识的文件的实际名称的列表时,过滤返回的结果以使得只返回该竖井分层结构中的名称。
示例性计算环境
图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连接至LAN 171。当在WAN联网环境中使用时,计算机110通常包括调制解调器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器172可以是内置或外置的,它可以通过用户输入接口160或其它适当的机制连接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或其部分可被储存在远程存储器存储设备中。作为示例而非局限,图1示出远程应用程序185驻留在存储器设备181上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。
本领域的普通技术人员可以理解,计算机110或其它客户机设备可作为计算机网络的一部分来部署。在这一点上,本发明涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统。本发明可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。本发明也可应用于具有编程语言功能、解释和执行能力的独立计算设备。
受限命名空间环境中的文件ID的反向映射
图2是示出用于受限命名空间环境中的文件ID的反向映射的系统的框图。如上所述,可使用分层命名空间来基于进程而不是与运行该进程的用户相关联的许可来限制对资源的访问。系统200可驻留在诸如以上参考图1描述的计算机上。系统200可包括一个或多个分区,诸如分区202等。如上所述的驱动器名抽象可在用户层提供以便将一个分区与另一个分区区分开来。每一个驱动器名或分区都可与一分层数据结构相关联。每一个分层结构都具有表示该分层结构中的第一个或最上面的节点的根。它是分层结构中的所有节点都从其起源的起始点。因为每一个设备都可被划分为多个分区,所以多个根可与单个设备相关联。 (例如,用户的物理硬盘可被划分为多个逻辑“盘”,每一个逻辑“盘”都具有其自己的“驱动器名”及其自己的根。)操作系统映像的单个实例在本发明的某些实施例中服务于计算机的所有分区。
在每一个分区中,系统200可包括(全局)系统环境201以及一个或多个受限命名空间环境。在本发明的某些实施例中,受限环境是竖井。系统环境201可包括或与包括但不限于文件系统命名空间254的多个命名空间和多个系统进程250相关联。系统200还可包括操作系统280。操作系统280可包括一个或多个操作系统组件,包括但不限于操作系统内核281。系统200还可包括此处未示出但在本领域中是公知的其他组件。
系统200可包括每一个分区中的或与每一个驱动器名相关联的一个或多个并排竖井204等。在某些实施例中,每一个竖井都与其自己的竖井进程空间和竖井文件系统命名空间相关联但与系统中的所有进程共享单个操作系统实例。例如,在图2中,竖井204与竖井进程208和竖井文件系统命名空间264相关联。竖井204等可包括一个或多个子竖井210等。竖井210本身可包括一个或多个子竖井并以此类推到任何嵌套程度。图2中的子竖井210与子竖井270和子竖井文件系统命名空间274相关联但由服务于所有其他环境的同一个操作系统实例来服务。子竖井可由在其父竖井中运行的进程来创建。例如,在图2中,进程208可能已通过在竖井204命名空间中创建视图来创建子竖井210,如将在以下更详细地描述的。进程无法从其竖井中逃脱。例如,竖井204中的进程无法从竖井204中逃脱。类似地,子竖井进程270的子进程无法从子竖井210中逃脱。
操作系统280监视由在竖井中运行的进程做出的文件系统访问请求。竖井专用的文件系统目录的竖井专用视图由操作系统通过在表面上将两个或多个实际后台存储(文件目录)一起合并为对于竖井看上去是单个目录的样子来创建。即,两个或多个单独的文件系统目录可作为单个目录展示给竖井(以及在该竖井中运行的进程)。可使用这些实际后台存储中的一个或多个来为这些竖井中的一个或多个构建竖井专用视图的一部分。
竖井可用于创建隔离的命名空间执行环境以使得与一个竖井相关联的资源对于在该竖井中运行的进程可用而不可由在计算机或计算机系统或计算机网络中的其他计算机上运行的其他竖井来访问。例如,现在参考图2a,如果竖井204是隔离的执行环境,则诸如文件(未示出)等对于在竖井204中运行的进程216可用的资源将对于在第二竖井,即,竖井220中运行的进程226或227不可用。然而,在竖井204中运行的第二进程(如进程217)可访问该资源。类似地,对于在第二竖井220中运行的进程可用的资源将对于诸如在竖井204中运行的进程216、217等进程不可用。
或者,竖井可用于创建半隔离的、受限的或受控的执行环境,其中某些资源(诸如文件)是共享的而某些资源不是共享的,或者其中资源的某些部分是共享的而该资源的其他部分不是共享的。这样一个构想到的资源是文件系统目录。例如,再次参考图2a,在竖井204中诸如进程216、217等一个或多个进程正在运行并可访问文件系统目录。在本发明的某些实施例中,文件系统目录是诸如虚拟合并目录222等虚拟合并目录,其中尽管对于竖井204中的进程而言作为单个实际目录出现,但虚拟合并目录(例如,目录222)实际上是操作系统通过使用回调来在特定情况下对特定类型的操作执行特殊处理而创建的两个或多个目录的并集的虚拟视图。类似地,虚拟合并目录232对于竖井220中的进程226和227而言可作为单个实际目录出现,但它实际上是目录214和216的虚拟视图。由操作系统280创建的视图可包括被合并在一起以创建虚拟合并目录222的至少一个(实际)公共或全局(对于计算机系统而言)可共享目录214以及至少一个(实际)专用或本地(对于竖井而言)目录216的条目的并集,但所构想的本发明并不限于此。类似地,合并目录可从两个或多个公共或专用目录的任何组合中构建,这些公共或专用目录中的一个或多个部分或全部可被设计为只读或读写的。此外,对于构成目录中的一个或多个可能不存在公共后台存储。例如,在本发明的某些实施例中由操作系统创建的虚拟合并目录的可共享部分是全局目录(例如,WINDOWS目录),而虚拟合并目录的专用、非共享部分与特定竖井相关联(例如,与竖井204相关联),并且可表示例如,在该竖井中运行的应用程序的本地或专用文件。即,虚拟合并目录项的专用部分可以是只读的或读写的,或者可包括只读或读写的部分。类似地,虚拟合并目录的可共享部分可以是只读的或读写的,或者可包括仅仅只读或读写的部分。此外,可以理解,所构想的本发明并不限于合并两个目录。可合并任何数量的目录(n个目录)以创建虚拟合并目录。虚拟合并目录在本发明的某些实施例中并非持久存储在永久存储上或本质上在存储器中创建,而是由操作系统280通过监视文件访问请求并执行与文件访问请求的类型相关联的特殊处理来按需动态推导出。
因此,可以理解,因为在计算机上或计算机系统中可能同时存在不止一个竖井,所以也可能同时存在不止一个虚拟合并目录,即,在竖井和虚拟合并目录之间存在一对一的对应关系,但在特定计算机或计算机系统上在任一时刻可能存在任何数量的竖井及合并目录。(例如,在图2a中,描绘了两个虚拟合并目录:虚拟合并目录222,包括专用目录216a和WINDOWS目录214a;以及虚拟合并目录232,包括专用目录236a(从专用目录203中创建)和WINDOWS目录214a。)此外,每一个虚拟合并目录的一部分可包括可共享部分(例如,WINDOWS目录),其对于计算机系统中的所有竖井而言可以是相同的或不相同的,并且可以与实际后台目录相同或不相同。在本发明的某些实施例中,在系统中的所有竖井中运行的所有应用程序或进程共享竖井的合并目录的单个可共享部分,其可能存在或不存在于竖井在其上运行的特定计算机上。此外,作为合并目录的可共享或不可共享部分的“后台”的实际目录可存在于诸如可移动盘、CD ROM、USB钥匙等可移动介质上。类似地,实际后台目录可驻留在远程系统上。对于合并目录的专用或不可共享部分及其后台存储而言亦是如此。
每一个构成(后台存储)目录都可以与一排名相关联(例如,在图2a中,专用(后台存储)目录216与排名230相关联、公共WINDOWS(后台存储)目录214与排名218相关联)。在某些实施例中排名在需要时用作平局打破器(tie breaker)。例如,如果请求目录文件访问(例如,打开、枚举、删除等),并且所指示的文件存在于两个同名目录中,则可使用构成目录的排名来确定向请求者展示哪个文件,即,向请求者展示具有最高排名的目录中的文件。类似地,如果给定名称是一个构成目录中的文件并且相同的名称是另一构成目录中的子目录,则在某些实施例中向请求者展示具有最高排名的目录中的条目。在本发明的某些实施例中,给予专用目录216比公共目录214更高的排名。
在本发明的某些实施例中,操作系统280经由过滤器驱动程序来创建竖井专用目录,过滤器驱动程序能够通过注册回调来将其自身插入到操作的代码路径中。在本发明的某些实施例中,过滤器驱动程序包括文件系统的一部分。在本发明的某些实施例中,例如,在图2和2a中,操作系统280可监视诸如由竖井204中的进程208、216或217发起的请求240等文件系统访问请求并可执行特殊处理以使得在接收到使用文件ID的打开请求时,创建由该文件ID表示的文件的实际名称的列表。对于该列表中的每一个实际名称,操作系统确定其是否可能发出转换为给定实际名称的相对于竖井的名称。在本发明的某些实施例中,这通过确定竖井重定向前缀中的任一个是否匹配考虑中的实际名称的开头来完成。如果文件名可在该竖井中访问,则打开由该相对于竖井的名称指示的文件并检索所打开的文件的文件ID。如果该文件ID匹配原始文件ID,则使用该相对于竖井的名称来打开该文件。如果无法创建转换为给定实际名称的相对于竖井的名称,则打开请求失败。如果由该相对于竖井的名称指示的文件被打开但所打开的文件的文件ID不匹配原始文件ID,则检查该列表中的下一个名称。该过程继续直到该列表中没有更多的名称或直到找到匹配的文件ID。如果诸如竖井204中的进程208、216或217等进程请求一文件ID的实际文件名的列表,则过滤返回的列表以使得只有竖井分层结构中的文件被返回给进程。
图3是系统200的部分300的更详细的图示。在图3中,计算机110上的竖井204的命名空问206可表示文件系统命名空间。每一个命名空间可具有其自己的虚拟根。例如,每一个竖井(父竖井204、子竖井210)都可具有其自己的展示给竖井的每一个物理卷的文件系统的虚拟根(例如,竖井204的命名空间206中所示的虚拟根目录212可以是文件系统虚拟根目录)。类似地,每一个竖井(父竖井204、子竖井210)都可具有其自己的展示给竖井的每一个物理卷的进程标识符命名空间的虚拟根(例如,竖井204的命名空间206中所示的虚拟根目录212可以是进程标识符根),等等。竖井的虚拟根可具有或不具有与卷的对应的实际全局命名空间相同的节点或条目集,但通常不具有。虚拟根分层结构可包括回到实际命名空间的连结或链接。竖井中的进程(208a、208b等)因此可被给予物理卷上的全局命名空间的替换视图。
在本发明的某些实施例中,操作系统监视由在竖井中运行的进程做出的文件系统访问请求,并通过在表面上将两个或多个实际后台存储(文件目录)一起合并为对于竖井看上去是单个目录的样子来创建文件系统目录的竖井专用视图。即,两个或多个单独的文件系统目录可作为单个目录展示给竖井(以及在该竖井中运行的进程)。可使用这些实际后台存储中的一个或多个来为这些竖井中的一个或多个构建竖井专用视图的一部分。在本发明的某些实施例中,合并目录视图通过监视文件系统访问请求并响应于使用操作系统级过滤器驱动程序和回调处理来检测到特定类型的文件系统访问请求来执行特殊处理来创建。
图4是根据本发明的某些实施例的用于受限命名空间环境中的文件ID的反向映射的方法的流程图。操作系统(例如,图2、2a的OS 280)监视文件系统访问请求(诸如由在竖井204中运行的进程208、216或217做出的文件系统访问请求240)。在402,在接收使用文件ID的文件系统打开请求时,创建可能的实际名称的列表(404)。实际名称的列表由操作系统通过退出竖井视图,并经由标准OS机制来检索给定文件ID的所有可能的别名来创建。在406,检查可能的名称中的一个。在408,操作系统确定是否可能说出转换为实际名称的竖井名称。这通过查找给定竖井命名空间的“转换”信息并确定实际前缀中的任一个是否匹配所述实际名称的基础来完成。例如,假设在竖井中运行的进程试图通过说出文件ID 99来打开文件。在404,假设操作系统确定存在两者都引用由文件ID 99标识的文件的两个名称:“\Silos\0000\ProgramFiles\Microsoft Office”和“\Silos\0000\Program Files\MICROS~1”。在406,选择第一个名称“\Silos\0000\Program Files\Microsoft Office”。在408,操作系统确定实际名称是否可由竖井中的进程来生成。这通过查看当前命名空间中的连结点中的任一个是否是该名称的前缀来实现。因此,例如,假设竖井的路径“ProgramFiles”映射到“\Program Files”和“\Silos\0000\Program Files”,其中前者是公共只读位置,而后者是专用读写位置。因为连结点信息具有作为重定向位置的“\Silos\0000\Program Files”,并且因为这是所生成的可能的名称“\Silos\0000\Program Files\Microsoft Office”的前缀,所以存在候选名称,并且处理继续。如果不存在匹配,则检查该列表中的下一个可能的名称。因为找到匹配,所以在竖井视图中打开想象中映射到该文件的候选的相对于竖井的名称(竖井视图中的“\Program Files\Microsoft Office”),而不是打开实际文件“\Silos\0000\Program Files\Microsoft Office”。获取该文件的文件ID(410)。如果相对于竖井的文件“\Program Files\Microsoft Office”的文件ID与在402处接收到的文件ID(例如,99)相同,则将名称“\Silos\0000\Program Files\MicrosoftOffice”转换回到相对于竖井的名称(在该示例中,这将会是ProgramFiles\Microsoft Office)。这通过用对应的竖井前缀替换以上用于匹配的前缀来完成(414),即,在该示例中,“\Silos\0000\Program Files\Microsoft Office”被替换为“Program Files\Microsoft Office”。如果可能的候选名称中没有一个具有相对于竖井的等价物(412),则请求失败(416)。
图5是根据本发明的某些实施例的用于过滤返回给使用文件ID来访问文件的进程的结果的方法的流程图。在502,竖井中的进程获取文件ID。在504,进程可请求引用由文件ID标识的文件的可能的名称列表。在506,过滤返回的结果以使得只返回在竖井中可见的名称。
此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,本发明的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用本发明的域专用编程模型的创建和/或实现的各方面的一个或多个程序较佳地用高级过程语言或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要,程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译的或解释的语言,且与硬件实现相结合。
尽管结合各附图的优选实施例描述了本发明,但是可以理解,可以使用其它类似的实施例,或可以对所述实施例进行修改或添加来执行本发明的相同功能而不背离本发明。因此,本发明不应限于任何单个实施例,而是应该根据所附权利要求书的广度和范围来解释。