法律状态公告日
法律状态信息
法律状态
2019-07-23
授权
授权
2016-09-28
实质审查的生效 IPC(主分类):G06F21/62 申请日:20160504
实质审查的生效
2016-08-31
公开
公开
技术领域
本发明涉及自助终端领域,尤其涉及一种基于Linux的注册表服务系统、方法及金融自助设备。
背景技术
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳(shell)的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。
在Linux系统下没有类似Windows系统下的注册表服务,Linux系统下没有临时配置数据的操作接口,也就是存放在内存的临时配置数据的操作接口。
然而出于安全性的考虑,在金融行业应用中,一般使用Linux系统。为了解决数据配置问题,现在的自主可控Linux系统中,可以通过内存配置表确保灾难情况下内存数据的有效备份和还原。但是程序对配置的读取与保存大多在直接在文件中进行,没有统一的接口操作,不方便各个系统间代码兼容移植,而且这种读取数据的速度较慢,无法保证注册表的修改安全和多并发访问的安全。
发明内容
针对上述问题,本发明的目的在于提供一种基于Linux的注册表服务系统、方法及金融自助设备,可实现兼容性好,读写安全与多并发访问安全的注册表服务
本发明提供了一种基于Linux的注册表服务系统,包括:
内存注册表构建单元,用于加载操作系统下的注册表数据文件,并通过数据库接口读取所述注册表数据文件中已保存的配置表数据,在内存中构建内存注册表;
注册表操作单元,用于从注册表编辑器或者用户进程中收集节点数据,并将所述节点数据传输给注册表服务单元;
所述注册表服务单元,用于根据针对所述内存注册表的操作方式,对所述内存注册表中与所述节点数据对应的节点进行相应的操作,并在操作完成后,根据操作结果向所述注册表操作单元返回操作确认符;其中,所述操作方式为读取、写入、删除中的一种。
优选地,所述内存注册表为一种将临时配置数据根据预先设计好的数据结构写入内存中,而不写入磁盘的配置表,其中,所述内存注册表由至少一个节点构成,每个节点包括主节点及子节点,所述主节点包括主节点id,所述子节点包括子节点id及节点数据值。
优选地,所述操作确认码为确认字符或否定应答字符,所述节点数据包括主节点及子节点,所述主节点包括主节点id,所述子节点包括子节点id及节点数据值;所述操作方式为读取;
则所述注册表服务单元具体包括:
第一id获取模块,用于从所述节点数据中获取所述主节点id及所述子节点id;
读取模块,用于将所述主节点id及子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则读取所述节点数据中的节点数据值,并向所述注册表操作单元返回所述节点数据及确认字符;若没有,则向所述注册表操作单元返回否定应答字符;
所述注册表操作单元,还用于在接收到所述确认字符和所述节点数据后, 确认读取操作成功,并将所述节点数据传递至所述注册表编辑器或所述用户进程;在接收到所述否定应答字符后,确认读取操作失败,并向所述注册表编辑器或所述用户进程反馈读取失败信息。
优选地,所述操作确认码为确认字符或否定应答字符,所述节点数据包括主节点id、子节点id、节点数据值及临时数据标记;所述操作方式为写入;
则所述注册表服务单元具体包括:
第二id获取模块,用于从所述节点数据中获取所述主节点id及所述子节点id;
写入模块,用于将所述主节点id及所述子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则将查询到的所述节点的节点数据值修改为所述节点数据的节点数据值;若没有,则将所述节点数据添加到所述内存注册表中;
第一临时数据判断模块,用于判断所述节点数据的临时数据标记是否为0,若是,则向所述注册表操作单元返回确认字符;若不是,则调用所述数据库接口将所述节点数据写入到所述注册表数据文件中,并向所述注册表操作单元返回确认字符。
优选地,所述操作确认码为确认字符或否定应答字符,所述节点数据包括主节点id、子节点id、节点数据值及临时数据标记;所述操作方式为删除;
则所述注册表服务单元具体包括:
第三id获取模块,用于从所述节点数据中获取所述主节点id及所述子节点id;
删除模块,用于将所述主节点id及子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则删除所述节点,并通知第二临时数据判断模块;若没有,则向所述注册表操作单元返回否定应答字符;
所述第二临时数据判断模块,用于判断所述节点数据的临时数据标记是否为0,若是,则向所述注册表操作单元返回确认字符;若不是,则调用所述数据 库接口将所述节点数据从所述注册表数据文件中删除,并向所述注册表操作单元返回确认字符。
本发明还提供一种基于Linux的注册表服务方法,包括:
加载操作系统下的注册表数据文件,并通过数据库接口读取所述注册表数据文件中已保存的配置表数据,在内存中构建内存注册表;
从注册表编辑器或者用户进程中收集节点数据;
根据针对所述内存注册表的操作方式,对所述内存注册表中与所述节点数对应的节点进行相应的操作,并在操作完成后,根据操作结果生成操作确认符;其中,所述操作方式为读取、写入、删除中的一种。
优选地,所述内存注册表为一种将临时配置数据根据预先设计好的数据结构写入内存中,而不写入磁盘的配置表,其中,所述内存注册表由至少一个节点构成,每个节点至少包括主节点id、子节点id及节点数据值。
优选地,所述操作确认码为确认字符或否定应答字符,所述节点数据包括主节点id、子节点id及节点数据值;所述操作方式为读取;
则所述根据所述节点数据及针对所述内存注册表的操作方式,对所述内存注册表进行相应的操作,并在操作完成后,根据操作结果生成操作确认符,具体包括:
从所述节点数据中获取所述主节点id及所述子节点id;
将所述主节点id及子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则读取所述节点数据中的节点数据值,并生成确认字符;若没有,则生成否定应答字符。
优选地,所述操作确认码为确认字符或否定应答字符,所述节点数据包括主节点id、子节点id、节点数据值及临时数据标记;所述操作方式为写入;
则所述根据所述节点数据及针对所述内存注册表的操作方式,对所述内存注册表进行相应的操作,并在操作完成后,根据操作结果生成操作确认符,具体包括:
从所述节点数据中获取所述主节点id及所述子节点id;
将所述主节点id及所述子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则将查询到的所述节点的节点数据值修改为所述节点数据的节点数据值;若没有,则将所述节点数据添加到所述内存注册表中;
判断所述节点数据的临时数据标记是否为0,若是,则生成确认字符;若不是,则在调用数据库接口将所述节点数据写入到所述注册表数据文件中后,生成确认字符。
优选地,所述操作确认码为确认字符或否定应答字符,所述节点数据包括主节点id、子节点id、节点数据值及临时数据标记;所述操作方式为删除;
则所述根据所述节点数据及针对所述内存注册表的操作方式,对所述内存注册表进行相应的操作,并在操作完成后,根据操作结果生成操作确认符,具体包括:
从所述节点数据中获取所述主节点id及所述子节点id;
将所述主节点id及子节点id传入所述内存注册表的读取数据接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则删除所述节点,并判断所述节点数据的临时数据标记是否为0,若是,则生成确认字符;若不是,则在调用数据库接口将所述节点数据从所述注册表数据文件中删除后,生成确认字符;若没有,则生成否定应答字符。
本发明还提供一种金融自助设备,包括上述的Linux的注册表服务系统。
本发明实施例提供的基于Linux的注册表服务系统及方法,通过在内存中构建内存注册表,并在内存中对内存注册表中进行节点数据的操作,可为运行的所有软件提供一种统一、高效、安全的注册表配置数据操作,满足各个进程间数据共享的需求。同时还可以实现与windows注册表兼容的文件格式,提供高效的windows平台代码移植接口,可使windows代码快速移植到Linux内核平台。此外,由于是在内存中进行操作的,还可提供高效的存储,并保证注册表读写安全与多并发访问的安全。
本发明所述基于Linux的注册表服务系统及方法应用于金融自助设备(如自助柜员机ATM、远程视频柜员机VTM、清分机等),可实现系统自主可控,提高设备的安全性。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的基于Linux的注册表服务系统的结构示意图。
图2是本发明实施例提供的基于Linux的注册表服务系统的工作原理图。
图3是本发明实施例提供的内存注册表的数据结构图。
图4是图3所示的内存注册表的节点的数据结构图。
图5是本发明实施例提供的注册表操作单元的工作原理图。
图6是本发明实施例提供的注册表服务单元的一种结构示意图。
图7是本发明实施例提供的注册表服务单元的一种结构示意图。
图8是本发明实施例提供的注册表服务单元的一种结构示意图。
图9是本发明实施例提供的基于Linux的注册表服务方法的流程示意图。
图10是本发明实施例提供的注册表操作单元的执行流程图。
图11为本发明实施例提供的内存注册表构建单元与注册表服务单元的执行流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1及图2,本发明提供一种基于Linux的注册表服务系统(以下称为注册表服务系统)100,所述注册表服务系统100包括内存注册表构建单元10、注册表操作单元20及注册表服务单元30,其中:
所述内存注册表构建单元10,用于加载操作系统下的注册表数据文件,并通过数据库接口读取所述注册表数据文件中已保存的配置表数据,在内存中构建内存注册表。
在本发明实施例中,所述注册表服务系统100启动后,所述内存注册表构建单元10可加载操作系统下的注册表数据文件(对于Linux系统,可加载/etc/reg.dat),并通过数据库接口(如sqlite3接口)读取所述注册表数据文件中已保存的配置表数据,在内存中构建内存注册表。
在本发明实施例中,所述内存注册表为一种将临时配置数据根据预先设计好的数据结构写入内存中,而不写入磁盘的配置表,且所述内存注册表会在系统重启后进行重置,即在系统重启后,所述内存注册表就会被删除。
请一并参阅图3,所述内存注册表由若干个节点构成,其中,每个节点包括至少一个主节点(tabRegNode)和一个子节点(tabRegItem),所述主节点与所述子节点的数据结构如图4所示,其中,FK为数据库外键,PK为数据库主键。
所述注册表操作单元20,用于从注册表编辑器或者用户进程中收集节点数据,并将所述节点数据传输给注册表服务单元30。
在本发明实施例中,所述节点数据也具有如图4所示的数据结构。
请一并参阅图5,在本发明实施例中,所述注册表操作单元20可通过调用Reg>
在本发明实施例中,在将所述封装过的节点数据发送给所述注册表服务单元30后,所述注册表操作单元20等待所述注册表服务单元30返回的操作确认码。其中,所述操作确认码可包括返回确认字符(Ack)及否定应答字符(Nak)。
所述注册表服务单元30,用于针对所述内存注册表的操作方式,对所述内 存注册表中与所述节点数据对应的节点进行相应的操作,并在操作完成后,根据操作结果向所述注册表操作单元20返回操作确认符;其中,所述操作方式为读取、写入、删除中的一种。
在本发明实施例中,对所述对内存注册表的操作方式主要有读取、写入(包括修改和添加)、删除。下面将逐一进行说明。
请一并参阅图6,当所述操作方式为读取时:
则所述注册表服务单元30具体包括:
第一id获取模块31,用于从所述节点数据中获取所述主节点id及所述子节点id。
在本发明实施例中,所述注册表服务单元30在接收到所述节点数据后,解析所述节点数据后,从所述节点数据中获取主节点id和子节点id。
读取模块32,用于将所述主节点id及子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则读取所述节点数据中的节点数据值,并通过tcp/ip协议向所述注册表操作单元20返回确认字符(Ack)及封装过的节点数据;若没有,则通过tcp/ip协议向所述注册表操作单元20返回否定应答字符(Nak)。
在本发明实施例中,所述注册表操作单元20在接收到所述确认字符和所述节点数据后,确认读取操作成功,并对所述节点数据进行解析后,将所述节点数据传递至所述注册表编辑器或所述用户进程;在接收到所述否定应答字符后,确认读取操作失败,并向所述注册表编辑器或所述用户进程反馈读取失败信息。
请参阅图7,当所述操作方式为写入(包括修改及添加):
则所述注册表服务单元30具体包括:
第二id获取模块33,用于从所述节点数据中获取所述主节点id及所述子节点id。
写入模块34,用于将所述主节点id及所述子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节>表中。
第一临时数据判断模块35,用于判断所述节点数据的临时数据标记是否为0,若是,则向所述注册表操作单元20返回确认字符;若不是,则调用所述数据库接口将所述节点数据写入到所述注册表数据文件中,并向所述注册表操作单元20返回确认字符。
在本发明实施例中,若所述临时数据标记(tmp)为0,则说明所述节点数据为临时数据,只需在所述内存注册表上进行写入即可,即不需要存储到磁盘上。若不为0,则说明所述节点数据为非临时数据,则除了在所述内存注册表上写入,还需要写入到操作系统下的注册表数据文件中(即写入到/etc/reg.dat中)。
在本发明实施例中,所述注册表操作单元20在接收到所述确认字符和所述节点数据后,确认写入操作成功;在接收到所述否定应答字符后,确认写入操作失败,并向所述注册表编辑器或所述用户进程反馈写入失败信息。
请参阅图8,当所述操作方式为删除时:
则所述注册表服务单元30具体包括:
第三id获取模块36,用于从所述节点数据中获取所述主节点id及所述子节点id。
删除模块37,用于将所述主节点id及子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则删除所述节点,并通知第二临时数据判断模块38;若没有,则向所述注册表操作单元20返回否定应答字符;
所述第二临时数据判断模块38,用于判断所述节点数据的临时数据标记是否为0,若是,则向所述注册表操作单元返回确认字符;若不是,则调用所述数据库接口将所述节点数据从所述注册表数据文件中删除,并向所述注册表操作单元返回确认字符。
在本发明实施例中,所述注册表操作单元20在接收到所述确认字符和所述节点数据后,确认删除操作成功;在接收到所述否定应答字符后,确认删除操作失败,并向所述注册表编辑器或所述用户进程反馈删除失败信息。
需要说明的是,上述实施例中,若所述注册表操作单元20在预定时间内未接收到所述注册表服务单元30返回的操作确认码时,则所述注册表操作单元20报告通信超时,通知所述注册表编辑器或者用户操作失败,并结束本次操作。
综上所述,本发明实施例提供的注册表服务系统100,通过所述内存注册表构建单元10在内存中构建内存注册表,所述注册表服务单元30在内存注册表中进行数据的操作,可为运行的所有软件提供一种统一、高效、安全的注册表配置数据的操作,满足各个进程间数据共享的需求。同时还可以实现与windows注册表兼容的文件格式,提供高效的windows平台代码移植接口,可使windows代码快速移植到Linux内核平台。此外,由于内存注册表的操作是在内存中进行地,可提供高效的存储,并保证注册表读写安全与多并发访问的安全。
请一并参阅图9,本发明还提供一种基于Linux的注册表服务方法,所述注册表服务方法可由上述的注册表服务系统100来执行,并包括如下步骤:
S101,加载操作系统下的注册表数据文件,并通过数据库接口读取所述注册表数据文件中已保存的配置表数据,在内存中构建内存注册表。
在本发明实施例中,所述注册表服务系统启动后,可加载操作系统下的注册表数据文件(对于Linux系统,可加载/etc/reg.dat),并通过数据库接口(如sqlite3接口)读取所述注册表数据文件中已保存的配置表数据,在内存中构建内存注册表。
其中,所述内存注册表为一种将临时配置数据根据预先设计好的数据结构写入内存中,而不写入磁盘的配置表。所述内存注册表的具体数据结构可参考图3及图4.
S102,从注册表编辑器或者用户进程中收集节点数据。
在本发明实施例中,注册表操作单元20可通过调用Reg API读/写数据接口, 将所述节点数据传入接口,此后,所述注册表操作单元20将所述节点数据封装成适于传输的数据流格式(如二进制数据流)后,通过TCP/IP协议发送到所述注册表服务单元30。
S103,根据针对所述内存注册表的操作方式,对所述内存注册表中与所述节点数据对应的节点进行相应的操作,并在操作完成后,根据操作结果生成操作确认符;其中,所述操作方式为读取、写入、删除中的一种。
在本发明实施例中,对所述对内存注册表的操作方式主要有读取、写入(包括修改和添加)、删除。下面将逐一进行说明。
所述操作方式为读取;
则步骤S103具体包括:
S1031,从所述节点数据中获取所述主节点id及所述子节点id。
S1032,将所述主节点id及子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则读取所述节点数据中的节点数据值,并生成确认字符;若没有,则生成否定应答字符。
在本发明实施例中,所述注册表操作单元20在接收到所述确认字符和所述节点数据后,确认读取操作成功,并对所述节点数据进行解析后,将所述节点数据传递至所述注册表编辑器或所述用户进程;在接收到所述否定应答字符后,确认读取操作失败,并向所述注册表编辑器或所述用户进程反馈读取失败信息。
当所述操作方式为写入,则步骤S103具体包括:
S1033,从所述节点数据中获取所述主节点id及所述子节点id。
S1034,将所述主节点id及所述子节点id传入所述内存注册表的读取接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则将查询到的所述节点的节点数据值修改为所述节点数据的节点数据值;若没有,则将所述节点数据添加到所述内存注册表中。
S1035,判断所述节点数据的临时数据标记是否为0,若是,则生成确认字符;若不是,则在调用数据库接口将所述节点数据写入到所述注册表数据文件中后,生成确认字符。
在本发明实施例中,若所述临时数据标记(tmp)为0,则说明所述节点数据为临时数据,只需在所述内存注册表上进行写入即可,即不需要存储到磁盘上。若不为0,则说明所述节点数据为非临时数据,则除了在所述内存注册表上写入,还需要写入到操作系统下的注册表数据文件中(即写入到/etc/reg.dat中)。
在本发明实施例中,所述注册表操作单元20在接收到所述确认字符和所述节点数据后,确认写入操作成功;在接收到所述否定应答字符后,确认写入操作失败,并向所述注册表编辑器或所述用户进程反馈写入失败信息。
当所述操作方式为删除,则步骤S103具体包括:
S1036,从所述节点数据中获取所述主节点id及所述子节点id。
S1037,将所述主节点id及子节点id传入所述内存注册表的读取数据接口中,并查询所述内存注册表中是否存在与所述节点数据具有相同主节点id及子节点id的节点;若有,则删除所述节点,并判断所述节点数据的临时数据标记是否为0,若是,则生成确认字符;若不是,则在调用数据库接口将所述节点数据从所述注册表数据文件中删除后,生成确认字符;若没有,则生成否定应答字符。
在本发明实施例中,所述注册表操作单元20在接收到所述确认字符和所述节点数据后,确认删除操作成功;在接收到所述否定应答字符后,确认删除操作失败,并向所述注册表编辑器或所述用户进程反馈删除失败信息。
需要说明的是,上述实施例中,若所述注册表操作单元20在预定时间内未接收到所述注册表服务单元30返回的操作确认码时,则所述注册表操作单元20报告通信超时,通知所述注册表编辑器或者用户操作失败,并结束本次操作。
综上所述,本发明实施例提供的基于Linux的注册表服务方法,通过在内存 中构建内存注册表,并在内存中对内存注册表中进行节点数据的操作,可为运行的所有软件提供一种统一、高效、安全的注册表配置数据操作,满足各个进程间数据共享的需求。同时还可以实现与windows注册表兼容的文件格式,提供高效的windows平台代码移植接口,可使windows代码快速移植到Linux内核平台。此外,此外,由于对所述内存注册表的操作是在内存中进行地,可提供高效的存储,并保证注册表读写安全与多并发访问的安全。
请一并参阅图10和图11,图10为所述注册表操作单元的执行流程图。图11为所述内存注册表构建单元与所述注册表服务单元的执行流程图。
(一)读取数据:
S13:注册表系统服务开始运行。
S14:内存注册表构建单元加载/etc/reg.dat文件,通过sqlite3读取已保存配置表数据,构建内存注册表。
S1:注册表操作单元开始被调用。
S2:注册表编辑器或者用户进程构建出节点数据,并传入节点数据。
S3:调用Reg API读数据接口,将节点数据传入接口。
S4:将节点数据封装成二进制数据流。
S5:将二进制数据流通过TCP/IP协议发送到注册表服务单元。注册表操作服务单元将从S15开始运作。
S6:注册表操作单元等待注册表服务单元返回操作确认码,如果返回Ack,跳转执行S8;如果返回Nak,跳转执行S7;如果未有确认码返回,跳转执行S11。
S8:接收Ack数据,确认操作成功。
S9:判断是否为读取操作,若是,则执行S10。
S10:获取到反馈的二进制数据流,还原为节点数据,传送给注册表编辑器或者用户进程。跳转到S12。
S7:接收到Nak数据,读取操作失败,通知注册表编辑器或者用户进程获取失败。跳转到S12。
S11:未有数据返回,报告通信超时,通知注册表编辑器或者用户进程读取 失败。跳转到S12。
S12:读取过程结束。
S15:内存注册表建立TCP/IP连接,等待接收二进制数据流。
S16:判断是否接收到数据,收到数据跳转S18,未收到数据跳转S17。
S17:判断是否结束服务。结束服务跳转到S19,继续运行跳转到S15。
S19:退出注册表服务单元。
S18:解析二进制流数据,构建节点数据。
S20:从节点数据中获取tabRegNode id(主节点id)与tabRegItem id(子节点id)。
S21:判断该数据操作方式,本过程为读取数据,直接跳转S27。
S27:将节点数据传入读取数据接口。
S28:判断内存注册表内是否存在与传入节点相同tabRegNode>
S29:读取节点数据的节点数据值。
S30:通过TCP/IP通信发送Ack和节点数据与注册表操作单元,跳转到S15。
S31:TCP/IP发送Nak与注册表操作单元,跳转到S15。
(二)写入(添加/修改)数据:
S13:注册表服务系统开始运行。
S14:内存注册表构建单元加载/etc/reg.dat文件,通过sqlite3读取已保存配置表数据,构建内存注册表。
S1:注册表操作单元开始被调用。
S2:注册表编辑器或者用户进程构建出节点数据,并传入节点数据。
S3:调用Reg API读数据接口,将节点数据传入接口。
S4:将节点数据封装成二进制数据流。
S5:将二进制数据流通过TCP/IP协议发送到注册表服务单元。注册表服务单元将从S15开始运作。
S6:注册表操作单元等待注册表服务单元返回操作确认码,如果返回Ack, 跳转执行S8;如果返回Nak,跳转执行S7;如果未有确认码返回,跳转执行S11。
S8:接收Ack数据,确认操作成功。
S9:判断是否为读取操作,该应该过程不是读取操作,跳转到S12
S7:接收到Nak数据,添加/修改数据操作失败,通知注册表编辑器或者用户进程操作失败。跳转到S12。
S11:未有数据返回,报告通信超时,通知注册表编辑器或者用户进程执行失败。跳转到S12。
S12:读取过程结束。
S15:内存注册表建立TCP/IP连接,等待接收二进制数据流。
S16:判断是否接收到数据,收到数据跳转S18,未收到数据跳转到S17。
S17:判断是否结束服务。结束服务跳转到S19,继续运行跳转到S15。
S19:退出注册表服务单元。
S18:解析二进制数据流,构建节点数据。
S20:从节点数据中获取tabRegNode id与tabRegItem id值。
S21:判断该数据操作方式,本过程为添加/修改数据操作,直接跳转S22。
S22:判断内存注册表内是否存在与传入节点数据相同tabRegNode>
S23:直接修改与tabRegNode id与tabRegItem id值相同的节点数据值。跳转到S24。
S38:将节点数据添加入内存注册表中。跳转到S24。
S24:读取临时数据标记tmp,如果为0,跳转S26,否则跳转S25。
S25:调用Sqlite3接口将节点数据写入/etc/reg.dat文件中。跳转S26。
S26:TCP/IP发送Ack与注册表操作单元,确认写入数据成功,跳转到S15。
(三)删除数据:
S13:注册表服务系统开始运行。
S14:内存注册表构建单元加载/etc/reg.dat文件,通过sqlite3读取已保存配置表数据,构建内存注册表。
S1:注册表操作单元开始被调用。
S2:注册表编辑器或者用户进程构建出节点数据,并传入节点数据。
S3:调用Reg API读数据接口,将节点数据传入接口。
S4:将节点数据封装成二进制数据流。
S5:将二进制数据流通过TCP/IP协议发送到注册表服务单元。注册表服务单元将从S15开始运作。
S6:注册表操作单元等待注册表服务单元返回操作确认码,如果返回Ack,跳转执行S8;如果返回Nak,跳转执行S7;如果未有确认码返回,跳转执行S11。
S8:接收Ack数据,确认操作成功。
S9:判断是否为读取操作,该应该过程不是读取操作,跳转到S12
S7:接收到Nak数据,添加/修改数据操作失败,通知注册表编辑器或者用户进程操作失败。跳转到S12。
S11:未有数据返回,报告通信超时,通知注册表编辑器或者用户进程执行失败。跳转到S12。
S12:读取过程结束。
S15:内存注册表建立TCP/IP连接,等待接收二进制流数据。
S16:判断是否接收到数据,收到数据跳转S18,未收到数据跳转到S17。
S17:判断是否结束服务。结束服务跳转到S19,继续运行跳转到S15。
S19:退出注册表操作服务单元。
S18:解析二进制数据流,构建节点数据。
S20:从节点数据中获取tabRegNode id与tabRegItem id。
S21:判断该数据操作方式,本过程删除数据操作,直接跳转S32。
S32:判断内存注册表内是否存在与传入节点数据相同tabRegNode>
S33:删除所述内存注册表中与tabRegNode>
S34:TCP/IP发送Nak注册表操作单元,通知删除失败,跳转到S15。
S35:读取tmp临时数据标记,如果为0,跳转S36,否则跳转S37。
S37:调用Sqlite3接口将节点数据从/etc/reg.dat文件中删除。跳转S37。
S37:TCP/IP发送Ack与注册表操作单元,确认删除数据成功,跳转到S15。
综上所述,本发明实施例提供的注册表服务方法,通过构建内存注册表,并在内存注册表中进行节点数据的操作,可为运行的所有软件提供一种统一、高效、安全的注册表配置数据操作,满足各个进程间数据共享的需求。同时还可以实现与windows注册表兼容的文件格式,提供高效的windows平台代码移植接口,可使windows代码快速移植到Linux内核平台。此外,由于采用内存注册表的操作方式,可提供高效的存储,并保证注册表读写安全与多并发访问的安全。
本发明还提供一种金融自助设备,所述金融自助设备可为自助柜员机ATM、远程视频柜员机VTM、清分机等,其包括上述的基于Linux的注册表服务系统100(或者包括与所述注册表服务方法对应的程序代码)。所述金融自助设备可实现系统自主可控,并提高了设备的安全性。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
机译: 基于LINUX的注册服务系统和方法,以及金融自助服务设备
机译: 基于活动模板库(ATL)和金融自助服务的设备管理方法和系统
机译: 基于金融自助服务设备的认证方法和装置