受限命名空间环境中的反向名称映射的制作方法

文档序号:6456399阅读:142来源:国知局
专利名称:受限命名空间环境中的反向名称映射的制作方法
受限命名空间环境中的反向名称映射
祖旦 冃尔
文件系统是一种在存储上(例如,在盘上)用于存储并组织计算机文件以 及这些文件所包含的数据的方法。大多数文件系统使用文件持久存储在其上的 底层非易失性数据存储设备。典型的存储设备提供对有时被称为扇区, 一般每
一个都是512字节的固定大小的块的阵列的访问。文件系统软件负责将这些扇 区组织成文件和目录。文件系统还跟踪哪些扇区属于哪个文件以及哪些扇区未 被使用。传统文件系统提供打开、创建、移动和删除文件和目录两者的功能。 文件系统通常具有将文件名与盘上存储文件内容的位置相关联的数据结 构。通常这通过将文件名连接到诸如MS-DOS文件系统中的FAT或类似UNIX 文件系统中的inode等某种文件分配表的索引来完成。文件系统目录可以是平 面的或可允许分层结构。在分层目录中,每一个目录都可包括一个或多个子目 录。在某些文件系统中,文件名是结构化的,且对于文件名扩展和版本号具有 特殊句法。在其他文件系统中,文件名是简单的字符串,且每个文件的元数据 都被存储在别处。
在许多文件系统中,文件可通过不止一个标识符来访问。例如,某些较老 的操作系统(以及由此较老的应用程序)只支持8.3文件名。较新的操作系统 可继续支持8.3文件名。例如,在某些较老的微软操作系统中,"Documents and Settings"文件夹可通过使用诸如"DOCUME l" (8.3文件名)等名称来访问, 而较新的系统可或者使用"Documents and Settings"或者使用"DOCUME l"来 访问该文件夹。"DOCUME l"引用是至U"Documents and Settings"文件夹的硬链 接,这意味着"DOCUME l"是单独的文件系统实体,并指向与"Documentsand Setting"硬链接相同的物理位置。同一个文件可经由任一名称来访问。此外,同 一个文件可能能够使用其文件标识符即文件ID (在微软操作系统中是经常被 称为文件ID的数值)来打开。文件ID是别名,因为它不是单独的文件系统实 体,而是访问文件夹的物理位置的另一种方式。
在大多数当前商用操作系统中,应用程序与在机器上运行的其他应用程序共享文件系统命名空间。应用程序对文件的访问由将访问控制列表(ACL)附 加到每一个命名的文件的安全机制来仲裁。ACL将用户与对该特定资源的一组 访问权限相关。例如,对于特定资源的ACL可指定用户1被允许对文件1进 行读写访问而用户2被允许对文件1进行只读访问。因为对基于ACL的许可 控制的广泛使用,所以多个应用程序经常被允许共享文件。对文件的访问基于 与运行应用程序或进程的人的身份相关联的特权而不是基于应用程序自身的 需求和特性。该方法可能有问题。例如,用户可能具有宽泛的访问特权(例如, 管理员状态),因为他运行的某些程序需要该访问级别。例如,因为由用户1 运行的程序1需要访问文件一到十,所以用户1的访问特权必须准许他访问文 件一到十。假设程序2只需要访问文件一和二。在用户l运行程序2时,程序 2将仍然可访问文件一到十,因为用户1的特权允许对文件一到十的访问。因 此,因为一般而言文件系统操作是以基于ACL的许可控制为基础的,所以文 件相同命名空间可以是并且一般是对于在机器上运行的由用户l启动的所有进 程而言或多或少是全局的。基于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表示的文件的所有可能的"名称"的 列表。例如,假设一个可能的名称是VXW^W。竖井过滤机制现在将试图査明 是否存在可在该竖井中说出的将转换为VXW^氾的名称。让我们也假设,例 如,该竖井命名空间具有将相对于竖井的名称XA转换为实际名称V^YXZ的规 则。因为该竖井中所说出的具有前缀XA的名称将转换为具有前缀V^YAZ的实 际名称,所以存在在竖井中说出将产生给定实际名称的名称的方式。过滤机制 现在将使用相对于竖井的名称"'V^B"来打开候选文件并检索其文件ID。这是 重要的,因为在合并目录情况下存在可被映射到相对于竖井的名称'V^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可以立 即访问和/或目前正在其上操作的数据和/或程序模块。作为示例而非局限,图 l示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存 储介质。仅作为示例,图l示出了对不可移动、非易失性磁介质进行读写的硬 盘驱动器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通信。然而,GPU184仅是协处理器的一个示例,且因此计 算机110中可包括各种协处理设备。监视器191或其它类型的显示设备也通过 接口,如视频接口 190连接至系统总线121,而视频接口 190又与视频存储器 186通信。除监视器191之外,计算机也可包括其它外围输出设备,如扬声器 197和打印机196,它们通过输出外围接口 195连接。
计算机110可使用至一个或多个远程计算机,如远程计算机180的逻辑连 接在网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、 网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相 对于计算机IIO所描述的元件,尽管在图1中仅示出了存储器存储设备181。 图1中所示的逻辑连接包括局域网(LAN) 171和广域网(WAN) 173,但也 可以包括其它网络。这样的联网环境在办公室、企业范围计算机网络、内联网 和因特网中是常见的。当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连 接至LAN171。当在WAN联网环境中使用时,计算机110通常包括调制解调 器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器 172可以是内置或外置的,它可以通过用户输入接口 160或其它适当的机制连 接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或 其部分可被储存在远程存储器存储设备中。作为示例而非局限,图l示出远程 应用程序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目录),其对于计算机系统中的所有竖井而言可以是 相同的或不相同的,并且可以与实际后台目录相同或不相同。在本发明的某些 实施例中,在系统中的所有竖井中运行的所有应用程序或进程共享竖井的合并 目录的单个可共享部分,其可能存在或不存在于竖井在其上运行的特定计算机 上。此外,作为合并目录的可共享或不可共享部分的"后台"的实际目录可存 在于诸如可移动盘、CDROM、 USB钥匙等可移动介质上。类似地,实际后台 目录可驻留在远程系统上。对于合并目录的专用或不可共享部分及其后台存储 而言亦是如此。
每一个构成(后台存储)目录都可以与一排名相关联(例如,在图2a中, 专用(后台存储)目录216与排名230相关联、公共WINDOWS (后台存储) 目录214与排名218相关联)。在某些实施例中排名在需要时用作平局打破器 (tiebreaker)。例如,如果请求目录文件访问(例如,打开、枚举、删除等), 并且所指示的文件存在于两个同名目录中,则可使用构成目录的排名来确定向 请求者展示哪个文件,S卩,向请求者展示具有最高排名的目录中的文件。类似 地,如果给定名称是一个构成目录中的文件并且相同的名称是另一构成目录中 的子目录,则在某些实施例中向请求者展示具有最高排名的目录中的条目。在 本发明的某些实施例中,给予专用目录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的OS280)监视文件系 统访问请求(诸如由在竖井204中运行的进程208、 216或217做出的文件系 统访问请求240)。在402,在接收使用文件ID的文件系统打开请求时,创建 可能的实际名称的列表(404)。实际名称的列表由操作系统通过退出竖井视 图,并经由标准OS机制来检索给定文件ID的所有可能的别名来创建。在406, 检查可能的名称中的一个。在408,操作系统确定是否可能说出转换为实际名 称的竖井名称。这通过査找给定竖井命名空间的"转换"信息并确定实际前缀中 的任一个是否匹配所述实际名称的基础来完成。例如,假设在竖井中运行的进 程试图通过说出文件ID 99来打开文件。在404,假设操作系统确定存在两者 都引用由文件ID 99标识的文件的两个名称"\Silos\0000\Program Files\Microsoft Office,^P"\Silos\0000\Program Files\MICROS l"。在406,选择 第一个名称'、SilosW00(^ProgramFiles、MicrosoftOffice"。在408,操作系统确定 实际名称是否可由竖井中的进程来生成。这通过查看当前命名空间中的连结点 中的任一个是否是该名称的前缀来实现。因此,例如,假设竖井的路径"Program Files"映射到'、Program FileslP"\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、000(AProgramFiles、Microsoft Office"转换回到相对于竖井的名称(在该示例中,这将会是Program Files\Microsoft Office)。这通过用对应的竖井前缀替换以上用于匹配的前缀来完成(414),艮P,在该示例中,"\Silos\0000\Program Files\Microsoft Office"被 替换为"Program Files\Microsoft Office"。如果可能的候选名称中没有一个具有 相对于竖井的等价物(412),则请求失败(416)。
图5是根据本发明的某些实施例的用于过滤返回给使用文件ID来访问文 件的进程的结果的方法的流程图。在502,竖井中的进程获取文件ID。在504, 进程可请求引用由文件ID标识的文件的可能的名称列表。在506,过滤返回 的结果以使得只返回在竖井中可见的名称。
此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由 此,本发明的方法和装置或其特定方面或部分可采取包含在诸如软盘、 CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码 (即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执 行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行 的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失 性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输 出设备。可例如通过使用数据处理API等来利用本发明的域专用编程模型的创 建和/或实现的各方面的一个或多个程序较佳地用高级过程语言或面向对象的 编程语言来实现以与计算机系统通信。然而,如果需要,程序可以用汇编语言 或机器语言来实现。在任何情形中,语言可以是编译的或解释的语言,且与硬 件实现相结合。
尽管结合各附图的优选实施例描述了本发明,但是可以理解,可以使用其 它类似的实施例,或可以对所述实施例进行修改或添加来执行本发明的相同功 能而不背离本发明。因此,本发明不应限于任何单个实施例,而是应该根据所 附权利要求书的广度和范围来解释。
权利要求
1. 一种用于限制对资源的访问的系统,包括适用于为系统处理环境(201)服务的操作系统模块(280),所述系统处理环境(201)与所述系统处理环境(201)中的包括表示文件或目录的多个节点的实际文件系统(254)和包括竖井(204)的受限环境相关联,所述竖井(204)与所述实际文件系统的竖井专用视图(264)相关联,所述视图限制在所述竖井中执行的进程(208)对所述实际文件系统的元素的访问,其中所述操作系统模块(280)适用于将在所述竖井(204)中执行的进程(208)的访问限于仅在所述竖井专用视图(264)中可见的元素,其中所述实际文件系统的元素经由数字文件标识符来标识。
2. 如权利要求1所述的系统,其特征在于,还包括将其自身插入到文件访 问请求的代码路径中以使得执行竖井专用处理的过滤器驱动程序。
3. 如权利要求1所述的系统,其特征在于,所述操作系统模块监视文件系 统访问请求并且响应于检测到使用数字文件标识符的打开请求,生成包括由所 述文件标识符标识的元素的至少一个实际名称的列表。
4. 如权利要求3所述的系统,其特征在于,所述操作系统模块确定转换为 所述至少一个实际名称的相对于竖井的名称是否可由在所述竖井中运行的进 程来生成。
5. 如权利要求4所述的系统,其特征在于,响应于确定可生成所述相对于 竖井的名称,确定由所述相对于竖井的名称标识的元素的数字文件标识符。
6. 如权利要求5所述的系统,其特征在于,响应于确定由所述相对于竖井 的名称标识的元素的数字文件标识符与所述打开请求的文件标识符相同,使用 所述相对于竖井的名称来打开所述打开请求中所标识的元素。
7. —种限制对文件系统的元素的访问的方法,包括 确定由数字文件标识符标识的元素对于在包括竖井的受限执行环境中执行的进程是否可见,其中所述进程只可访问在实际文件系统的分层竖井专用视图中可见的元素(402-414)。
8. 如权利要求7所述的方法,其特征在于,确定所述由数字文件标识符标 识的元素对于所述进程是否可见包括接收文件访问请求,所述文件访问请求标识将使用数字文件标识符来打 开的元素。
9. 如权利要求8所述的方法,其特征在于,还包括通过退出竖井视图并检 索所述由数字文件标识符标识的元素的别名列表来创建由所述数字文件标识 符标识的、将要打开的元素的实际名称的列表。
10. 如权利要求9所述的方法,其特征在于,还包括检査所述别名列表 中的名称并确定转换为所检査的名称的相对于竖井的名称是否可在所述竖井 中生成。
11. 如权利要求10所述的方法,其特征在于,还包括确定所述转换为 所检查的名称的相对于竖井的名称是否可通过检查所述竖井的转换信息并确 定用于转换的实际前缀是否匹配所述元素的实际名称的一部分来生成。
12. 如权利要求11所述的方法,其特征在于,还包括响应于确定所述 相对于竖井的名称可在所述竖井中生成,使用所生成的相对于竖井的名称来打 开所述元素。
13. 如权利要求12所述的方法,其特征在于,还包括检索使用所生成 的相对于竖井的名称来打开的元素的数字文件标识符。
14. 如权利要求13所述的方法,其特征在于,还包括将所检索到的、 所述使用所生成的相对于竖井的名称来打开的元素的数字文件标识符与所述 文件访问请求的数字文件标识符进行比较。
15. 如权利要求14所述的方法,其特征在于,还包括响应于确定所检 索到的、所述使用所生成的相对于竖井的名称来打开的元素的数字文件标识符 与所述文件访问请求的数字文件标识符相同,使用所述相对于竖井的名称来打 开所述元素。
16. 如权利要求14所述的方法,其特征在于,还包括响应于确定所检 索到的、所述使用所生成的相对于竖井的名称来打开的元素的数字文件标识符 与所述文件访问请求的数字文件标识符不相同,拒绝对所述元素的访问。
17. 如权利要求11所述的方法,其特征在于,还包括响应于确定没有 转换为所述别名列表中的任一个的相对于竖井的名称,拒绝对所述元素的访 问。
18. —种包括用于执行以下步骤的计算机可执行指令的计算机可读介质,所述步骤包括通过创建实际文件系统分层结构的竖井专用视图来限制对于在包括竖 井的受限执行环境中运行的进程可用的文件集,其中所述视图通过将访问限于 仅在所述竖井专用视图中可见的所述实际文件系统的元素来限制使用数字文件标识符对所述实际文件系统中的元素的访问(402-414)。
19. 如权利要求18所述的计算机可读介质,其特征在于,包括用于确 定由所述数字文件标识符标识的元素的可能的名称列表的其他计算机可执行 指令。
20. 如权利要求19所述的计算机可读介质,其特征在于,包括用于过滤所述元素的可能的名称列表以使得只有在所述竖井专用视图中可见的元素 被返回给所述进程的其他计算机可执行指令。
全文摘要
将文件系统的竖井专用视图提供给在该竖井中运行的进程。进程只可通过说出相对于竖井的名称来访问文件。为了确定是否应准许对由文件ID标识的文件的访问,构造由该文件ID标识的文件的实际名称的列表。如果可说出转换为列表中的名称的相对于竖井的名称,则打开文件并检索所打开的文件的文件ID。如果文件ID匹配,则使用该相对于竖井的名称来打开该文件。如果在竖井中运行的进程请求已使用文件ID打开的文件的名称列表,则过滤返回的结果以使得只返回在竖井中可见的名称,由此将进程对文件的访问限制为其分层命名空间中的文件。
文档编号G06F12/06GK101535966SQ200780041009
公开日2009年9月16日 申请日期2007年10月19日 优先权日2006年11月2日
发明者F·J·史密斯, J·L·海文斯, M·泰鲁利, Y·A·哈利迪 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1