本申请要求对2003年10月23日提交的美国专利申请第10/691,999号,题为SYSTEM AND METHODS PROVIDING ENHANCED SECURITY MODEL(提供增强的安全模型的系统与方法)的优先权,其全部内容通过引用包括在此。
发明详细描述
本发明涉及促进驻留于(或相关于)分层数据库或存储结构(例如,分支到各个节点的分层树)的数据项目的安全性的系统与方法。在一方面,提供了一种具有与一个或多个数据项目相关联的分层数据结构的数据库安全系统。该系统包括一安全组件,它将一安全策略应用于来自与数据库相关联的全局位置或区域的数据项目。使用各种组件与过程来使显式和/或继承的安全属性能由数据项目接收,及传播到数据项目,取决于所遇到的或处理的数据结构的类型。通过在数据库全局、卷、或区域级关联安全策略和/或属性-与项目级相反,比常规系统减轻了数据库处理操作,常规数据库通常将个别安全文件与驻留在数据库中的各数据项目链接。
如同在本申请中所使用的,术语“组件”、“树”、“模型”、“系统”等等意指计算机相关的实体,或者是硬件、硬件与软件的组合、软件、或者是执行中的软件。例如,组件可以是,但不限于,运行于处理器上的进程、处理器、对象、可执行码、执行线程、程序和/或计算机。作为说明,在服务器上运行的应用程序及该服务器都可以是组件。一个或多个组件可驻留于在进程和/或执行线程内,且组件可位于一台计算机上和/或分布在两台或多台计算机上。
先参考图1,依照本发明的一个方面示出了数据库安全系统与模型100。系统100包括具有(多个)安全组件120的数据库110,这个(些)组件是从数据库内的全局或区域化的位置进行管理的(也可从数据库外的远程位置进行管理)。数据库120包括一个或多个分层结构130和140。诸如此类的分层结构可包括实际上任意类型的分层排列的数据项目(示为椭圆节点),诸如在130处的普通树状结构,或如一般被建模为有向非循环图(DAG)的包含行分层结构140的更精致的数据结构。尽管示出了树130与包含性分层结构140(也称作DAG),应当理解,本发明的安全模型可应用于实际上任何类型的分层数据结构。如将在下面详述的,使用各种过程与组件来管理从安全组件120到各分层结构130与140的安全策略。
在本发明的一个方面,安全组件120使安全政策能够以诸如来自映射到/自数据库110中的一个或多个安全区域150等更全局的方式来应用。这些策略可包括160处的显式定义的策略或属性,和/或170处可从与所涉及的数据结构类型相关联的路径或区域的各个部分继承的更广义的策略或属性。例如,如果期望的话,安全策略可以一种方式应用于树状结构130,并以一随后的方式应用于DAG。
如上面提到的,提供了各种组件与过程来使安全策略能自动与数据库项目相关联。这些组件定义一种安全模型,它根据所使用的数据结构的类型,将安全策略从安全组件120映射到分层结构130与140中的相应项目。例如,在一类结构中,包含性分层结构可包括出现在该分层结构中的各项目之间的各种持有关系。该持有关系可用于为相应的项目传播安全策略,其中该策略可包括显式部分160(例如,由系统管理员定义)和/或从父节点和/或与该项目相关联的其他组件接收的继承部分170。因而,可提供规则来使项目能依照该分层结构,沿从该分层结构的根节点到相应项目的路径的分支继承一安全策略。并且,如果遇到一更传统的树状结构,诸如在树的根节点到相应数据项目之间有一条路径的情形下,那么可应用安全策略的替换映射。
注意,数据库110和/或分层结构130/140可被建模为项目存储(例如,数据库中的存储区域)。指定与实施安全策略的粒度一般在给定存储中的项目上的各种操作级别。一般而言,安全组件120(或模型)指定一组主体(principal),它们可通过例如访问控制列表(ACL)被授予/拒绝访问,以对项目执行这些操作。相应的ACL通常是访问控制条目(ACE)的有序列表,这将在下面详细描述。
例如,对于一个项目的安全策略可用自由选择的访问控制策略及系统访问控制策略来描述,其中这些策略可被建模为一组ACL。第一组(自由选择的ACL-DACL)描述了由项目的所有者授予各主体的自由选择的访问权限,而第二组ACL被称作SACL(系统访问控制列表),它指定了当一对象被操纵时,如何完成系统监察。除了这些列表,项目存储中的项目一般与对应于项目所有者的安全标识符(SID)(所有者SID)相关联。
组织项目存储中的各项目的一个方面是诸如在140处所示的包含行分层结构。一般而言,包含性分层结构是经由各项目之间的持有关系来实现的。例如,两个项目A和B之间表达为“A包含B”的持有关系使项目A能影响项目B的生命周期。通常,项目存储中的项目在有了从另一项目到该项目的持有关系之前无法存在。此规则的一个例外是包含性分层结构的根节点。如上面所述,除了控制项目的生命周期外,持有关系还提供一用于为项目传播安全策略的组件。
为各项目指定的安全策略一般包括两个(或多个)部分-为该项目显示地指定的部分及从项目存储中该项目的父节点继承的部分。为项目显式地定义的安全策略还可包括两个(或多个)部分-支配对处于考虑中的项目的访问的部分,及影响由包含性分层结构或其他分层结构中其后代继承的安全策略的部分。由后代继承的安全策略一般是显式定义的策略与继承策略的函数。
现在参考图2,依照本发明的一个方面示出了访问控制列表200及排序组件210。如上所述,安全策略一般通过包含性分层结构中的持有关系来传播。因为安全策略是通过持有关系传播的,且能在项目处被覆盖,因此下文描述如何为项目确定有效的安全策略。例如,包含性分层结构中的项目沿从项目存储的根节点到该项目的路径继承一ACL。在对于给定路径的继承的ACL内,ACL 200中各个访问控制条目(ACE)的排序一般确定了要实施的最终安全策略。下面的表示法描述了经由排序组件210对ACL中ACE的排序。
由项目继承的ACL中的ACE的排序可由下面规则确定:
规则1
对于项目(I)上的继承的ACL(L)
对于项目I1、I2
对于L中的ACE A1和A2,
I1是I2的先辈,且
I2是I3的先辈,且
A1是从I1继承的ACE,且
A2是从I2继承的ACE
意味着
在L中A2优先于A1
上述规则将从包含性分层结构的根节点到该项目的路径中的各个项目继承的ACE分层。从较近的容器继承的ACE优先于从远距容器继承的条目。直观上,这允许管理员能覆盖从包含性分层结构较远的上方继承的ACE。
以下规则将拒绝对项目的的访问的ACE排序到授予对项目的访问的ACE之前。
规则2
对于项目(I)上的继承ACL(L)
对于项目I1
对于L中的ACE A1和A2,
I1是I2的祖先,且
A1是从I1继承的ACCESS_DENIED_ACE(拒绝访问ACE),且
A2是从I1继承的ACCESS_GRANTED_ACE(授予访问ACE)
意味着
在L中A1优先于A2
转向图3,系统300示出了根据本发明的一个方面的安全策略分发。系统300向树结构320和/或DAG 330部署一个或多个安全策略310。在包含性分层结构是树320的情况下,从树的根节点到项目有一条路径,因而该项目在340处有一继承的ACL。在这些情况下,按照其中ACE的相对排序,由项目继承的ACL与由现存安全模型中的文件(项目)继承的ACL匹配。然而,当包含性分层结构是有向非循环图(DAG)330时,对项目允许多个持有关系。在这些情况下,从包含性分层结构的根节点到项目有多条路径。由于项目沿与项目相关联的各路径继承ACL,因此在350处采用ACL集合,而非单个ACL。
注意,上述模型与文件系统模型不同,在文件模型中,恰好一个ACL与文件或文件夹相关联。因而对于传统接口,系统300能返回与通过其访问项目的特定路径相关联的ACL。然而,对于项目存储模型,可返回一组与该项目相关联的ACL。
当包含性分层结构是DAG 300而非树320时,通常有两个方面要详细阐述。在一方面,该模型提供了关于当项目从其父节点继承一个以上ACL时如何为其计算有效安全策略的描述,以及关于组织与表示项目如何影响对于项目存储的安全模型的管理的描述。
以下算法评估一给定主体对给定项目的访问权限。在进行该算法之前,以下表示法描述了与项目相关联的ACL。
Inherited_ACLs(ItemId)-由其项目身份为ItemId的项目从存储中其父项目继承的一组ACL。
Explicit_ACL(ItemId)-为其身份为ItemID的项目显式地定义的ACL。STATUSACLAccessCheck(PSID pOwnerSid,PDACL pDacl,DWORD DesiredAccess,HANDLE ClientToken,PPRIVILEGE_SET pPrivilegeSet,DWORD *pGrantedAccess)
如果期望的访问权限未被明确地拒绝,则上述例程返回STATUS_SUCCESS,且pGrantedAccess确定用户期望的权限中的哪些由该指定的ACL授予。如果期望访问权限被明确地拒绝,则该例程返回
STATUS_ACCESS_DENIED。
STATUS
ItemAccessCheck(
OS_ITEMID ItemId,
DWORD DesiredAccess,
HANDLE ClientToken,
PPRIVILEGE_SET pPrivilegeSet)
{
STATUS Status;
PDACL pExplicitACL=NULL;
PDACL pInheritedACLs=NULL;
DWORD NumberOfInheritedACLs=0;
pExplicitACL=GetExplicitACLForItem(ItemId);
<dp n="d8"/>
GetInheritedACLsForItem(ItemId,&pInheritedACLs,&NumberOflnheritedACLs)
Status=ACLAccessCheck(
pOwnerSid,
pExplicitACL,
DesiredAccess,
ClientToken,
pPrivilegeSet,
&GrantedAccess);
if(Status!=STATUS_SUCCESS)
return Status;
if(DesiredAccess=GrantedAccess)
return STATUS_SUCCESS;
for(
i=0;
(i<NumberOfInheritedACLs && Status=STATUS_SUCCESS);
i++){
GrantedAccessForACL=0;
Status=ACLAceessCheck(
pOwnerSid,
pExplicitACL,
DesiredAccess,
ClientToken,
pPrivilegeSet,
&GrantedAccessForACL);
if(Status=STATUS_SUCCESS){
GrantedAccess|=GrantedAccessForACL;
}
}
<dp n="d9"/>
If((Status=STATUS_SUCCESS)&&
(GrantedAccess!=DesiredAccess)){
Status=STATUS_ACCESS_DENIED;
}
return Status;
}
注意,在项目处定义的安全策略的影响范围覆盖在项目存储上定义的包含性分层结构中该项目的后代。对于定义了显式策略的项目,则效果类似于定义由包含性分层结构中其后代所继承的策略。由后代继承的有效ACL可通过取由该项目继承的ACL,并将显式ACL中可继承的ACE添加到该ACL的开头(除非设置了指定所传播的ACE将不被继承的标志)来获得。这被称作与该项目相关联的可继承ACL组。
当根节点在文件夹项目处的包含性分层结构中缺少安全性的显式指定时,文件夹的安全性指定一般应用于包含性分层结构中该项目的所有后代。因而,对其提供了显式安全策略指定的每一项目定义了类似地受保护的项目的区域,且对于该区域内的所有项目的有效ACL是该项目的可继承ACL组。在包含性分层结构是树的情况下,这将完整地定义区域。如果每个区域都要与一号码相关,那么仅将项目所属的区域随该项目一起包括在内就足够了。
对于是DAG的包含性分层结构,包含性分层结构中有效安全策略改变所处的点一般由两类项目确定:
已对其指定显式ACL的项目。通常,这些是包含性分层结构中管理员显式地指定ACL的点;以及
具有一个以上父节点,且各个父节点具有与其相关联的不同安全策略的项目。通常,这些是为项目卷指定的安全策略的汇合点的项目,并指示了一新安全策略的开始。
有了上面的定义,项目存储中的各项目一般落入两个类别之一-是类似地受保护的安全区域的根节点的那些项目,及不是该根节点的那些项目。未定义安全区域的项目一般属于一个安全区域。如在树的情况下,项目的有效安全性可通过指定项目所属的区域来指定。这导致一种用于基于项目存储中各个类似地受保护的区域来管理项目存储安全的直截了当的模型。
下面关于图4-6的讨论涉及可根据本发明使用的安全策略和/或安全性实现的更详细的描述。例如,尽管可描述详细的位映射,然而应当理解,本发明不限于所描述的特定实现(例如,其他位映射和/或实现是可能的)。
一般而言,安全描述符包括与一可保护对象相关联的安全信息。安全描述符包括一SECURITY_DESCRIPTOR(安全描述符)结构及其相关联的安全信息。安全描述符可包括下列安全信息:
对象的所有者及主要群组的SID。
指定对特定用户或用户组允许或拒绝的访问权限的DACL。
指定为对象生成监察记录的访问尝试的类型的SACL。
限定安全描述符或其个别成员含义的一组控制位。
应用程序不应直接操纵安全描述符的内容。可提供应用程序接口(API)函数用以设置及检索对象的安全描述符中的安全信息。此外,存在用于为新对象创建及初始化安全描述符的函数。
自由选择的访问控制列表(DACL)标识了被允许或拒绝访问可保护对象的受托者。当一进程企图访问一可保护对象时,系统核查该对象的DACL中的ACE,来确定是否对其授予访问权限。如果该对象没有DACL,则系统可授予完全访问权限。如果该对象的DACL没有ACE,则系统拒绝访问该对象的企图,因为该DACL不允许访问权限。系统依次核查ACE,直到找到允许所请求的访问权限的一个或多个ACE,或直到所请求的访问权限被拒绝。
系统访问控制列表(SACL)使管理员能将访问受保护对象的企图记入日志。ACE指定了一指定受托人的访问企图的类型,该访问企图使得系统在安全事件日志中生成一个记录。当访问企图失败、当它成功或两者,SACL中的ACE可生成监察记录。并且,当一未经授权的用户企图获得对一对象的访问权限时,SACL提出一个警报。一般而言,ACE包含下面的访问控制信息:
标识向其应用ACE的受托人的安全标识符(SID)。
指定由该ACE控制的访问权限的访问掩码。
指示该ACE的类型的标志。
确定子容器或对象能否从ACL所附的主要对象继承ACE的一组位标志。
下面的表格列出由可护对象所支持的可能的ACE类型。
类型 |
描述 |
访问拒绝ACE |
在DACL中使用,用以对受托人拒绝访问权限。 |
访问允许ACE |
在DACL中使用,用以向受托人允许访问权限。 |
系统监察ACE |
在SACL中使用,以当受托人企图行使指定的访问权限时,用于生成监察记录。 |
在一方面,可保护对象可经由在图4中的掩码400中所示的访问掩码格式(其他格式也可)来安排其访问权限。在此格式中,较低的16位用于对象专用访问权限,接下来的7位用于应用于大多数类型对象的标准访问权限,最高的4位用于指定对象类型可映射到一组标准和对象专用权限的类属访问权。一(AS位)ACCESS_SYSTEM_SECURITY(访问系统安全)位对应于访问该对象的SACL的权限。
类属权限在掩码400内的4个最高位中指定。一般而言,每一类可护对象将这些位映射到其一组标准和对象专用访问权限。例如,一类文件对象可将GENERIC_READ位映射到READ_CONTROL和SYMCHRONIZE标准访问权限,及映射到FILE_READ_DATA、FILE_READ_EA和FILE_READ_ATTRIBUTES对象专用访问权限。
其他类型的对象将GENERIC_READ位(GR)映射到适用于该类对象的访问权限组。例如,当打开对一对象的句柄时,类属访问权限可用于指定期望的访问类型。这通常比指定所有对应的标准和专用权限要简单。下面的表格描绘了为类属访问权限定义的可能的常量。
常量 |
类属含义 |
GENERIC_ALL |
读、写及执行访问 |
GENERIC_EXECUTE |
执行访问 |
GENERIC_READ |
读访问 |
一般而言,每一类可护对象有一组对应于对该类对象专用的操作的访问权限。除了这些对象专用访问权限之外,还有一组对应于对大多数类型的可护对象公用的操作的标准访问权限。下面的表格描绘了为标准访问权限定义的可能的常量。
常量 |
含义 |
DELETE |
删除对象的权利限。 |
READ_CONTROL |
读对象的安全描述符中的信息的权限,不包括SACL中的信息。 |
SYNCHRONIZE |
使用该对象来同步的权限。这使线程能等待直到该对象处于被通知的状态。某些对象类型不支持此访问权限。 |
WRITE_DAC |
修改对象的安全描述符中的DACL的权限。 |
WRITE_OWNER |
改变对象的安全描述符中的所有者的权限。 |
图5根据本发明一方面示出了用于类似地受保护的安全区域的示例数据结构500。如500所示,定义了类似地受保护的区域的项目在安全表中有与这些区域相关联的条目。该安全表如下定义:
项目身份(Item Identity)-这是类似地受保护的安全区域的根节点的项目身份。
项目有序路径(Item Ordpath)-这是与类似地受保护的安全区域的根节点相关联的有序路径。
显式项目ACL(Explicit Item ACL)-这是为类似地受保护的安全区域的根节点定义的显式ACL。在某些情形下,这可以为NULL,(例如,当因为项目有属于不同区域的多个父节点时,定义一新的安全区域)。
路径ACL(Path ACL)-这是由项目继承的一组ACL。
区域ACL(Region ACL)-这是为与项目相关联的类似地受保护的安全区域定义的一组ACL。当显式列有非NULL值时,这与继承ACL列不同。
为一给定存储中的项目计算有效安全性充分利用了表格500。为了确定与项目相关联的安全策略,分析与该项目相关联的安全区域,并检索与该区域相关联的ACL。当与该项目相关联的安全策略被改变(例如,通过直接添加显式ACL,或间接添加导致形成新安全区域的持有链接)安全表500应保持最新,来促进上面确定项目的有效安全性的算法保持有效。维护安全表的可能的算法如下:
在容器内创建新项目-
当在容器中新创建一项目时,它继承与该容器相关联的ACL。因为该新创建的项目有一父节点,它属于其父节点的安全区域。因而,通常无需在安全表中创建新条目。
向项目添加显式ACL-
当向项目添加ACL时,它为包含性分层结构中属于与给定项目自身相同的安全区域的后代定义了一新安全区域。对于属于其他安全区域,却是包含性分层结构中该给定项目的后代的项目,安全区域保持不变,但改变与该区域相关联的有效ACL,来反映新ACL的添加。引入此新安全区域可触发对于具有与跨旧安全区域与新定义的安全区域的先辈的多个持有链接的那些项目的进一步区域定义。对于此类项目,可定义新安全区域,并重复该过程。
图6描绘了通过引入新显式ACL,从以现存的安全区域创建的新的类似地受保护的安全区域。这由参考标号600处的标记为2的节点示出。然而,由于项目有多个持有链接,因此引入此新区域导致在参考标号610处创建附加区域3。下面对安全表的更新序列反映了类似地受保护的安全区域的分解。
向项目添加持有链接-
当向项目添加持有链接时,通常它引起三种可能性之一。如果持有链接的目标,即所考虑的项目,是安全区域的根节点,则与该区域相关联的有效ACL被改变,并且一般不再需要对该安全表的其他修改。如果新持有链接的源的安全区域等同于该项目现存父节点的安全区域,那么通常无需任何改变。然而,如果该项目现在具有属于不同安全区域的父节点,那么就形成一新安全区域,以给定项目作为该安全区域的根节点。通过修改与该项目相关联的安全区域,此变化被传播到包含性分层结构中的各项目。与所考虑的项目同属一安全区域的各项目及其在包含性分层结构中的后代应被改变。当作出了改变,应检查有多个持有链接的项目来确定是否需要更多改变。如果这些项目中的任一个具有属于不同安全区域的父节点,则可能需要更多改变。
从项目删除持有链接-
当从项目删除持有链接时,如果满足某些条件,可能将一安全区域与其父区域层叠。更精确地说,这可在下面的条件下达到-
如果移除持有链接导致仅有一个父节点的项目,且未对该项目指定显式ACL。
如果移除持有链接导致其父节点全部在同一安全区域的项目,且未对该项目定义显式ACL。在这些情况下,可将该安全区域标记为与父节点相同。此标记应被应用于其安全区域对应于被层叠的区域的所有项目。
从项目删除显式ACL-
当从项目删除显式ACL时,可能将根节点位于该项目的安全区域与其父节点的安全区域层叠。更精确地说,如果移除该显式ACL导致包含性分层结构中的其父节点属于同一安全区域的项目,那么这就能够实现。在这些情况下,可将安全区域标记为与父节点相同,且此标记应被应用于其安全区域对应于被层叠的区域的项目。
修改与项目相关联的ACL-
在这种情形下,一般不需要对安全表作新的添加。与该区域相关联的有效ACL被更新,且新的ACL改变被传播到受其影响的安全区域。
图7是示出根据本发明一个方面的安全过程700的流程图。尽管出于解释简单的目的,该方法被示意并描述为一系列动作,然而必须理解,本发明不限于该动作顺序,因为根据本发明,一些动作可按不同顺序发生和/或与本文示出及描述的其他动作同时发生。例如,本领域专业人员将理解,方法能被替换地表示成一系列相互关联的状态或事件,诸如在状态图中所示。并且,并非所有示出的行为都是实现根据本发明的方法所必须的。
前进至图7的710,为分层结构定义一个或多个安全策略。如上所述,这可以包括普通树状结构及诸如包含性分层结构等其他结构。具有树状排列的某些方面,及关于包含性分层结构的某些方面的混合结构也是可能的。可在诸如访问控制列表之类的设备中提供安全策略,该访问控制列表具有描述其中的相应策略的一个或多个访问控制条目。在720,为安全策略定义了显式和/或继承的映射规则。此类的规则可包括显式映射情况下的覆盖函数,但其他规则规定了在较复杂排列中(诸如种个持有关系是可能的包含性分层结构)如何映射策略。在730,确定相应规则与策略的排序。例如,访问控制条目可根据所遇到的结构类型和/或分层关系在访问控制列表中进行排列。在740,为给定分层结构定义一个或多个安全区域。在750,将一个或多个安全策略应用于在740定义的所选区域。
参考图8,用于实现本发明各方面的示例性环境810包括计算机812。计算机812包括处理单元814、系统存储器816及系统总线818。系统总线818将包括但不限于系统存储器816的系统组件耦合到处理单元814。处理单元814可以是各种可用处理器中的任一种。双微处理器及其他多处理器体系结构也可用作处理单元814。
系统总线818可以是数种总线结构中的任一种,包括存储器总线或存储器控制器、外围总线或外部总线、和/或使用各种可用总线体系结构的任一种的局部总线,包括但不限于,16位总线、工业标准体系结构(ISA)、微通道体系结构(MSA)、扩展ISA(EISA)、智能驱动器设备(IDE)、VESA局部总线(VLB)、外围部件互联(PCI)、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储卡国际协会总线(PCMCIA)、及小型计算机系统接口(SCSI)。
系统存储器816包括易失性存储器820和非易失性存储器822。包含例如在启动期间帮助在计算机812内部各元件间传送信息的基本例程的基本输入输出系统(BIOS)存储在非易失性存储器822中。作为示例而非局限,非易失性存储器822可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除ROM(EEPROM)或闪存。易失性存储器820包括担当外部告诉缓存的随机存取存储器(RAM)。作为示例而非局限,RAM可采取多种形式,诸如同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM),及直接Rambus RAM(DRRAM)。
计算机812还包括可移动/不可移动,易失性/非易失性计算机存储介质。例如图8示出磁盘存储824。磁盘存储824包括,但不限于,如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡或记忆棒。此外,磁盘存储824可单独包括存储介质或与其他存储介质组合,其他存储介质包括但不限于光盘驱动器,诸如光盘ROM设备(CD-ROM)、CD可记录驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)或数字多功能盘ROM驱动器(DVD-ROM)。为便于磁盘存储设备824连接到系统总线818,通常使用可移动或不可移动接口,诸如接口826。
应当理解,图8描述了在用户与在合适的操作环境810中描述的计算机资源间担当中介的软件。此类软件包括操作系统828。可保存在磁盘存储824上的操作系统828用于控制及分配计算机系统812的资源。系统应用程序830利用了操作系统828通过存储在系统存储器816中或磁盘存储824上的程序模块832及程序数据834对资源的管理。应当理解,本发明可以用各种操作系统或其组合来实现。
用户通过输入设备836输入命令或信息到计算机812中。输入设备836包括,但不限于,诸如鼠标、跟踪球、触针触摸板等定位设备、键盘、话筒、游戏杆、游戏垫、圆盘式卫星天线、扫描仪、电视调谐卡、数码照相机、数码摄像机、网络摄像头等等。这些及其他设备经由接口端口838,通过系统总线818连到处理单元814。接口端口838包括例如串行端口、并行端口、游戏端口及通用串行总线(USB)。输出设备840使用一些和输入设备836相同类型的端口。因而,例如USB端口可用于提供到计算机812的输入,及从计算机812输出信息到输出设备840。提供输出适配器842以示意在其他输出设备840中有一些需要专用适配器的输出设备,如监视器、扬声器及打印机。作为示例而非局限,输出适配器842包括,提供输出设备840与系统总线818之间连接手段的显卡与声卡。应当注意,诸如远程计算机844的其他设备和/或设备系统同时提供输入与输出性能。
计算机812可使用到诸如远程计算机844等一个或多个远程计算机的逻辑链接在联网环境中操作。远程计算机844可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的装置、对等设备或其他普通网络节点等等,且通常包括对于计算机812所描述的许多或全部元件。为简单起见,仅随远程计算机844示出记忆存储设备846。远程计算机844通过网络接口848逻辑地连接到计算机812,然后经由通信连接850物理连接。网络接口848包含诸如局域网(LAN)和广域网(WAN)等通信网络。LAN技术包括光纤分布式数据接口(FDDI)、铜缆分布式数据接口(CDDI)、以太网/IEEE 1102.3、令牌环/IEEE1102.5等等。WAN技术包括,但不限于,点对点链路,如综合业务数字网及其变体等电路交换网络、分组交换网络及数字用户线(DSL)。
通信连接850指用于将网络接口848连到总线818的硬件/软件。尽管为说明清楚,将通信连接850示于计算机812内部,然而它也可在计算机812外部。仅为示例性目的,连接到网络接口848所必需的硬件/软件包括内部和外部技术,诸如包括常规电话级调制解调器、电缆调制解调器及DSL调制解调器在内的调制解调器、ISDN适配器及以太网卡。
图9是可与本发明交互的示例计算环境900的示意性框图。系统900包括一个或多个客户机910。客户机910可以是硬件和/或软件(例如,线程、进程、计算设备)。系统900还包括一个或多个服务器930。服务器930也可以是硬件和/或软件(例如,线程、进程、计算设备)。例如,通过使用本发明,服务器930可容纳线程来执行转换。客户机910与服务器930之间一种可能的通信可以是以适合在两个或多个计算机进程间发送的数据分组的形式。系统900包括通信框架950,可用于帮助客户机910与服务器930间的通信。客户机910操作上可连到一个或多个可用于存储对客户机910本地的数据的客户机数据存储960。类似地,服务器930操作上可连到一个或多个可用于存储对服务器930本地的信息的服务器数据存储940。
上文所描述的包括本发明的示例。当然,不可能描述本发明的目的而描述组件或方法的每个可想到的组合,但本领域的普通技术人员会意识到,本发明的许多其他组合与变换是可能的。因此,本发明旨在包括落入所附权利要求书的范畴内的所有此类改变、修改与变体。并且,在详细描述或权利要求书中使用术语“包括”的意义上,此类术语意图如术语“包含”那样为包含性的,如“包含”在权利要求书中用作过渡词所解释的。