具体实施方式
概述
这里讨论了隔离应用的被代理项目访问。代理器模块位于隔离应用与一个或多个项目源(例如,文件系统、设备、另一应用)之间。为了从项目源访问项目,隔离应用通过调用代理器模块的应用编程接口(API)来请求访问项目。如果允许隔离应用访问所请求项目,则代理器模块访问所请求项目并且将作为所请求项目的代表的对象返回给该隔离应用。如果不允许隔离应用访问所请求项目,则代理器拒绝访问所请求项目并且不将作为所请求项目的代表的对象返回给该隔离应用。以下以附加细节讨论代理器模块和API。
在以下讨论中,首先描述了可操作来执行这里所描述的技术的示例系统。然后描述示例过程,该示例过程可在所述示例系统和其他系统中操作。同样,示例系统不限于该示例过程的执行。
示例系统
图1图示出实施了这里讨论的隔离应用技术的被代理项目访问的示例系统100。所图示系统100包括可以按照多种方式来配置的计算设备102。例如,计算设备102可以被配置为能够在网络104上进行通信的计算机,比如桌面型计算机、平板或笔记本计算机、移动站、娱乐器械、在通信上耦合至显示设备的机顶盒、电视或其他显示设备、蜂窝或其他无线电话、游戏控制台、等等。
计算设备102的范围可以从具有丰富的存储器和处理器资源的全资源设备(例如,个人计算机、游戏控制台)到具有有限存储器和/或处理资源的短缺资源设备(例如,传统机顶盒、手持式游戏控制台)。附加地,虽然示出了单个计算设备102,但是计算设备102可以代表多个不同设备,比如,由企业用来执行操作的多个服务器、遥控器和机顶盒组合、图像捕获设备(例如,照相机)和被配置来捕获手势的游戏控制台、等等。
计算设备102还可以包括使得计算设备102的硬件执行操作(例如,配置处理器、功能块等)的实体(例如,软件)。例如,计算设备102可以包括计算机可读介质,该计算机可读介质可以被配置来保持使得计算设备更具体地计算设备102的硬件执行操作的指令。因此,所述指令用于配置执行操作的硬件,并且按照这种方式导致所述执行操作的硬件的变换。可以由计算机可读介质通过多种不同配置向计算设备102提供指令。
一种这样的计算机可读介质配置是信号承载介质,因此被配置为比如经由网络104向计算设备102的硬件传送指令(例如,像载波一样)。计算机可读介质还可以被配置为计算机可读存储介质,因此其不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘(例如,DVD或CD),闪存、硬盘存储器和可以使用磁、光学和其他技术来存储指令和其他数据的其他存储器设备。
网络104可以采取多种不同配置。例如,网络104可以包括因特网、广域网(WAN)、局域网(LAN)、个域网(PAN)、无线网络、公共电话网络、内联网、其组合等等。此外,虽然示出了单个网络104,但是网络104可以被配置成包括多个网络。
计算设备102被图示为包括项目管理模块106。项目管理模块106代表用于管理对一个或多个项目源108和/或110的访问的功能。可以以多种方式实施项目管理模块106,比如,实施成独立应用、计算设备102的操作系统的一部分等等。
项目源108采用用于组织并存储多种不同类型的项目112的技术。项目涉及应用可以请求的数据或内容。例如,项目可以是文件、文件夹或目录,统一资源标识符(URI)、统一资源定位符(URL)或其他链接、压缩文件或文件集合(例如,zip文件或机柜文件)、由另一应用保持的文件(或者由另一应用以不同方式保持的内容)等等。可以按照多种不同方式实施项目源108,以采用各种技术来组织并存储项目。例如,项目源108可以是计算设备102上的文件系统、计算设备102上的存储系统、运行在计算设备102上的另一应用(例如,其本身管理项目的组织和存储)、数据库等。类似地,可以以多种不同方式实施项目源110,以采用各种技术组织和存储计算设备102能够经由网络104访问的项目114。项目源110可以例如是,(例如,使用以与计算设备102相同和/或不同的方式配置的一个或多个计算设备来实施的)服务提供者、服务提供者的文件系统、服务提供者的存储系统、在服务提供者上运行的另一个应用、媒体服务器等等。
应用116是在计算设备102上运行的一个或多个程序、脚本、或其他指令集合。应用116可以采取多种不同配置,比如,娱乐应用(例如,游戏或音频/视频播放器)、实用应用(例如,word处理器或Web浏览器)、参考应用(例如,词典或百科全书)等。由于应用116以以下方式执行,应用116称作隔离应用,其执行的方式是,应用116访问计算设备102的资源(例如,联网计算机、因特网、模块、设备、存储器、其他应用)的能力受限。计算设备102的操作系统(和/或其他软件、固件和/或硬件)允许应用116访问已经被分配给应用116或者以其他方式使得其可用于应用116的计算设备102的存储器和其他资源,但是阻止应用116访问计算设备102的其他存储器、计算设备102的资源、和/或在计算设备102上运行的应用。这保护在计算设备上运行的其他应用免于受到应用116的干扰,也保护应用116免于受到在计算设备102上运行的其他应用的干扰,从而将应用116与在计算设备102上的其他应用隔离。作为隔离的一部分,计算设备102的操作系统(和/或其他软件、固件和/或硬件)还阻止应用116访问项目源108和/或项目源110,除了通过以下更详细讨论的项目管理模块106访问项目源108和/或项目源110之外。
在一个或多个实施例中,通过在沙盒中执行应用116来以受限的方式执行应用116。虽然在计算设备102中图示出单个应用116,但是应该注意的是,可以在计算设备102中并发地执行多个应用(每个应用在其自身的沙盒中执行)。
项目管理模块106还被图示为包括代理器模块120和挑选器模块122。代理器模块120代表项目管理模块106的用于管理应用116对项目源108和/或110的访问的功能。代理器模块120例如可以充当用于定位应用116所请求的项目112和/或114并往回向应用116提供所定位的项目112和/或114的中介。应用116可以通过代理器模块120访问项目112和/或114,但是由于其是隔离应用,其另外被限制访问项目源108和/或110(以及在这些项目源内的项目112和/或114)。此外,可以向应用116提供项目112和/或114,而应用116无需知道在哪里获得项目112和/或114,例如,应用116可以不知道项目源108和/或110所使用的命名空间。这允许应用以统一的方式对待来自各种项目源的项目,而不特定于每种项目源。
附加地,代理器模块120可以可选地采用挑选器模块122来提供用于访问项目源108和/或110的可替换方式。挑选器模块122提供一种信任方法,允许应用(例如,其没有经由代理器模块120有规划地访问项目源108和/或110)访问项目源108和/或110(以及在这些项目源内的项目112和/或114)。
一般而言,可以使用软件、固件、硬件(例如,固定逻辑电路)、人工处理或这些实现方式的组合来实现这里所描述的任何功能。这里所使用的术语“模块”和“功能”一般表示硬件、软件、固件或其组合。在软件实现方式的情况下,模块、功能或逻辑表示指令和硬件,其执行由诸如一个或多个处理器和/或功能块之类的硬件规定的操作。
图2图示出实施了这里讨论的隔离应用技术的被代理项目访问的示例系统200。可以由用于执行项目管理技术的图1的计算设备102的项目管理模块106来部分地实施所图示的系统200。例如,项目管理模块106可以被合并为操作系统的一部分、结合操作系统执行的应用、独立应用等。不论在哪里合并,项目管理模块106可以采用用于管理计算设备可本地和/或远程(例如,经由图1的网络104)访问的项目的技术。
所图示的系统200包括应用202(其可以例如是图1的应用116)、项目源(其可以例如是图1的项目源108或110)、以及项目206(其可以例如是图1的项目112或114)。在该示例中,应用202经由代理器模块120暴露给应用202的一个或多个应用编程接口(API)210与代理器模块120通信,以访问项目源204。虽然图2中图示出单个应用202和单个项目源204,但是应该注意的是,系统200可以包括访问任何数量的项目源204的任何数量的应用202。
应用202可以被授权访问特定项目源和/或特定项目位置。可以在不同时刻并且以不同方式执行该授权,但是典型地,在应用202请求访问项目206之前执行。在一个或多个实施例中,当下载应用202到实施系统200的计算设备中或者将应用202安装到实施系统200的计算设备上时,执行该授权。例如,作为下载或安装处理的一部分,可以向用户告知应用202希望访问的特定项目源和/或特定项目位置,并且用户可以提供关于应用202是否被授权访问那些特定项目源和/或特定项目位置的输入(例如,用户界面(UI)的特定按钮或其他部分的选择)。可替换地,可以在其他时刻执行该授权,比如,当修改或更新应用202时,在系统200的用户后来配置应用202期间,等等。不论如何执行,系统200保持授权存储单元208,该授权存储单元208包括应用202被授权访问的那些项目源和/或项目位置的记录。授权存储单元208可由代理器模块120访问,以允许代理器模块120获得并使用应用202被授权访问的那些项目源和/或项目位置的记录。
应用202可以被授权访问代理器模块120所支持的多种不同项目源204中的任何一种。例如,应用202可以被授权访问的项目源可以是文件系统、在计算设备上运行的一个或多个特定应用、由服务提供者实现的一个或多个特定存储系统、等等。
应用202还可以被授权访问多种不同项目位置中的任何一种。可以为不同项目源定义不同类型的项目位置。例如,对于作为文件系统的项目源,项目位置可以被定义为文件夹或库(例如,文档库、音乐库、视频库、图片库)。库指的是一个或多个位置的集合(例如,一个或多个设备上的文件夹或目录),可选地,系统200的用户可以修改库中包括的位置。作为另一示例,对于作为应用的项目源,项目位置可以是由应用定义的分组或其他项目集合。
代理器模块120包括项目访问模块212,项目访问模块212代表代理器模块120的用于对来自应用202的访问项目的请求作出响应的功能。API 210 支持能够被应用202调用的用于各种不同类型的项目访问的各种接口。例如,API 210包括这样的接口,其允许读取项目、写项目、创建项目、删除项目、修改项目、复制项目、移动项目、重命名项目、获取项目属性等等。相同接口可以用于不同项目源,从应用202抽象出项目源。例如,被调用来获取或列举项目的API可以应用于代理器模块120所支持的多个项目源、代理器模块120所支持的应用202被授权访问的项目源、等等。作为另一示例,在调用API来写或重命名项目时,应用202无需指定项目源(例如,如以下更详细讨论的,可以在存储项目对象中标识出项目源或者项目源可以是存储项目对象所固有的)。
可替换地,可以包括接口参数,该参数标识出用于请求的特定项目源。例如,API 210可以包括用于文件系统源和服务提供者存储系统源二者的读取项目接口,其中,读取项目接口的参数指示应用202请求这两个源中的哪个来读取项目。在其他可替换方式中,不同接口可以用于不同项目源。例如,API 210可以包括用于从文件系统源读取项目的文件系统读取项目接口,以及用于从服务提供者存储系统源读取项目的服务提供者读取项目接口。
应用202调用一个或多个API 210,以请求访问项目源(例如,所存储的)的一个或多个项目。在接收到该请求时,项目访问模块212检查应用202被授权访问的项目源和/或项目位置的记录,并且基于该记录确定应用202是否被授权访问所请求的项目或多个项目。如果应用202未被授权访问所请求的一个或多个项目中的任何一个(应用未被授权访问所述一个或多个项目中的任何一个),则项目访问模块212不准予所请求的访问。例如,如果应用202请求访问图片库中的文件,但是被授权访问仅仅音乐库中的文件,则项目访问模块212不准予所请求的访问。可选地,项目访问模块212可以返回拒绝所请求的访问的指示(例如,是与应用202调用来请求访问所述一个或多个项目的API 210相关联的结果值)。
然而,如果应用202被授权访问所请求的一个或多个项目中的一些,则项目访问模块212获得并允许访问所述一个或多个项目中应用202被授权访问的那些项目。代理器模块120获得所请求的一个或多个项目的方式可以基于特定项目源108而改变,并且代理器模块120配置有(或者可以获得)如何访问项目源108的指示。项目访问模块212生成代表应用202被授权访问的每个项目的存储项目对象。该存储项目对象包括与该项目相关联的各种信息,可选地,包括项目的数据和/或内容。项目访问模块212向应用202返回该生成的存储项目对象。
可替换地,不使用先前接收的对访问项目或多个项目的授权,代理器模块120而是可以采用挑选器模块122来获得对应用202所请求的一个或多个项目的访问。在接收到访问一个或多个项目的请求时,代理器模块120可以实施挑选器模块122来生成用户界面,该用户界面发动挑选器UI模块220。挑选器UI模块220呈现UI来就用户是否授权访问所述一个或多个项目询问用户,允许用户导航或以其他方式定位所述一个或多个项目等。可以接收用户输入,以指示用户是否授权应用202访问所述一个或多个项目。如果用户授权应用202访问所述一个或多个项目,则挑选器模块122获得所述一个或多个项目并且向项目访问模块212返回所获得的一个或多个项目,以生成存储项目对象表示112。可替换地,挑选器模块122没有获得所述一个或多个项目,挑选器模块122而是可以向项目访问模块212返回指示,以由模块212获得所述一个或多个,如上所讨论的。
项目访问模块212向应用202返回存储项目对象。存储项目对象代表项目。存储项目对象是项目的抽象或表示。通过代理器模块120和/或存储项目对象自身执行应用202对由存储项目对象代表的项目的访问(例如,读取、写、修改、等)。存储项目对象可以采取各种不同形式。在一个或多个实施例中,存储项目对象是由代理器模块120生成并且暴露给应用202的对象。代理器模块120通过向应用202提供存储项目对象的标识符或其他指示,来向应用202返回这样的存储项目对象。存储项目对象的各种方法或操作可以由应用202调用来获得与存储项目对象所代表的项目相关的信息和/或对存储项目对象所代表的项目执行各种操作。可替换地,存储项目对象可以是这样的数据结构,其可以包括与存储项目对象所代表的项目相关的各种信息,和/或可以由应用202调用来对存储项目对象执行各种操作的各种方法或操作。代理器模块120通过向应用202提供该数据结构来返回这样的存储项目对象。
在一个或多个实施例中,存储项目对象包括属性部分、缩略图部分、内容部分和操作部分。存储项目对象的属性部分包括项目的各种属性或性质。可以在存储项目对象的属性部分中包括项目的由项目源204保持的多种不同属性或性质中的任何一种。例如,存储项目对象的属性部分可以包括项目的名称、项目的尺寸(例如,以字节为单位的尺寸)、项目的类型(例如,图片类型、音乐类型等)等等。
存储项目对象的缩略图部分包括项目的视觉表示。该缩略图可以是图像或图像序列(例如,视频)。缩略图可以例如是,项目的一部分(例如,文档的一页或图片的一部分)、项目的缩小版本(例如,图片的较小版本)、代表项目类型的图标、等等。
存储项目对象的内容部分包括项目内容或者如何获得项目内容的指示。例如,如果项目是图片,则内容部分可以包括图片本身的数据、或者图片的数据被存储在哪里的链接(例如,统一资源定位符(URL)或路径)。项目可以是被流化到应用202的数据(例如,音乐文件或视频文件),以及如何获得项目内容的指示可以包括被流化的数据的指示(例如,链接)。内容部分还可以包括对项目的一些操作,比如用于读取项目和写项目的操作。
存储项目对象的操作部分包括可以对项目执行的一个或多个方法或操作。可以对项目执行各种不同操作,以提供对项目的各种不同访问。特定操作可以至少部分地基于项目的类型而改变。例如,操作可以包括重命名项目操作、删除项目操作、等等。对于是文件系统的文件夹的项目,操作还可以包括,列举文件夹中的文件、对文件夹中的文件分类、删除文件夹中的文件、向文件夹添加新文件、重命名文件夹或者文件夹中的文件、等等。
不论存储项目对象的形式是什么,可以对存储项目对象执行各种操作,并且存储项目对象包括项目内容或者如何获得项目内容的指示。因此,存储项目对象还可以被视为包括一个或多个项目。例如,用于文件夹的存储项目对象可以包括代表该文件夹内的文件的一个或多个项目。
尽管这里讨论了存储项目对象,但是应该注意的是,可以支持不同类型的存储项目对象。不同类型的存储项目对象可以包括与该类型的存储项目相关的不同属性、操作等。例如,可以使用存储文件对象和存储文件夹对象。存储文件对象包括特定于文件的属性和操作(例如,重命名文件操作),存储文件夹对象包括特定于文件夹的属性和操作(例如,列举文件夹中的文件的列举操作)。作为另一示例,可以使用设备对象和网络节点对象,其中设备对象包括特定于设备的属性和操作,并且网络节点对象包括特定于网络节点的属性和操作。
应用202可以保存返回给应用202的存储项目对象中的一个或多个。例如,应用202可以使用最近使用(MRU)列表,以允许容易标识出应用202最近使用的项目中的一个或多个。在一个或多个实施例中,代理器模块120管理存储项目对象的持久性存储。典型地,代理器模块120为每个隔离应用保持持久性访问列表,但是可选地,多个隔离应用可以共享持久性访问列表。持久性访问列表是持久性存储项目对象列表,并且应用202可以调用API 210来获取并使用在持久性访问列表中的持久性存储项目对象。当向持久性访问列表添加了持久性存储项目时,代理器模块120可以向应用202提供持久性存储项目对象的标记或其他标识符,并且应用202可以使用这样的标记或其他标识符,以便后来从持久性访问列表获取持久性存储项目对象。代理器模块120还可以为应用202保持多个持久性存储项目对象列表,比如MRU列表和分离的持久性访问列表(例如,允许应用202按照其所希望的那样保存存储项目对象,而与最近如何使用项目无关)。可选地,代理器模块120可以对不同列表实施不同寿命规则,其反映出在列表上保持存储项目对象的不同持续时间(和/或确定持续时间的不同方式)。
可以以多种不同方式标识出持久性存储项目对象,比如,通过设备标识符、操作系统(例如,NTFS)对象标识符、名称/时间戳匹配、其组合等等。因此,可以标识出持久性存储项目对象,即使已经重命名或移动了项目。附加地,可以跨应用202的多次执行而保存存储项目对象,以便在应用被终止(例如,被关闭或去激活)之后再次被执行时允许应用202获取并使用持久性存储项目对象。
可替换地,应用202可以管理存储项目对象的持久性存储,而不是代理器模块120。应用202可以将存储项目对象更确切地保存在不同位置中,比如保存在被分配给应用202或者以其他方式使其可用于应用202的存储器或其他存储位置中。因此,如果应用202在稍后再次希望项目,则应用202可以使用代表项目的持久性存储项目对象,而不用从代理器模块120重新请求项目。
可选地,代理器模块120包括过滤模块214,过滤模块214代表代理器模块120的用于过滤应用202所能够访问的项目的功能。如以上所讨论的,应用202被授权访问特定项目源和/或特定项目位置。过滤模块214允许进一步过滤访问请求,以阻止应用202访问特定项目位置,即使访问以其他方式被授权。在项目访问模块212返回所生成的代表那些项目的存储项目之前,过滤模块214过滤来自项目源204的项目。因此,代表被滤项目的存储项目未被返回给应用202,而不论应用202被授权访问的特定项目源和/或特定项目位置。
过滤模块214可以被配置成,例如基于代理器模块120的设计者和/或系统200的管理者的希望,来过滤特定项目位置。例如,过滤模块214可以过滤存储系统文件的特定文件夹或目录,从而阻止应用202访问那些特定文件夹或目录。作为另一示例,过滤模块214可以过滤特定文件类型,比如系统文件、隐藏文件等。
可选地,代理器模块120还包括布置模块216,布置模块216代表代理器模块120的用于按照特定顺序和/或特定分组布置项目的功能。应用202可以请求由代理器模块120返回的按照特定顺序和/或分组布置的项目。布置模块216在不同时刻按照所请求的顺序布置项目,比如,在项目访问模块212生成代表所请求的项目的存储项目对象之前将所访问的项目分类和/或分组,对由项目访问模块212生成的代表所请求项目的存储项目对象进行分类和/或分组,等等。
布置模块216可以支持多种不同排序,并且针对不同项目类型或项目位置,可以支持基于不同分类标准的不同排序。例如,可以基于关联日期(例如,图片被当作图片项目的日期、项目被存储在项目源204中的日期、歌曲被记录用于音乐项目的日期)来对项目排序(例如,按时间顺序增加或者按时间顺序减少)。作为另一示例,可以基于记录的艺术家(例如,针对音乐项目或视频项目的)、基于图册名称(例如,针对音乐项目或视频项目的)、基于流派(例如,针对音乐项目或视频项目的)等来对项目(例如,按照字母顺序)排序。布置模块216可以支持应用202可以从其选择的特定排序集合。可替换地,布置模块216可以支持基于项目源204所支持的项目的任何元数据的分类标准。因此,与项目相关联的任何属性、性质或其他元数据可以被应用202标识为用于排序的分类标准。
类似地,布置模块216可以支持多种不同分组,并且针对不同项目类型或项目位置,可以支持基于不同分组标准的不同分组。例如,可以用项目类型对项目分组(例如,音乐项目聚集在一起,文档项目聚集在一起)。作为另一示例,可以基于记录的艺术家(例如,针对音乐项目或视频项目的)、基于图册名称(例如,针对音乐项目或视频项目的)、基于流派(例如,针对音乐项目或视频项目的)等来对项目分组。分组可以是容器存储项目对象集合,每个容器存储项目对象包括一个或多个存储项目对象,并且可以被列举以提供匹配特定条件的存储项目对象。布置模块216可以支持应用202可以从其选择的特定分组集合。可替换地,布置模块216可以支持基于项目源204所支持的项目的任何元数据的分组标准。因此,与项目相关联的任何属性、性质或其他元数据可以被应用202标识为用于分组的分组标准。
在特定分组内,可以使用以上讨论的各种分类标准对项目分类,或者可替换地,不需要对项目分类。此外,应用202可以请求搜索特定分组的存储项目对象,以提供类似于关于搜索模块218的以下讨论的多种不同搜索标准。
可选地,代理器模块120还包括搜索模块218,搜索模块218代表代理器模块120的用于搜索特定项目的功能。应用202可以请求代理器模块120返回满足特定搜索标准的项目。搜索模块218为了满足(例如,匹配)搜索标准的项目而搜索项目源204,并且满足搜索标准的那些项目被返回给应用202。典型地,搜索模块218搜索项目源204中的项目,以在项目访问模块212生成代表所请求的项目的满足了搜索标准的存储项目对象之前标识出满足搜索标准的项目。可替换地,搜索模块218可以搜索所生成的存储项目对象以标识出满足搜索标准的存储项目对象,并且仅仅满足搜索标准的所生成的存储项目对象被向返回给应用202。
搜索模块218可以支持多种不同搜索标准。例如,搜索标准可以是特定项目类型(例如,音乐文件),并且该特定项目类型的任何项目都满足该搜索标准,或者该搜索标准可以是名称,并且具有该特定名称(例如,文件名)的任何项目都满足该搜索标准。附加地,搜索模块218可以支持更复杂的搜索标准,比如,使用日期范围、通配符值(例如,指示任何单个字符的问题标签或者指示任何零或更多个字符的星号)、AQS或高级查询语法(关于高级查询语法的附加信息可从Microsoft? Corporation of Redmond, Washington获得)等等。还应该注意的是,虽然应用202可以提供搜索标准,但是应用202仍然能够只访问应用202被授权访问的那些项目(例如,如上所讨论的,基于在授权存储单元208中保持的记录)。
附加地,代理器模块120被论述为,如果应用202被授权访问项目或多个项目,则允许应用202访问所述项目或多个项目。可选地,代理器模块120可以将应用202视为被自动授权访问一个或多个项目位置,而无需指示这样的授权的任何特定用户输入。这样的位置的示例是所有隔离应用都被允许写入数据的下载文件夹。可选地,代理器模块120可以将应用202限制到特定类型的访问,除非应用202被授权(如上所讨论的)访问那些一个或多个项目位置。例如,可以自动授权应用202将文件写入下载文件夹,但是仅当计算设备的用户已经授权应用202从下载文件夹读取文件时,才允许应用202从下载文件夹读取文件。
这里讨论的隔离应用的被代理项目访问支持各种使用场景。例如,相片编辑应用可以运行,以经由代理器模块访问文件。当在计算设备上安装了相片编辑应用时,用户可以授权相片编辑应用访问图片库中的文件,而没有其他位置中的文件。在操作期间,相片编辑应用可以从代理器模块请求各种文件,但是代理器模块拒绝对除了来自图片库的文件之外的任何文件的请求。因此,相片编辑应用被禁止访问除了图片库之外的任何位置中存储的任何文件。
图3根据一个或多个实施例以附加细节图示出隔离应用的被代理项目访问的数据流300。将参照图2的系统200的元件讨论数据流300。应用202通过调用代理器模块120的一个或多个API向代理器模块120提交访问请求302。访问请求302是对项目源204的特定类型的访问的请求。
代理器模块120向项目源204提交一个或多个访问请求304,以获得访问请求302所请求的项目。代理器模块120可以根据实施项目源204的方式来按照各种方式提交一个或多个访问请求304,例如,通过调用项目源204的API,向项目源204发送消息或其他数据结构,等等。
从项目源204向代理器模块120返回一个或多个项目的项目信息306。项目信息306基于访问请求302描述了一个或多个项目。如上所讨论的,针对其返回项目信息306的项目可以包括特定项目源处的项目的信息,可以是被滤项目,等等。项目信息306包括描述了来自项目源204的一个或多个项目的信息。可以在项目信息306中包括能够包括在代表项目的存储项目对象中的任何信息。
代理器模块120基于项目信息306生成一个或多个存储项目对象308。代理器模块120生成在项目信息306中标识出的至少一个项目的存储项目对象308。可选地,代理器模块120可以过滤从项目信息306标识出的一个或多个项目,并且不生成被滤的一个或多个项目的存储项目对象308,如上所讨论的。可选地,代理器模块120还可以将存储项目对象308,或者在存储项目对象308中包括的信息布置成特定顺序或特定分组,如上所讨论的。
示例API
代理器模块向隔离应用暴露一个或多个API,所述一个或多个API支持能够被隔离应用调用用于各种不同类型的项目访问的各种接口。例如,代理器模块120暴露API 210,如上所讨论的。下表I-XI图示出代理器模块可以暴露的示例API。应该注意的是,这些API是示例,并且代理器模块可以不暴露所述API中的一个或多个,代理器模块可以暴露附加的API,和/或可以对代理器模块所暴露的这些API进行改变。
将API一起分组或集合到特定命名空间,表I-XI中的每一个包括特定命名空间的API。执行这样的分组的方式可以例如基于代理器模块的开发者的希望而改变。API的名称具有标识出特定命名空间的前序,在表I-XI中列出的API的名称包括该共同的前序(但是其未被列在表中)。例如,对于已知的文件夹命名空间,共同的前序可以是“Windows.Storage.KnownFolders.”相应地,“musicLibrary(音乐库)”API的名称包括该共同前序,因此,虽然其在下表IV中被列出为“musicLibrary”,但是却是“Windows.Storage.KnownFolders.musicLibrary.”
表I图示出针对存储项目对象的API,其也可以称作存储项目命名空间。存储项目命名空间的共同前序是“Windows.Storage.StorageItem.”针对存储项目命名空间的API允许隔离应用获得与由存储项目对象代表的项目相关的信息和/或对由存储项目对象代表的项目执行各种操作。
表I
表II图示出针对存储文件夹(或StorageFolder)存储项目对象的API,其也可以称作存储文件夹命名空间。存储文件夹命名空间的共同前序是“Windows.Storage.StorageFolder.”存储文件夹命名空间的API允许隔离应用获得与存储文件夹对象所代表的文件夹相关的信息和/或对存储文件夹对象所代表的文件夹执行各种操作。存储文件夹对象继承或包括以上参照表I讨论的存储项目对象的所有API。
表II
表III图示出针对存储文件(或StorageFile)存储项目对象的API,其也可以称作存储文件命名空间。存储文件命名空间的共同前序是“Windows.Storage.StorageFile.”存储文件命名空间的API允许隔离应用获得与存储文件对象所代表的文件相关的信息和/或对存储文件对象所代表的文件执行各种操作。存储文件对象继承或包括以上参照表I讨论的存储项目对象的所有API。
表III
表IV图示出针对已知文件夹命名空间的API,其涉及能够被隔离应用访问的文件系统项目源的文件夹或库集合。已知文件夹命名空间的共同前序是“Windows.Storage.KnownFolder.”针对已知文件夹命名空间的API允许隔离应用访问特定的预定义文件夹或目录集合。
表IV
表V图示出针对存储命名空间的API,其是允许隔离应用存储或获取特定文件或文件夹的接口集合。存储命名空间的共同前序是“Windows.Storage”。
表V
表VI图示出针对查询选项的API,其也可以称作查询选项命名空间。查询选项命名空间的共同前序是“Windows.Storage.Query Options.”针对查询选项命名空间的API允许隔离应用指定各种查询选项,以搜索由隔离应用提交的请求。
表VI
表VII 图示出针对查询命名空间的API,其是允许隔离应用提交针对项目的查询或搜索的接口集合。查询命名空间的共同前序是“Windows.Storage”。
表VII
表VIII图示出针对快速访问器命名空间的API,其是允许(例如,快速地,而不用指定AQS查询来)获取项目的接口集合。 API可以支持以不同方式获取项目,比如浅模式(例如,返回来自特定文件夹或目录的结果)、深模式(例如,返回来自特定文件夹或目录以及所有子文件夹或子目录的结果)、等等。快速访问器命名空间的共同前序“Windows.Storage.StorageFolder”。
表VIII
表IX图示出针对查询创建命名空间的API,其是允许隔离应用创建查询的接口集合。一旦被创建,这些查询可以由代理器模块保持,并且随后由创建该查询的隔离应用进行访问。查询创建命名空间的共同前序是“Windows.Storage.StorageFolder”。
表IX
表X图示出针对存储项目持久性命名空间的API,其是允许隔离应用保存存储项目对象的接口集合。可以跨隔离应用的多次执行而保存存储项目对象,如上所讨论的。存储项目持久性命名空间的共同前序是“StorageApplicationPermissions.futureAccessList”。
表X
表XI图示出针对最近使用(MRU)列表的API,其是允许隔离应用生成并保持最近使用项目列表的接口集合。 MRU列表是持久性存储项目对象的示例,其中,持久性访问列表是MRU列表。MRU列表命名空间的共同前序是“StorageApplicationPermissions.mostRecentlyUsedList”。
表XI
示例过程
以下讨论描述了可以使用前述系统和设备来实施的隔离应用技术的被代理项目访问。每个过程的各个方面可以以硬件、固件、软件或其组合来实现。所述过程被示为详细描述了由一个或多个设备执行的操作的一组动作,并且所述过程不必限于针对由各个动作执行操作而示出的顺序。在以下讨论的部分中,将参照图1、2和3的元件。
图4根据一个或多个实施例图示出实施了隔离应用的被代理项目访问的过程400。由诸如代理器理模块120之类的代理器模块来实施过程400。在过程400中,接收访问项目源的一个或多个项目的请求(动作402)。请求从计算设备中的隔离应用接收,并且典型地,是用于特定项目源的特定类型的访问的请求。如以上讨论的,可以通过隔离应用调用由代理器模块暴露的API,而接收请求。如上所讨论的,可以接收各种不同类型的请求,比如,读取项目请求、写项目请求、修改项目请求、搜索项目请求等。
如果有的话,检查所述一个或多个项目中隔离应用被授权访问哪些项目(动作404)。一个或多个项目中隔离应用被授权访问的那些项目可以是基于特定项目源和/或特定项目位置的,如上所讨论的。可以在不同时刻进行检查,比如当访问项目源(例如,文件夹、库、存储结构)的根节点时。
基于隔离应用是否未被授权访问所述一个或多个项目中的任何一个(动作406),过程400继续。如果隔离应用未被授权访问所述一个或多个项目中的任何一个(应用未被授权访问针对其请求访问的任何项目),则拒绝所述请求(动作408)。可选地,可以将拒绝请求的指示返回给隔离应用,如上所讨论的。
然而,如果隔离应用被授权访问所述一个或多个项目中的至少一个,则生成代表所述一个或多个项目中隔离应用被授权访问的那些项目的一个或多个存储项目对象(动作410)。每个存储项目对象包括与所述一个或多个存储项目相关联的各种信息,如上所讨论的。所述一个或多个项目中隔离应用被授权访问的那些项目可以排除来自项目源的被滤掉的特定项目,如上所讨论的。
将所述一个或多个生成的存储项目对象返回给隔离应用(动作412)。存储项目对象可以是提供给隔离应用的数据结构,或者暴露给隔离应用的对象,如上所讨论的。可选地,可以按照特定顺序或特定分组来布置存储项目对象,如以上所讨论的。
图5根据一个或多个实施例图示出实施了隔离应用的被代理项目访问的过程500。由诸如应用116或应用202之类的隔离应用来实施过程500。在过程500中,调用代理器模块的API以请求访问项目源的一个或多个项目(动作502)。典型地,该请求是用于特定项目源的特定类型的访问的请求。如上所讨论的,可以接收各种不同类型的请求,比如,读取项目请求、写项目请求、修改项目请求、搜索项目请求等。
从代理器模块接收包括所述一个或多个项目中所述隔离应用被授权访问的那些项目的至少一个存储项目对象(动作504)。可以在不同时刻检查所述一个或多个项目中隔离应用被授权访问哪些项目,比如,当访问项目源(例如,文件夹、库、存储结构)的根节点时。每个存储项目对象包括与项目相关联的各种信息,如上所讨论的。所述一个或多个项目中针对其的存储项目对象被接收的那些项目可以排除来自项目源的被滤掉的特定项目,如上所讨论的。存储项目对象可以是返回给隔离应用的数据结构,或者暴露给隔离应用的对象,如上所讨论的。附加地,可以可选地按照特定顺序来布置存储项目对象,如以上所讨论的。
结论
这里讨论了由各种模块执行的各种动作,比如,传送、接收、发送、存储、生成、获得等等。应该注意的是,各种模块可以使得这样的动作被执行。使得动作被执行的特定模块包括执行该动作的该特定模块本身,或者可替换地,调用或者以其他方式访问执行该动作(或者结合该特定模块执行该动作)的另一组件或模块的该特定模块。
尽管用特定于结构特征和/或方法动作的语言对本主题作了描述,但应理解,在所附权利要求中限定的主题未必局限于上述特定特征或动作。相反,上述特定特征和动作是作为实现权利要求的示例形式而公开的。