用于操作系统的灵活层级设置注册表的制作方法

xiaoxiao2020-7-22  12

专利名称:用于操作系统的灵活层级设置注册表的制作方法
技术领域
本发明大体上涉及计算机操作系统,且更明确地说,涉及在用于移动计算装置的操作系统上实施的注册表系统。
背景技术
注册表是操作系统内用于存储软件操作设置和选项的目录。举例来说,由微软公司(Microsoft Corporation)开发的Windows 操作系统包含被称为"Windows注册表”的目录文件,所述目录文件含有硬件、操作系统软件和应用程序软件所需要的信息和设置,并存储用户偏好和设置。注册表文件用于在单个文件结构中定位所有程序和硬件设置和常量值。Windows注册表含有两个基本元素机码和值。注册表机码类似于文件夹。除了值之外,每一机码可含有子机码,子机码可含有进一步的子机码。在类似于Windows路径名的语法中使用反斜杠指示层级等级来引用机码。注册表值是存储在机码内的名称/数据对。 对值的引用是独立于机码而进行的。在Windows注册表中,值可为串值、二进制数据、未签名的32位整数、统一代码(UNICODE)值、多串值、列表和64位整数值(在Windows 2000和更高版本中)。Windows注册表被构造成提供数据库类型的函数的数据库。


并入本文中并构成本说明书的一部分的

本发明的示范性实施例,且连同上文所给出的概括描述和下文所给出的详细描述一起用以阐释本发明的特征。图1提供用于在实施例内实施设置对象的实例代码框。图2提供用于在实施例内实施原生设置对象的其它实例代码框。图3是说明两个应用程序针对原生设置对象的过程调用的过程调用图。图4提供用于在实施例内实施非原生设置对象的实例代码框。图5是说明两个应用程序针对非原生设置对象的过程调用的过程调用图。图6是说明在实施例内对设置对象调用进行的处理的过程流程图。图7是适于实施各种实施例的移动手持机的组成框图。
具体实施例方式将参看附图来详细地描述各种实施例。只要有可能,将在所有图式中使用相同的参考标号来指代相同或相似的部分。对具体实例和实施方案做出的参考是出于说明性目的,且不希望限制本发明或权利要求书的范围。在此描述中,术语“实例”和“示范性”是用于指“充当实例、例子或说明”。在本文中描述为“实例”或“示范性”的任何实施方案不一定解释为比其它实施方案优选或有利。如本文所使用,术语“移动手持机”和“移动装置”可互换使用,且指代以下各项中的任一者各种蜂窝式电话、个人数据助理(PDA)、掌上型计算机、具有无线调制解调器的膝上型计算机、无线电子邮件接收器(例如,Bladcberry 和Treo 装置)、蜂窝式电话以及具有多媒体因特网功能的蜂窝式电话(例如,Bladiberry Storm )以及类似的个人电子装置。移动装置可包含如下文参看图7更完全地描述的可编程处理器和存储器。现代移动装置可存储大量的数字信息,且用户通常将其移动装置用作信息和娱乐器具。因此,针对移动装置而开发的应用程序的复杂性和完善度现在可与针对个人计算机而开发的应用程序匹敌。各种实施例通过提供具有可定义存取保护的灵活设置注册表来促进移动装置应用程序的开发。各种实施例提供一种具有可由应用程序开发人员定义的存取保护的分布式设置注册表。分布式设置注册表在不同技术中提供可定制特权和将不同节点插入到注册表树中的动态能力。所述设置注册表可存在于注册表接口下,使得调用注册表的应用程序无需考虑设置值是何时或者如何存储的。在所述注册表树中的每一节点可定义其自身的特权要求和存储技术。节点可为“原生的”(即,在设置注册表系统软件内得到完全支持)或“非原生的”(即,由开发人员针对特定应用程序而定义)。设置对象经由模块信息文件(mif)而向设置注册表注册其自身,所述模块信息文件在本文被称为.mif文件。众所周知,可由以下两个文件来定义驻留在移动装置上的应用程序扩展名为.mif的模块信息文件和扩展名为.mod的模块文件。如果应用程序需要设置信息,那么此类设置值便可存储在设置注册表内,以供应用程序在其开始或正在运行时存取。举例来说, 可将设置存储在扩展名为.ini文件的初始化文件中。在此实施方案中,开发人员必须提供含有已编译应用程序代码的.mod文件、含有已编译模块信息(包含设置注册信息)的.mif 文件和含有设置值的.ini文件。各种实施例提供应用程序编程接口(API)(有时在本文被称为“Bettings”)和 API的设置注册表实施方案(有时在本文被称为“kttingsReg”),其使得能够以串值获得/设置指定的机码、支持层级机码结构、允许在机码的树上进行列举以及在值变化时支持通知。可将数据作为文本文件而存储在设置注册表中,这简化了读取、写入和列举操作。 SettingsReg的实施例提供两种类型的功能性公用设置和私用设置。公用设置是应用程序或组件希望能够经由全局设置注册表而可供系统的其余部分使用的设置文件。公用设置大体上可供在操作系统内运行的所有应用程序使用。私用设置是可供选择性识别的应用程序或应用程序类型或类别使用的设置文件。各种实施例的设置注册表利用基于URI的设置树,例如,“path/to/a/setting” (/ 路径/到/ 一 /设置)。各种实施例的设置注册表不是较大的单片注册表(例如,在Windows 注册表的情况下),而是包括若干较小的子注册表,由简单地“插入”到最高等级的注册表的任何数目的模块提供所述子注册表,其中每一子注册表“拥有”树的特定部分。此结构使得能够易于维持设置注册表,因为每一子注册表以可定制方式管理其自身的数据存储装置(data store) 0所述结构还允许各种类型的数据存储机构可缩放,这是因为易于添加新的子注册表。所述结构还提供可定义的安全性,因为每一子注册表可管理其自身的特权准则。 另外,所述结构支持跨应用程序/域的变化通知。设置注册表具有原生和非原生数据存储装置的概念。原生存储装置是ISetings 注册表对其具有内建支持的存储装置。举例来说,在实施例中,设置注册表支持基于.ini 文件的数据存储装置和基于堆的数据存储装置,所述基于.ini文件的数据存储装置是存在于.ini文件中且留存在扩展文件系统(ER5)中的设置,所述基于堆的数据存储装置是存在于堆存储器中且不跨电源(即,系统接通/断开)循环留存的设置。非原生存储装置是使用不同于由原生设置对象数据存储装置所支持的存储技术或文件类型的存储技术或文件类型的独立实施方案。开发人员可自由定义非原生设置对象,包含那些对象的特权执行。在原生存储装置的情况下,若干组件在其.mif文件中主张对树的特定节点的所有权,其还在所述.mif文件中向注册表提供关于其存储装置的一些信息(例如,对于基于.ini文件的存储装置,组件将指定存储装置类型(在此情况下是基于.ini的存储装置) 和到.ini文件的EFS路径)。注册表将管理对数据存储装置的所有操作(在.ini文件的情况下,注册表是曾对文件进行读取/写入的唯一组件),因此存在例如设置存取控制列表 (ACL)等单独的机构,组件可通过所述机构定义特权,以允许或拒绝对其存储装置的存取。 设置ACL (存取控制列表)与文件系统(FS)ACL的运作完全相同。在原生存储装置的情况下,没有用以写入以定义/管理存储装置的代码。在原生存储装置中,注册表过程具有创建存储装置并与其交互的能力。开发人员可简单地在.mif 文件中对存储装置进行注册,并提供存储媒体(例如,.ini文件)。换句话说,模块经由.mif 文件而向设置注册表“注册”其自身。于是使用所述存储装置的应用程序可使用Settings 接口和已定义的机码一起对数据进行存取(假定应用程序具有这样做的特权)。接着由单独服务18执行对个别原生设置对象的所有存取(参看图幻。换句话说,对所有原生设置对象20进行存取的同一服务在一过程中由同一服务进行存取,所述过程由来自经调用以获得信息的应用程序10、14和API 12,16的过程边界分离。设置数据作为设置对象而存储。可使用产生API的对象(在本文被称为设置存储装置工厂)围绕具体存储技术来创建原生设置注册表对象。举例来说,在第一实施例中提供两个设置存储装置工厂用于产生.ini文件设置对象的设置存储装置工厂和用于产生堆存储设置对象的设置存储装置工厂。众所周知,.ini文件是应用程序用来存储配置数据的初始化文件,所述配置数据在程序正在开始时被读取,且堆存储装置是存储在临时存储器中的文件,只要移动装置一断电,所述文件就被删除。当待存储的信息将被给定受限制的存取(即,“私用的”)时尤其可使用设置存储装置工厂,其中存取限于指定的应用程序或应用程序类型或系列。如本文所使用,术语“公用的”指在设置注册表中可用的任何设置不考虑存取特权都被认为是公用的,且术语“私用的”指在应用程序中使用工厂创建的设置或对象。在这点上,“私用的”设置指在单个应用程序的上下文中创建的对象的例子,于是所述对象对于所述应用程序便是“私用的”例子。 因此,如果两个应用程序两者都使用设置.ini工厂打开同一 .ini文件,那么每一应用程序现在便具有所述对象的私用例子(在此情况下,对文件具有存取权的应用程序可由不同于设置注册表的某一机构(例如,文件系统ACL)定义)。当一个应用程序作出改变时,可能无法通知其它应用程序已发生了改变。另一方面,如果向设置注册表注册了所述.ini文件 (这使其变得“公用”),那么两个应用程序便可通过检查设置注册表来对所述.ini文件中的数据进行存取,且当一个应用程序作出改变时,另一应用程序可得到通知。因此,可存在三个类别的设置对象公用,对全体可用;公用,其中存取受限制;以及私用。图1说明可用于针对程序“foo”实施.ini文件的实例代码的样品。在此实例中, 待存储在所述树处的foo. ini和文件fs: / Oxdeadbeef/foo. ini中的信息是待存储在 “名称”节点中的名称“Mike”(参见代码2)。代码框4中说明用以实施用于产生此foo. ini 设置文件的设置存储装置工厂的脚本。在以“ISettingsStorei^ctoryJreate”开头的行中,开发人员指定待使用的节点名称(在所述实例中是“foo. ini”)。与上文所论述的内容一样,在原生设置对象的产生期间,开发人员还可指明对象是私用还是公用的。如果开发人员指明对象为私用的,那么开发人员还可指明对象的存取特权,即,可对设置对象进行存取的特定应用程序或应用程序类型。在图2中所说明的实例代码中,代码行“ Kettings_Get(pkttings,‘ Genera/name ‘,buf,sizeof (buf),NULL),, 将返回存储在节点“名称”处的foo. ini文件中的数据(其在此实例中是“Mike”)。此类.ini文件可能受FS ACL的控制,FS ACL是设置对象中以应用程序列表的形式所指定的特权,注册表系统可允许所述应用程序列表对设置值进行存取。可在设置对象内指定特权, 使得对象内的一些设置值是公用的(即,可由任何应用程序进行存取)而同一对象内的其它设置值是私用的,且仅可由对应的ACL中所识别的应用程序或应用程序类型进行存取。已使用图1中所展示的脚本产生原生节点设置对象,开发人员便可通过实施图2 中.cif文件框6中所展示的脚本来向设置注册表注册对象2。所述.cif文件经编译以产生用于应用程序的.mif文件。因此,框6中的代码定义将存在于用于应用程序“fooApp” 的.mif文件中的信息,所述信息定义将保存包含“名称”节点中的词“Mike”的初始化设置的设置对象“foo. ini”。系统可列举存储在移动装置上的.mif文件,以确定设置文件的机码。明确地说,.mif文件(由.cif文件6中的代码定义)需要定义所有者、机码和文件 (参看框6中第三行到第五行)。一旦注册了对象,便可由应用程序通过实施图2中的框8 中所展示的脚本来对信息进行存取。如上文所提及和图3中所说明,设置注册表实施单独服务18,用于对所有原生设置对象20进行存取。这使得能够在应用程序10、14和注册表12、16 (虚线上方)的处理与对设置对象20进行的存取之间建立过程边界(以虚线说明)。由应用程序10、14调用的原生设置存取API 12、16无需指定文件位置或包含与用设置对象实施的文件结构相关的详细说明;此类细节由单独服务18处置。非原生存储装置是注册表对其没有原生支持的数据存储机构(即,没有提供设置工厂且单独服务18未经配置以对设置对象文件类型进行存取)。设置注册表的各种实施例允许非原生存储装置将其自身安装到树中,并处置在所述树内的节点上所发生的操作。依据非原生存储装置实施方案,可在过程中或跨过程边界执行存储装置上的操作。与原生存储装置一样,非原生存储装置在其.mif文件中进行注册以“拥有”树的特定节点。不同的是,非原生存储装置为定制ISettings类提供类ID。在非原生存储装置的情况下,调用程序(caller)首先例示注册表类。当在由非原生存储装置所拥有的树中的机码上进行操作时,例示定制类(假定调用程序具有适当的特权),且所述操作被委派给
8所述定制类。在此情况下,注册表基本上作为“直通”(pass-through)而操作。在技术上, 调用程序可通过直接例示定制类而非注册表来得到相同的功能性,但使用注册表简化了用法,尤其是在调用程序对原生和非原生存储装置两者都感兴趣时更是如此。开发人员可通过实施例如图4中说明的实例等脚本来针对非原生“BMPkttings” 注册非原生节点。可在例如框22中的代码中所说明的.cif文件中来定义非原生设置对象。可通过将例如框M中所说明的代码包含在内来实施对已定义的非原生设置对象的处理。在例示之后,实施例中的注册表过程(例如,SettingsReg)即刻在系统中建立已注册的非原生节点的列表。一旦定义和实施非原生设置对象,便可接着在应用程序内通过将类似于框沈中所说明的代码的代码包含在内来对非原生设置对象进行存取。在对非原生代码的存取调用后,即刻创建了实施方案,且将操作委派给所述实施方案。由于非原生设置对象由开发人员定义,且因此不能由设置注册表进行处置,所以依据非原生存储装置实施方案,可在过程中或跨过程边界处置其存取调用。这在图5中加以说明。当任一应用程序30、38调用设置API 32,40以获得非原生设置对象36、42 (例如, BMPSettings)时,API实施非原生对象存取代码36、42以获得过程中所请求的信息(即,在同一过程边界内,无需实施注册表的单独服务18)。以此方式,开发人员具有以特定应用程序所要的任何方式和文件类型来定义新的设置对象的完全自由。在图6中说明在各种实施例下应用程序请求设置信息的处理。在初始化期间(或任何其它时间),应用程序可通过在设置注册表上经由Settings API执行操作来请求设置信息(步骤60)。举例来说,如图3和图5中所说明,应用程序可经由如图2代码框8和图4代码框洸中所说明的ISettings API对“kttingsReg”进行存取。SettingsReg确定所请求的设置对象是针对原生还是非原生节点(测试62)。如果请求是针对原生节点处的信息(即,测试62 = “是”),那么SettingsReg便将操作传递到单独服务(步骤64),所述单独服务对所指示的设置对象进行存取并将数据返回到kttingsReg (步骤66)。在实施例中,单独服务可比较在所调用的设置对象中指定的存取特权,以确定调用应用程序是否经授权对设置信息进行存取(测试65)。如果调用应用程序不满足设置对象特权列表(即, 应用程序或应用程序类型不匹配设置对象中指定的特权,且因此测试65 = “否”),那么单独服务便可将“存取被拒绝”或类似的消息返回到调用程序(步骤67)。如果调用应用程序满足设置对象特权列表(即,测试65 = “是”),那么SettingsReg便接着将所请求的数据返回到所述应用程序(步骤68)。然而,如果请求是针对非原生节点处的信息(即,测试62 =“否”),那么SettingsReg便为过程中所调用的非原生节点创建设置对象,所调用的非原生节点返回所请求的数据(步骤72)。SettingsReg接着将所请求的数据返回到所述应用程序(步骤74)。开发人员可使用各种实施例来简化对应用程序的开发。以下段落描述开发人员在用以实施设置注册表的各种实施例的应用程序中可包含的步骤和实例代码。为了区别位于注册表根等级处的子注册表,每一子注册表必须具有唯一的串识别符。实现这的此最简单的方式是(例如)要求类ID。“/ 0xl2;345678/fOO/...,,<-—组件 1 的设置子注册表“ / Oxdeadbeef/bar/...,,<-—组件 2 的设置子注册表然而,类ID不是必需的;还允许更多的人类可读统一资源识别符(URI),但必须注意避免重叠。如果发生重叠,那么行为可能是未定义的。“/component 1/foo/...,,"/component2/bar/...,,私用设置是在每个例子的基础上可供一应用程序或组件使用的设置。这些设置不暴露于系统中的任何其它组件。对于私用设置的Bettings支持仅提供用于组织设置的便利机制。私用设置是使用工厂创建的。调用程序指定关于媒体(将从所述媒体创建设置) 的一些信息,且工厂返回可用于对设置进行存取的Settings对象。对于私用设置,无需对.mif文件进行修改。组件在运行时间仅使用工厂来创建感兴趣的Settings对象。在实施例中,设置注册表包含返回不支持IkttingsJtaChange ()方法的 Settings对象的工厂。为了添加公用.ini文件的公用存储装置,开发人员可执行以下步骤来向其组件添加和存取基于公用.ini文件的设置存储装置。第一,开发人员可将以下内容复制到名为 mysettings. ini的文件中,并将其放置到其组件的位于EFS中的模块目录中[部分1]设置1 =值第二,开发人员可通过使用例如以下的脚本将以下各项添加到组件的.Cif文件
来向系统注册存储装置
权利要求
1.一种用于在注册表内对软件设置进行存储和存取的方法,其包括产生含有设置值的原生设置对象,并用机码将所述原生设置对象存储在存储器中;接收来自应用程序的呈应用程序编程接口(API)调用形式的对所述设置值的调用;实施与所述注册表相关联的单独服务以获得所述设置值;在所述单独服务内从所述原生设置对象获得所述设置值;将所述设置值从所述单独服务返回到所述API ;以及将所述设置值从所述API返回到所述应用程序。
2.根据权利要求1所述的方法,其中单独对象控制对原生设置对象的所有存取。
3.根据权利要求1所述的方法,其进一步包括并非在所述单独服务内,接收在软件中定义的非原生设置对象; 确定来自所述应用程序的对所述设置值的所述API调用是请求原生还是非原生设置对象,其中当确定所述API是请求原生设置对象时,执行实施单独服务、在所述单独服务内获得所述设置值以及将所述设置值从所述单独服务返回到API函数的步骤;以及当确定所述API是请求非原生设置对象时,实施非原生过程以获得所述所调用的设置值。
4.根据权利要求1所述的方法,其进一步包括确定所述应用程序是否满足在所述所调用的设置对象中指定的特权;以及当确定所述应用程序不满足在所述所调用的设置对象中指定的所述特权时,拒绝对所述设置值的存取。
5.根据权利要求4所述的方法,其进一步包括当产生所述原生对象时,定义所述特权。
6.一种移动装置,其包括 处理器;存储器,其耦合到所述处理器;其中所述处理器用处理器可执行指令来配置以执行包括以下各项的步骤产生含有设置值的原生设置对象,并用机码将所述原生设置对象存储在存储器中;接收来自应用程序的呈应用程序编程接口(API)调用形式的对所述设置值的调用;实施与所述注册表相关联的单独服务以获得所述设置值;在所述单独服务内从所述原生设置对象获得所述设置值;将所述设置值从所述单独服务返回到所述API ;以及将所述设置值从所述API返回到所述应用程序。
7.根据权利要求6所述的移动装置,其中所述处理器进一步用处理器可执行指令来配置以使得单独对象控制对原生设置对象的所有存取。
8.根据权利要求6所述的移动装置,其中所述处理器进一步用处理器可执行指令来配置以执行进一步包括以下各项的步骤并非在所述单独服务内,接收在软件中定义的非原生设置对象; 确定来自所述应用程序的对所述设置值的所述API调用是请求原生还是非原生设置对象,其中当确定所述API是请求原生设置对象时,执行所述实施单独服务、在所述单独服务内获得所述设置值以及将所述设置值从所述单独服务返回到API函数的步骤;以及当确定所述API是请求非原生设置对象时,实施非原生过程以获得所述所调用的设置值。
9.根据权利要求6所述的移动装置,其中所述处理器进一步用处理器可执行指令来配置以执行进一步包括以下各项的步骤确定所述应用程序是否满足在所述所调用的设置对象中指定的特权;以及当确定所述应用程序不满足在所述所调用的设置对象中指定的所述特权时,拒绝对所述设置值的存取。
10.根据权利要求9所述的移动装置,其中所述处理器进一步用处理器可执行指令来配置以执行进一步包括当产生所述原生对象时定义所述特权的步骤。
11.一种有形存储媒体,其上存储有致使计算装置的处理器执行包括以下各项的步骤的处理器可执行软件指令产生含有设置值的原生设置对象,并用机码将所述原生设置对象存储在存储器中;接收来自应用程序的呈应用程序编程接口(API)调用形式的对所述设置值的调用;实施与所述注册表相关联的单独服务以获得所述设置值;在所述单独服务内从所述原生设置对象获得所述设置值;将所述设置值从所述单独服务返回到所述API ;以及将所述设置值从所述API返回到所述应用程序。
12.根据权利要求11所述的有形存储媒体,其上进一步存储有处理器可执行指令,使得单独对象控制对原生设置对象的所有存取。
13.根据权利要求11所述的有形存储媒体,其上进一步存储有用以执行进一步包括以下各项的步骤的处理器可执行指令并非在所述单独服务内,接收在软件中定义的非原生设置对象; 确定来自所述应用程序的对所述设置值的所述API调用是请求原生还是非原生设置对象,其中当确定所述API是请求原生设置对象时,执行所述实施单独服务、在所述单独服务内获得所述设置值以及将所述设置值从所述单独服务返回到API函数的步骤;以及当确定所述API是请求非原生设置对象时,实施非原生过程以获得所调用的至少一个设置值。
14.根据权利要求11所述的有形存储媒体,其上进一步存储有用以执行进一步包括以下各项的步骤的处理器可执行指令确定所述应用程序是否满足在所述所调用的设置对象中指定的特权;以及当确定所述应用程序不满足在所述所调用的设置对象中指定的所述特权时,拒绝对所述至少一个设置值的存取。
15.根据权利要求14所述的有形存储媒体,其上进一步存储有用以执行进一步包括当产生所述原生对象时定义所述特权的步骤的处理器可执行指令。
16.一种移动装置,其包括用于产生含有设置值的原生设置对象并用机码将所述原生设置对象存储在存储器中的装置;用于接收来自应用程序的呈应用程序编程接口(API)调用形式的对所述设置值的调用的装置;用于实施与所述注册表相关联的单独服务以获得所述设置值的装置;用于在所述单独服务内从所述原生设置对象获得所述设置值的装置;用于将所述设置值从所述单独服务返回到所述API的装置;以及用于将所述设置值从所述API返回到所述应用程序的装置。
17.根据权利要求16所述的移动装置,其中用于实施单独对象的装置包含用于控制对原生设置对象的所有存取的装置。
18.根据权利要求16所述的移动装置,其进一步包括用于并非在所述单独服务内接收在软件中定义的非原生设置对象的装置;用于确定来自所述应用程序的对所述设置值的所述API调用是请求原生还是非原生设置对象的装置,其中当确定所述API是请求原生设置对象时,执行实施单独服务、在所述单独服务内获得所述设置值以及将所述设置值从所述单独服务返回到API函数的步骤;以及用于在确定所述API是请求非原生设置对象时,实施非原生过程以获得所述所调用的设置值的装置。
19.根据权利要求16所述的移动装置,其进一步包括用于确定所述应用程序是否满足在所述所调用的设置对象中指定的特权的装置;以及用于在确定所述应用程序不满足在所述所调用的设置对象中指定的所述特权时,拒绝对所述设置值的存取的装置。
20.根据权利要求19所述的移动装置,其进一步包括用于在产生所述原生对象时定义所述特权的装置。
全文摘要
各种实施例包含提供具有可由应用程序开发人员定义的存取保护的分布式设置注册表的方法和系统。可用可定制特权和将不同节点插入到注册表树中的动态能力来跨不同技术实施分布式设置注册表。所述设置注册表可存在于注册表接口下,使得调用注册表的应用程序无需考虑设置数据是何时或者如何存储的。所述注册表树中的每一节点可定义其自身的特权要求和存储技术。节点可为“原生的”(即,在设置注册表系统软件内得到完全支持)或“非原生的”(即,由开发人员针对特定应用程序而定义)。
文档编号G06F9/445GK102203731SQ200980143460
公开日2011年9月28日 申请日期2009年10月29日 优先权日2008年10月29日
发明者米迦勒·马格 申请人:高通股份有限公司

最新回复(0)