[0112] t=″3″>settingSt ringValue
[0113]
[0114]
[0115]
[0116] <!--
[0117] -->
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133] 其中,所述数据格式对应的语义信息为:
[0134] A类节点:
[0135] 节点对应于WINDOWS注册表中的根节点;
[0136] 节点对应于WINDOWS注册表中的HKEY_CLASSES_ROOT节点;
[0137] 节点对应于WINDOWS注册表中的HKEY_CURRENT_USER节点;
[0138] 节点对应于WINDOWS注册表中HKEY_LOCAL_MACHINE节点;
[0139] 节点对应于WINDOWS注册表中的HKEY_USERS节点;
[0140] 节点对应WINDOWS注册表的HKEY_CURRENT_CONFIG节点。
[0141] B类节点:
[0142] 下节点,一般用来存放系统环境变量相关的设置;
[0143] 下节点,一般用来存放各软件的设置信息,其下一般会有较多节点,这些节点大多以公司英文名称作为节点名称,此节点与下节点大多数情况下是同步的;
[0144] 下通常用来存放硬件相关信息;
[0145] 下节点,通常用来存放安全设置相关信息;
[0146] 下节点,此节点与下节点大多数情况是同步的,以下说明都以下节点为例。
[0147] C类节点:
[0148] 一般情况下下节点下会有很多以公司英文名称命名的节点,这些节点可以简称为企业节点。所述企业节点下一般会建有若干以部门英文名称命名的节点,可以简称为部门节点,所述部门节点不是必须的。所述部门节点下一般会有若干个软件名称命名的节点,可以简称软件节点,用于存放各软件具体的注册表信息及配置信息,由于部门节点不是必须的,因此软件节点有时直接建在企业节点下。所述软件节点下会有若干配置项节点可以简称为配置节点,用于存放各配置信息。
[0149] 各类不同的节点具体不同的权限控制,比如A类节点及B类节点不允许带有权限控制信息,或者即使设置了权限信息也不会生效,而C类节点会根据需要带有权限控制信息,其格式可以定义为:
[0150] a1low==″″deny=″″priviledge=″″privi 1edgetype=″″,如:
[0151]
[0152] 其中a11ow中存放被设置权限的用户,多个用户用半角逗号隔开;priviledge表示所设置的权限,每个用户的权限用竖线隔开,用户和权限段之间用冒号隔开,权限段内各权限值用逗号隔开;allow及priviledge中设置了具体权限的用户拥有对应权限值的权限。
[0153] 另外,默认情况下即使未显式设置权限,所有用户对任意节点都具有读权限,除非节点上明确设置了属性“priviledgetype=″explicitly″”,这样只有显式设置了权限属性的用户才有相应权限。所设置的权限具有继承性,即在父节点或祖父节点中定义的权限,会被自动继承至子孙节点。
[0154] 配置节点可以定义如下:
[0155] set t ingNumberVa lue
[0156] settingHexValue
[0157] set t ingStringVa lue[0158] 以上三个都是配置节点,其中t的含义为:
[0159] 取值为1表示该配置节点存放的属性类型为数字类型;取值为2表示该配置节点存放的属性类型为二进制类型;取值为3表示该配置节点存放的属性类型为字符串类型。
[0160] 配置节点下无子节点,节点间的内容即为配置项的值。一个配置节点为一个配置项,不会出现一个配置节点对应两个或以上配置项的情况,也不会出现两个或以上配置项对应一个配置节点的情况。
[0161] 102、注册表服务器端接收所述用户程序通过注册表客户端发送的操作指令。
[0162] 所述注册表客户端接收用户程序发送的操作指令,并将所述操作指令发送给所述注册表服务器端。然后所述注册表服务器端从该注册表客户端接收所述操作指令。
[0163] 103、注册表服务器端在所述用户程序具有操作权限时,通过注册表操作处理层在所述注册表存储文件中执行所述接收到的操作指令。由于每个用户程序具有的操作权限不同,比如有些用户程序可以进行注册表的读操作,但是不能进行写操作。这时就需要在执行所诉操作指令之前先判断所述用户程序的操作权限,进而确保按照正确的权限进行所述注册表存储文件的相关操作。
[0164] 104、注册表服务器端发送所述操作指令的执行结果给所述注册表客户端,由所述注册表客户端通过注册表动态链接库返回给所述用户程序。当所述用户程序具有相应的操作权限时,如可以进行注册表存储文件的删除操作,当该操作指令执行完成之后,注册表服务器端会将所述操作指令的执行结果发送给所述注册表客户端,并由注册表客户端通过注册表动态链接库返回给用户程序,使得用户程序可以清楚知道所述操作指令的运行结果。上述注册表客户端和所述注册表服务器端的通信可以并发进行。
[0165] 上述方法在实施过程中,通过在任意类型的操作系统中构建XML格式的注册表存储文件,并由所述注册表服务器端独占访问所述注册表存储文件。然后所述注册表服务器端通过接收用户程序由注册表客户端发送的操作指令,在所述用户程序具有相应的操作权限时,执行所述操作指令并其执行结果发送给所述注册表客户端,由注册表客户端通过注册表动态链接库返回给用户程序。从而可以使得用户无须修改用户程序的代码,就可以将所述用户程序移植到任意类型的操作系统平台下,并且实现了所述用户程序中需要调用注册表的功能。与现有技术相比,降低了将用户程序移植时修改该软件中调用注册表相关功能代码的工作量。
[0166] 本发明实施例还提供一种注册表系统,其中用户程序采用注册表动态链接库进行编译链接,如图2所示,该系统包括:XML格式的注册表存储文件21,注册表服务器端22,注册表客户端23,注册表操作处理层24,注册表动态链接库25和注册表通信协议26。
[0167] 其中,XML格式的注册表存储文件21,用于存储注册表的信息。注册表服务器端22,用于根据读取到的配置文件打开注册表存储文件,接收所述用户程序通过注册表客户端发送的操作指令,在所述用户程序具有操作权限时,通过注册表操作处理层在所述注册表存储文件中执行所接收到的操作指令,发送所述操作指令的执行结果给所述注册表客户端。
[0168] 注册表客户端23,用于接收所述用户程序发送的操作指令,发送所述操作指令给注册表服务器端,接收所述注册表服务器端发送的所述操作指令的执行结果,并通过注册表动态链接库返回给用户程序。
[0169] 注册表操作处理层24,用于处理注册表存储文件中数据的维护、操作及权限控制。注册表动态链接库25,用于调用注册表客户端或者提供给用户程序进行移植时调用。注册表通信协议26,用于规范注册表服务器端与注册表客户端的通信规则。
[0170] 采用该系统中所述用户程序通过调用注册表客户端与所述注册表服务器端进行数据通信,同时所述注册表服务器端根据用户程序的操作指令,通过注册表操作处理层进行注册表存储文件的相关操作,从而实现了所述用户程序中需要调用注册表的功能。与现有技术相比,本发明实施例无须修改用户程序的代码,就可以将所述用户程序移植到任意类型的操作系统平台下,解决了现有技术中在将用户程序移植时修改该软件中调用注册表相关功能的代码的工作量比较大的问题。
[0171] 实施例2:
[0172] 本发明实施例提供一种注册表系统的运行方法,所述注册表系统中的注册表存储文件为XML格式,用户程序采用注册表动态链接库进行编译链接,如图3所示,该方法包括如下步骤:
[0173] 301、注册表服务器端根据读取到的配置文件打开所述注册表存储文件。所述注册表存储文件与实施例1中的注册表存储文件的描述相同。
[0174] 302、当用户程序调用注册表存储文件时,通过调用所述注册表动态链接库,并由所述注册表动态链接库调用注册表客户端,在通过所述注册表客户端发送操作指令之前,所述注册表服务器端会根据注册表通信协议与所述注册表客户端建立连接。可以通过如下步骤实现:
[0175] 302A、所述注册表服务器端接收所述注册表客户端发送的连接请求指令;
[0176] 302B、所述注册表服务器端发送所述接收到的连接请求指令的响应消息给所述注册表客户端;
[0177] 302C、所述注册表客户端接收到所述响应消息后,与所述注册表服务器端建立连接。
[0178] 比如,注册表服务器端监听8228端口是否有注册表客户端发送的连接请求。当客户端连接上注册表服务器端的8228端口时,发送4个十六进制值的数据,如0xff 0x000xff 0x00。然后注册表服务器端接收所述注册表客户端的连接请求数据,检查发现是0xff
0x00 0xff 0x00时,则新建立一个线程,监听任意一个空闲端口如端口B,并将空闲端口的端口号返回给注册表客户端。
[0179] 注册表客户端接收连接请求的响应信息,检查发现是0xff 0x00 0xff 0x000x**0x**时,将0x** 0x**转换成端口号B,此时注册表客户端关闭连接,重新连接注册服务器的端口B,连接后,发送4个十六进制值数据0xff 0x00 0xff0x01。注册服务器的端口B给注册表客户端发送4个十六进制值:0xff 0x00 0xff0x01。当客户端接收到返回消息,检查发现是0xff 0x00 0xff 0x01时,此时连接建立成功。
[0180] 303、当所述注册表服务器端与所述注册表客户端建立连接后,所述注册表服务器端接收所述注册表客户端发送的登录信息,并检测所述接收到的登录信息是否正确。
[0181] 如果所述注册表服务器端在检测到所述登录信息错误时,发送登录失败消息给所述注册表客户端。所述注册表客户端接收到所述登录失败消息后,则会终止访问所述注册表服务器端,并通过所述注册表动态链接库将所述登录失败消息返回给所述用户程序;
[0182] 如果所述注册表服务器端在检测到所述接收到的登录信息正确时,发送登录成功消息给所述注册表客户端。然后所述注册表客户端接收到登录成功消息后,发送操作指令给所述注册表服务器端。
[0183] 304、注册表服务器端接收所述操作指令。所述操作指令由所述用户程序调用所述注册表动态链接库,并由所述注册表动态链接库调用注册表客户端发送给所述注册表服务器端。
[0184] 305、所述注册表服务器端检测所述登录成功的用户程序是否具有操作权限。由于每个用户程序具有的操作权限不同,比如有些用户程序可以进行注册表的读操作,但是不能进行写操作。这时就需要在执行所诉操作指令之前先判断所述用户程序的操作权限,进而确保按照正确的权限进行所述注册表存储文件的相关操作。
[0185] 如果所述注册表服务器端在检测到所述用户程序不具有操作权限时,发送操作错误消息给所述注册表客户端,并由注册表客户端通过注册表动态链接库返回给用户程序。
[0186] 306、当注册表服务器端在检测到所述用户程序具有操作权限时,通过注册表操作处理层在所述注册表存储文件中执行所述接收到的操作指令。所述注册表操作处理层用于处理注册表存储文件中数据的维护、操作及权限控制。
[0187] 例如,所述要执行的操作指令可以为:
[0188] READ跟着一个参数,表示获取某节点的值,表示要获取的节点的XPATH路径;
[0189] WRITE跟着两个参数,表示设置某节点的值,表示要设置的节点的XPATH路径,表示将设置的值,若XPATH表示的节点/路径不存在,则会自动建立对应节点/路径;
[0190] CREATE跟着一个参数,表示建立某节点,表示要建立的节点的XPATH路径;
[0191] DELETE跟着一个参数,表示删除某节点,表示要删除的节点的XPATH路径;
[0192] 307、注册表服务器端发送所述操作指令的执行结果给所述注册表客户端,由注册表客户端通过注册表动态链接库返回给用户程序。比如,可以进行注册表存储文件的删除操作,当该操作指令执行完成之后,注册表服务器端会将所述操作指令的执行结果发送给所述注册表客户端,并由注册表客户端通过注册表动态链接库返回给用户程序,使得用户程序可以清楚知道所述操作指令的运行结果。
[0193] 所述注册表动态链接库为提供给任一软件开发者用以移植和/或调用的动态链接库,此动态链接库在内部调用注册表客户端,向外提供与WINDOWS注册表函数一致的函数接口,因此只需要在编译时指定将此注册表动态链接库一起编译,即可实现LINUX/UNIX的注册表功能,或在WINDOWS系统上实现注册表功能的轻量级替代性实现。
[0194] 接口函数如下:
[0195] /*打开某注册表项*/
[0196] int RegOpenKeyEx(const char*plabel,cons t char*pkey,/*not use*/uns igned 1ong reserved,/*not use*/uns igned 1ong mode,HKEY*phKey);
[0197] /*获取注册表某节点的值*/
[0198] int RegQueryVa 1ueEx(HKEY hKey,cons t char*pkey,/*not use*/uns igned1ong*preserved,/*not use*/uns igned long*ptype,uns igned char*pch,uns igned long*ps ize);
[0199] /*设置注册表某节点的值*/
[0200] intRegSetVa lueEx(HKEY hKey,cons t char*pkey,/*not use*/uns igned long reserved,/*not use*/uns igned 1ong type,cons t char*pya lue,uns igned 1ong size);
[0201] /*建立注册表节点*/
[0202] int RegCrea teKey(HKEY hKey,cons t char*pkey,HKEY*phRet);
[0203] /*删除注册表节点*/
[0204] int RegDeleteKey(HKEY hKey,const char*pkey);
[0205] /*关闭打开的注册表项*/
[0206] int RegCloseKey(HKEY hKey);
[0207] 308、在所述用户程序调用注册表存储文件的操作指令完成之后,通过所述注册表客户端发送的注销请求给所述注册表服务器端。当所述注册表服务器端接收到所述注册表客户端发送的注销请求,所述注册表服务器端注销所述注册表客户端的登录信息。然后所述注册表客户端断开与所述注册表服务器端的连接。上述用户程序通过调用注册表客户端登录所述注册表服务器端可以并发执行,可以允许多个用户程序通过各自调用相应的注册表客户端登录所述注册表服务器端,进而由所述注册表服务器端访问所述注册表存储文件。
[0208] 通过上述步骤描述的本发明实施例在无须修改用户程序的代码情况下,就可以将所述用户程序移植到任意类型的操作系统平台下,解决了现有技术中在将用户程序移植时修改该软件中调用注册表相关功能的代码的工作量比较大的问题。
[0209] 本发明实施例还提供一种注册表系统,如图4所示,该系统包括:XML格式的注册表存储文件41,注册表服务器端42,注册表客户端43,注册表操作处理层44,注册表动态链接库45和注册表通信协议46。
[0210] 其中,XML格式的注册表存储文件41,用于存储注册表的信息,并由注册表信息格式实现所述注册表存储文件的结构、项节点、数据节点、节点属性、属性值等的定义。通过GDOME2支持库操作XML格式的注册表存储文件。
[0211] 注册表服务器端42,用于根据读取到的配置文件打开注册表存储文件,接收用户程序通过注册表客户端发送的操作指令,在所述用户程序具有操作权限时,通过注册表操作处理层在所述注册表存储文件中执行所接收到的操作指令,发送所述操作指令的执行结果给所述注册表客户端。
[0212] 所述注册表服务器端42还用于接收所述注册表客户端发送的连接请求指令,并发送所述接收到的连接请求指令的响应消息给所述注册表客户端。所述注册表服务器端42还用于接收所述注册表客户端发送的登录信息,并检测所述登录信息是否正确,在检测到所述登录信息错误时,发送登录失败消息给所述注册表客户端,或者在检测到所述登录信息正确时,发送登录成功消息给所述注册表客户端。
[0213] 所述注册表服务器端42还用于检测所述登录成功的用户程序是否具有操作权限,并在检测到所述用户程序不具有操作权限时,发送操作错误消息给所述注册表客户端。所述注册表服务器端42还用于接收所述注册表客户端发送的注销请求,并注销所述注册表客户端的登录信息。
[0214] 注册表客户端43,用于接收用户程序发送的操作指令,发送所述操作指令给注册表服务器端,接收所述注册表服务器端发送的所述操作指令的执行结果,并通过注册表动态链接库返回给用户程序。
[0215] 所述注册表客户端43还用于发送连接请求指令,并接收注册表服务器端发送的所述连接请求指令响应消息,与所述注册表服务器端建立连接。
[0216] 所述注册表客户端43还用于发送登录信息给注册表服务器端,并从所述注册表服务器端接收登录失败消息,并通过注册表动态链接库将所述接收到的登录失败消息返回给所述用户程序,或从所述注册表服务器端接收登录成功消息。
[0217] 所述注册表客户端43还用于接收注册表服务器发送的操作错误消息,并通过注册表动态链接库将所述接收到的操作错误消息返回给用户程序。
[0218] 所述注册表客户端43还用于发送注销请求给所述注册表服务器端。
[0219] 注册表操作处理层44,用于处理注册表存储文件中数据的维护、操作及权限控制。注册表动态链接库45,用于调用注册表客户端或者提供给用户程序进行移植时调用。注册表通信协议46,用于规范注册表服务器端与注册表客户端的通信规则。
[0220] 采用该系统中所述用户程序通过调用注册表客户端与所述注册表服务器端进行数据通信,同时所述注册表服务器端根据用户程序的操作指令,通过注册表操作处理层进行注册表存储文件的相关操作,从而实现了所述用户程序中需要调用注册表的功能。与现有技术相比,本发明实施例无须修改用户程序的代码,就可以将所述用户程序移植到任意类型的操作系统平台下,解决了现有技术中在将用户程序移植时修改该软件中调用注册表相关功能的代码的工作量比较大的问题。
[0221] 本发明实施例主要应用于计算机操作系统中,基于该注册表系统实现了无需修改本软件的代码就可以使得该软件方便地移植到不同的操作系统平台下,降低了软件移植时进行代码修改的工作量。
[0222] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0223] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。