保存到注册表中

这一章主要讲解Windows CE.NET下注册表相关技术。

1、 对象存储(object store)
  对象存储是Windows CE默认的数据存储机制。任何新创建的内核中都默认包含对象存储器。对象存储的实质是在RAM中创建一个文件系统,将文件保存在RAM中,这些文件来源于ROM。当设备启动时,引导程序将ROM中的内核文件解压并存放在RAM中。"/windows"目录就是基于对象存储的。对象存储的特点是文件可以压缩、支持事务机制(和数据库中的事务机制相似)、数据I/O相对较快。

  • A、对象存储中的对象类型包括文件、目录、数据库、记录、数据库卷。CE为每个对象分配一个对象ID(CEOID)。访问或者操作任何对象的前提是得到该对象ID。
  • B、CE能够自动压缩所有对象存储中的文件(CE提供了一个选项供OEM设置是否能够自动压缩文件)。所以文件没有压缩或不压缩的标志,但是有一个标志,标明此文件存在于ROM还是RAM中。一个文件最大长度可达到4 GB。
  • C、CE提供了三种文件系统:基于ROM的文件系统、基于RAM的文件系统、FAT文件系统。
  • 2、 注册表(registry)
      CE下注册表和其它windows操作系统中注册表概念和结构基本相同。

  • A、CE下注册表限制:键名最大长度255个字符; 数据最大 4KB;子键深度最大值 16层。
  • B、根键有HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS。
  • C、操作注册表函数:
    • i. 打开RegOpenKeyEx 和创建RegCreateKeyEx 
    • ii. 读RegQueryValueEx写RegSetValueEx 
    • iii. 枚举入口或子键RegEnumValue、RegEnumKeyEx 
    • iv. 删除入口或子键RegDeleteValue、RegDeleteKey  
    • v. 关闭RegCloseKey
  • 3、CE下注册表类型
      分为基于RAM的注册表和基于HIVE的注册表。

     

  • A、基于RAM的注册表,也叫基于对象存储(oject storage)的注册表。用于将注册表数据全部保存在RAM中。
    • i. 从CE v1.0开始到CE .NET之前,仅采用此技术来保存注册表。每个新创建的内核都默认采用此技术来保存注册表。
    • ii. 适合频繁热启动而不冷启动的设备。系统关闭时提供低电源给RAM。如果断电,重新启动设备后,系统将从内核中重新读取注册表数据到RAM。当然以前保存的用户数据已经丢失。
    • iii. 基于RAM的注册表也能够永久保存注册标数据。CE提供了两个机制。
      • 1) 第一种机制的设计思路是在设备关闭前调用RegCopyFile函数将整个注册表数据以文件形式保存到永久存储器上。重新启动设备时,调用RegRestoreFile函数将文件全部读出到RAM中。但是这时必须一次热启动才能使恢复的注册表数据有效。所以每次启动就多出一次热启动。好在热启动非常快,几秒钟的时间。
      • 2) 另一种机制可以避免前一种机制的需要两次启动的缺点。但也有它的缺点。OEM(原始设备制造商)可以在OAL层编写WriteRegistryToOEM and ReadRegistryFromOEM两个函数,内核在启动时会自动调用ReadRegistryFromOEM函数来读注册表数据。而应用程序调用RegFlushKey函数时,这个函数用调用WriteRegistryToOEM函数写注册表数据到永久存储器上。这个机制避免了两次启动的缺陷。但问题出现在内核启动时,调用ReadRegistryFromOEM之前文件系统驱动程序还没加载,那就无法打开、读取文件。CE帮助文件中说解决办法是将从永久存储器中读取数据的代码加到ReadRegistryFromOEM中。帮助中说的意思可不是调用ReadFile这么简单的,因为文件系统驱动程 序还没加载。
      • 3) 个人建议:如果要采用基于RAM的注册表保存机制,而且要求永久保存注册表数据,使用第一种机制比较容易。
  • B、 基于HIVE的注册表。用于将注册表数据全部或部分保存到永久存储器上。
    • i.它是从CE.NET开始采用的新技术。适合经常冷启动而不热启动的设备。
    • ii.支持多用户信息分别保存。当一个用户登录时,加载这个用户的注册表数据,注销时卸载这个用户的注册表数据。
    • iii. HIVE是指一组键,包括子键、键值、数据。是保存或者加载注册表数据的单位。分为系统HIVE(system hive)、用户HIVE(uer hive)、引导HIVE(boot hive)。
      • 1) 系统HIVE包含了关于系统的设置信息。具体保存注册表中HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_USERS键下所有数据。保存系统HIVE的文件的路径在【HKEY_LOCAL_MACHINE/init/BootVars】下,键名为"systemhive",键值为文件的路径。默认为"/Documents and Settings/system.hv"。
      • 2) 用户HIVE包含了一个用户的信息。具体保存注册表中HKEY_CURRENT_USER键下所有数据。保存用户HIVE的文件的路径同样为【HKEY_LOCAL_MACHINE/init/BootVars】下,键名为"profiledir",键值为所有用户HIVE的共同目录。默认为"/Documents and Settings",在这个目录下包含了以每个用户名命名的子目录。子目录里含有一个文件,默认文件名为user.hv。
      • 3) 引导HIVE保存在ROM(内核)中。具体保存内容同系统HIVE一样。当解压内核并加载注册表时,系统先将引导HIVE数据读出,引导HIVE包含了永久存储器的驱动程序和文件系统的驱动程序,这些驱动加载后,系统HIVE被加载,然后引导HIVE被释放。因为引导HIVE被包含在内核中,所以存在一种情况:如果重新做了一个新内核,引导HIVE中的数据同系统HIVE可能不相同。那么系统该加载哪个版本好呢?为此,CE在生成每个内核时都做了一个标志。而系统HIVE也存在这样一个标志,当加载引导HIVE时,如果引导HIVE和系统HIVE的标志不相同,系统会删除系统HIVE文件,然后重新创建一个文件并从引导HIVE复制数据。
    • iv. 永久保存注册表数据
      Windows CE.NET采用新的注册表保存技术――基于HIVE的注册表,的确让人很兴奋,在这之前基于Windows CE的设备,大多数采用给RAM供电方式来保存注册表数据,虽然也可以通过RegCopyFile函数永久保存,但毕竟启动时还要再热启动一次,有了基于HIVE的技术,启动时系统会自动加载数据,免去了热启动的麻烦,而且当内核更新升级时,你不用担心保存在永久存储器上的系统HIVE文件影响你新的内核,系统会自动判断并删除过时的系统HIVE文件。只有拥有了这样的技术,基于CE的产品才算是一个真正的电脑。
      注:关于基于HIVE的注册表的实现,暂不讲解。
  • 下面简单说明 RegCopyFile和RegRestoreFile的用法。
    ///使用基于RAM的注册表,利用RegCopyFile和RegRestoreFile
    ///实现永久保存注册表数据。

    #include <Pkfuncs.h>
    #include <winbase.h>
    CString  strRegBackup = L"//hard disk//RegBackup.reg";
    CString  strTmp      = L"//windows//temp.reg";
    导出。在系统关闭前。
    if(! RegCopyFile(strTmp))     ///导出注册表,用temp.reg做缓冲用。
    {
    return FALSE;
    }
    if(! CopyFile(strTmp, strRegBackup, FALSE))  ///把temp.reg再复制到RegBackup.reg
    {
    return  FALSE;
    }
    /导入。在系统启动时。
    if(! CopyFile(strRegBackup, strTmp, FALSE))
    {
    return  FALSE;
    }
    if(! RegRestoreFile(strTmp))  ///恢复注册表
    {
    return  FALSE;
    }
    if(! KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL)) ///重新启动
    {
    return  FALSE;
    }
    

winCE 注册表相关讨论相关推荐

  1. 【开发工具集】注册表相关说明及查询网站推荐——注册表字段说明网站

    注册表相关项和字段的说明 Windows Resource Kit: Technical Reference to the Registry 以HKEY_LOCAL_MACHINE,点击就能看到关于H ...

  2. arcgis 卸载和注册表相关总结

    如何完全卸载ArcGIS 为大家演示如何完全卸载ArcGIS. 方法/步骤 1 打开控制面板,找到"卸载程序". 2 选择卸载程序,在新界面中找到与ArcGIS有关的程序. 3 右 ...

  3. Windows注册表相关示例(重装Chrome、思迅条码软件、清除远程痕迹等)

    彻底清除Chrome,先卸载Chrome,然后把相关的文件夹全部删除,搜索Google 如:C:\Users\Tony\AppData\Local\Google Chrome安装之前再清理注册表,重启 ...

  4. Visual Stdio 注册表相关路径

    VS相关的配置路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio 环境变量路径 HKEY_LOCAL_MACHINE\SYSTEM\Curren ...

  5. week7 day2 表相关操作

    week7 day2 表相关操作 一. 存储引擎介绍 1.1 什么是存储引擎 1.2 MySQL支持的存储引擎 MyISAM和InnoDB两个存储引擎的区别 1.3 使用存储引擎 二. 表介绍 三. ...

  6. python学习 day41之MySQL表相关操作续集

    MySQL表相关操作续集 七 数据类型 介绍 mysql常用数据类型概览 数值类型 1.整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 指令验证 2.浮 ...

  7. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  8. mysql数据表关联操作步骤_MySQL数据库(三)—— 表相关操作(二)之约束条件、关联关系、复制表...

    表相关操作(二)之约束条件.关联关系.复制表 一.约束条件 1.何为约束 除了数据类型以外额外添加的约束 2.约束条件的作用 为了保证数据的合法性,完整性 3.主要的约束条件 NOT NULL #标识 ...

  9. WINCE 注册表编辑器

    以前编写了一个WINCE注册表编辑器,因为只提供了X86平台的,而下载空间出了点问题,现在改在另外的下载空间了.而且另外提供了ARM平台和MIPSII 平台.需要的朋友可以http://www.esn ...

最新文章

  1. MapGuide应用开发系列(四)---- 如何运行第一个.net实例代码
  2. java异常处理试题答案_Java 面试题和答案 - (下)
  3. chmod 是一条在Unix系统中用于控制用户对文件的权限的命令
  4. SpringBoot Test及注解详解(含Mockito)
  5. 文件的创建与读取 文件的数据添加
  6. 东明县计算机学校,东明县职业中等专业学校2021年招生信息
  7. 万方服务器维护,设备管理与维修 知网、维普、万方
  8. SPA单页应用的优缺点
  9. 阿里云RDB-MySQL5.7数据库:Specified key was too long; max key length is 767 bytes;
  10. 基于任务的异步模式(TAP)
  11. 设置SUID用于提权或降权
  12. linux换终端的背景颜色,linux 终端背景色修改
  13. android excel在线制作教程,Excel手机表格制作软件
  14. 献给2020年度虚假繁荣程序员的自己
  15. 用 DiskGenius 解决移动硬盘变 RAW 问题
  16. opus编解码的使用
  17. access2007 mysql_Access2007基础教程:开始使用Access 2007
  18. 恒生股票交易接口api主要作用在哪里?
  19. iOS 封装WebView 控制器
  20. mysql 判断一年有多少个星期一

热门文章

  1. NN模型设置--网络整体结构设计
  2. volatile,内存屏障
  3. 视频怎么录制鼠标?有什么需要注意的事项?
  4. nginx配置:woker_rlimit_nofile工作进程最大打开文件数
  5. adb 钉钉自动打卡
  6. 数据库查询: managedQuery() 函数过时
  7. 做程序员需要学历吗?
  8. 华为联运游戏或应用审核驳回:签名不一致排查指导
  9. Nginx中配置服务的反向代理(服务器集群技术)
  10. 海思芯片-Proc调试信息查看-视频输入输出信息-电压信息