英创信息技术WinCE RAM-Based与Hive-Based注册表介绍

描述

Windows Embedded CE嵌入式操作系统支持两种不同的注册表类型:RAM-based注册表和Hive-based注册表。

RAM-based注册表将所有注册表信息保存在对象存储(object store)中,对象存储可以看作是WinCE系统在内存中永久的虚拟RAM磁盘,因此要保存注册表信息,需要把注册表转存到具有掉电保护的RAM介质中,为此CE提供了转存及恢复注册表的底层函数。如果没有对注册表进行这样的转存及恢复,则系统总是使用缺省的注册表。

Hive-based注册表将注册表数据存储为文件,注册表文件可以存储在任何文件系统中。将注册表存储在非易失的存储介质上(比如Flash),就不需要类似RAM-based注册表的备份与恢复操作。

RAM-based注册表通常用在总是使用热启动,很少甚至从不冷启动的系统中,Windows Embedded CE6.0及以后版本,默认采用Hive-based注册表,英创公司的WinCE系列工控主板默认使用Hive-based注册表,注册表文件存储在NandFlash中。

WinCE在系统启动过程中会在注册表里添加信息,最典型的就是在注册表中生成驱动的Active 项,如果是Hive-based注册表,则意味着WinCE在整个启动过程中会不停写盘,在大多数情况下这没有任何问题,但如果系统使用环境供电不稳定,在系统启动过程中频繁断电,则有可能导致注册表损坏。而对RAM-based注册表,每次系统启动时都会将内核中的默认注册表加载到RAM中,系统启动过种中生成的注册表信息也写在RAM中,因此不会有注册表被写坏的问题。所以从启动的可靠性来看,RAM-based的注册表方式优于Hive-based注册表方式。

为了提高主板的可靠性,我们在BSP中增加了支持RAM-based注册表的底层转存及恢复功能。所设计的转存及恢复功能,主要是针对那些在实际的应用中,必须保存的相关信息。比如触摸屏较准参数,网络参数等。为此我们对内核进行了更新,新的内核在采用RAM-based注册表同时,也能保存一些必要的注册表数据。

英创WinCE RAM-based注册表版本内核目前能保存以下注册表信息:

  注册表功能 注册表
1 触摸屏校准参数 [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
'CalibrationData'=''
2 网络1参数 [HKEY_LOCAL_MACHINE\Comm\ENET1\Parms\TcpIp]
'EnableDHCP'=dword:0
'UseZeroBroadcast'=dword:0
'DefaultGateway'='192.168.201.19'
'IpAddress'='192.168.201.213'
'Subnetmask'='255.255.255.0'
'DNS'='61.139.2.69'
3 网络2参数 [HKEY_LOCAL_MACHINE\Comm\ENET2\Parms\TcpIp]
'EnableDHCP'=dword:0
'UseZeroBroadcast'=dword:0
'DefaultGateway'='192.168.201.19'
'IpAddress'='192.168.201.213'
'Subnetmask'='255.255.255.0'
'DNS'='61.139.2.69'
3 系统语言设置 [HKEY_LOCAL_MACHINE\MUI]
'SysLang'=dword:804
[HKEY_LOCAL_MACHINE\MUI]
'DefaultLCID'=dword:804
[HKEY_CURRENT_USER\MUI]
'CurLang'=dword:804

表1

使用RAM-based注册表时,无论是由控制面板、远程注册表工具或通过程序代码直接修改了上面例出的注册表项后,都需要调用RegFlushKey函数才能真正保存注册表信息。下面是示例代码:

HKEY hOpenKey;
// 打开任意注册表键
RegOpenKeyEx (HKEY_LOCAL_MACHINE, L'HARDWARE\\DEVICEMAP\\TOUCH', 0, 0, &hOpenKey);
// 调用RegFlushKey会触发系统保存注册表
RegFlushKey( hOpenKey );
// 关闭打开的注册表
RegCloseKey( hOpenKey);

我们将上面代码封装成了一个小工具RegFlushKey,放在系统的控制面板中,方便调试时使用。比如用户通过控制面板的笔针工具较准完触摸屏后,再点击运行一次RegFlushKey,触摸屏较准数据就保存了。

嵌入式主板

图1

根据用户实际需求,我们会不断添加保存的注册表项,本文档表1也会同步更新。

与hive-based注册表相比,使用RAM-based注册表还有些需要注意的地方,比如“拨号连接”。在hive注册表的系统中,通过控制面板或英创提供的RasEntry程序新建拨号连接后,对应的注册表就已经自动保存了,系统断电重启不会丢失,因此在hive注册表情况下,拨号连接只需要建立一次。而RAM-based注册表不能保存这些信息,所以系统每次启动后都需要新建拨号连接。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分