WinCE下的注册表可以分为两种,一种是RAM based,另外一种是HIVE based了.这要根据你在PB里添加的是哪种配置. 用PB向导新建的WinCE工程文件默认会用RAM based. Hive 注册表可以实现掉电不丢失数据.那它是如何实现这种机制的呢. RAM based 注册表因为是把信息保存在内存中的,所以掉电之后信息会丢失(现在有很多消费电子类产品用后备电池在主电源切断后继续给内存供电以实现保存数据). Hive的机制就是把注册表放在磁盘里的保存,这样就可以做到掉电不丢失数据. 磁盘可以是SD卡或flash等设备. 但是这样我们会马上想到一个问题,加载这些磁盘的驱动也是要读注册表的,好像遇到了鸡生蛋,蛋生鸡的问题. 微软解决这个问题的方法是把注册表分为两部分,第一个叫做boot.hv注册表. 里面放加载保存到磁盘上那部分注册表之前要引导的一些设置,比如磁盘的驱动信息.

Wince下设置hive注册表的方法,网上有不少, 我下面的这篇文章都是前人的成果,以及我在msdn上查到的一些相关资料, 我在板子上实际操作验证过.

下面所有的操作都是在platform.reg下的完成的.

1. Add the Hive-based Registry Catalog item to your OS design.

2. 保证将包含系统HIVE的文件系统驱动程序的注册表信息和存储设备的驱动程序的注册表信息包含在下面的命令中.

; HIVE BOOT SECTION

<your registry settings>

; END HIVE BOOT SECTION

这句话的意思是, 下面所有的设置都必须包含在

; HIVE BOOT SECTION

; END HIVE BOOT SECTION

这两行语句中, 你不要以为它已经注释掉,不起作用了. 前面提到为了实现hive,

注册表被分成了两部分, 一部分是boot.hv,包含在这两行语句的配置,就是这个所谓的boot.hv了.

3. Verify the following registry settings in the Platform.reg file for your OS design.

[HKEY_LOCAL_MACHINE\init\BootVars]

"SystemHive"="<your system hive location>"

"Start DevMgr"=dword:<your value>

"DefaultUser"="<username>"//这个一般设置成default就行了.

"RegistryFlags"=dword:1

下面对各个项做解释.

如果你用"Documents and Settings\\system.hv", hiv e注册表会保存在\HDD\Documents and Settings\system.hv, 所以,如果你想它保存在flash, 就要"SYSTEMHIVE"="NAND Flash\\system.hv" 或者 "SYSTEMHIVE"=” system.hv"(在platform.reg里设置, 如果是第二种写法, 系统会根据其它注册表的键值判断文件系统的类型)

Start DevMgr这个值决定了,加不加载device.exe, 一般情况下,都是把hive注册表放在ram外, 所以要加载, 所以一般为1

"DefaultUser" Set the following registry value in the Platform.reg file for your OS design to determine the default hive to load.

"RegistryFlags “ HIVE注册表也是在内存中运行的,不同的是启动的时候会从磁盘上去读改动的表项,因为这样才能保证速度,所以你做的的注册表改动也是在内存中做的,这个时候如果你不掉用FlushRegister去将内存中的数值保存到磁盘上那么这些改动还是会丢失的。正常情况下,CE能够保证重要的注册表数据能够从内存刷到(Flush)永久存储器上。但是这并不能完全保证所有数据都能完整地保存而不丢失,所以要保证万无一失,应该主动地调用RegFlushKey函数强制将内存中的数据刷到永久存储器上。这个函数的参数只有一个,就是注册表分支。CE还增加一个上面registryFlags这个注册表项它的作用是每当函数RegCloseKey被调用时都自动调用RegFlushKey函数。

4 Set the following flag bit on each driver that is loaded during the first boot phase.

[HKEY_LOCAL_MACHINE\Drivers\...]

"Flags"=dword:1000

这个标志是一个位掩码,它可以和其它已经存在的"Flags"或运算。值1000表示此驱动程序只加载一次,这样device.exe就不会把当前驱动程序加载两次了。 如果是要把注册表保存在flash里, 在nandflash的相关驱动中添加"flags"=dword:1000. 举个例子:

[HKEY_LOCAL_MACHINE\Drivers\BlockDevice\FlashDrv]

"Prefix"="DSK"

"Dll"="FLASHDRV.dll"

"Order"=dword:0

"Ioctl"=dword:4

"Profile"="FlashDrv"

"FriendlyName"="MS Flash Driver"

"MountFlags"=dword:11

"BootPhase"=dword:1

"Flags"=dword:1000

5. Set the MountFlags registry value equal to DWORD:2.

Set this value on the Storage Manager profile of the file system driver for the medium that contains the registry. This indicates that the file system contains the following registry key.

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\<ProfileName>\<FileSystemName>]

"MountFlags"=dword:2

//比如,如果是放在nand flash中, 路径就应该是这样的.

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NandMSFlash\FATFS]

当然,最后一项说明用的文件系统是FAT, 如果你用bins作为文件系统, 就是下面这样

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NandMSFlash\BINS]

如果是放在硬盘里, 路径是这样的.

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]

虽然pb5.0的关于hive的帮助中说在相关的注册表项中添加mountflag=dword:2,但mountflag的值在ce5.0下是忽视的,具体查看相关文档。所以要使"MountAsBootable"=dword:1, 实际做的时候,先用mounflag,如果不行就用mountasbootable.

下面是一个可用的hive注册表的配置:

;------------------------------HIVE---------------------------------------

; HIVE BOOT SECTION

[HKEY_LOCAL_MACHINE\init\BootVars]

"SYSTEMHIVE"="system.hv"

"Start DevMgr"=dword:1

"RegistryFlags"=dword:1

[HKEY_LOCAL_MACHINE\init\BootVars]

"DefaultUser"="default"

[HKEY_LOCAL_MACHINE\Drivers\BlockDevice\FlashDrv]

"Prefix"="DSK"

"Dll"="FLASHDRV.dll"

"Order"=dword:0

"Ioctl"=dword:4

"Profile"="FlashDrv"

"FriendlyName"="MS Flash Driver"

"MountFlags"=dword:11

"BootPhase"=dword:1

"Flags"=dword:1000

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\FlashDrv]

"DriverPath"="Drivers\\BlockDevice\\FlashDrv"

"LoadFlags"=dword:1

"MountFlags"=dword:11

"BootPhase"=dword:1

"Flags"=dword:1000

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDrv]

"DefaultFileSystem"="FATFS"

"PartitionDriver"="mspart.dll"

"AutoMount"=dword:1

"AutoPart"=dword:1

"AutoFormat"=dword:1

"Folder"="ResidentFlash"

"Name"="Microsoft Flash Disk"

"BootPhase"=dword:0

"Flags"=dword:1000

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDrv\FATFS]

"FriendlyName"="FAT FileSystem"

"Dll"="fatfsd.dll"

"Flags"=dword:00280014

"Paging"=dword:1

"CacheSize"=dword:0

"EnableCacheWarm"=dword:0

"EnableCache"=dword:1

"MountFlags"=dword:2

; END HIVE BOOT SECTION

;------------------------------HIVE---------------------------------------

wince Hive注册表实现机制相关推荐

  1. pe方式修改计算机名,通过修改PE注册表实现更换WinPe文件夹浏览方式

    通过修改PE注册表实现更换WinPe文件夹浏览方式 发布时间:2014-04-04 16:19:31   作者:佚名   我要评论 WinPe中的文件夹浏览方式早已看的不耐烦了,想不想换个品味呢?如果 ...

  2. 修改注册表实现程序开机自启动

    注册表简介 何为注册表 注册表相当于Windows下的一个庞大的层次性数据库. 基本上有责系统所有的配置信息 注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windo ...

  3. 注册表实现欢迎界面的修改

    原文件视频地址 欢迎界面 欢迎屏幕上写字 注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\MicrosoftWindows NT\CurrentVersion\Winlogon ...

  4. Windows修改注册表实现开机自启动

    1.打开注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 2.右键添加字符串值 3.添加想要开机自启动运 ...

  5. 重装系统后通过修改注册表实现记录还原

    安装前先备份部分数据 微信.QQ聊天记录 Navicat Premium 记录 SecureCRT 记录 WiFi 信息 其他需要备份的信息 以上备份的信息中微信.QQ可以在安装时就将安装目录设置到 ...

  6. 修改注册表实现改变CPU名称 <偷梁换柱>

    我们在设置-系统-关于 中可以查看自己的CPU型号,但是往往很多人的电脑CPU配置都很一般,于是有人就说"那能不能改一下显示的内容捏?" 答案当然是可以的~ (修改注册表有风险,请 ...

  7. Qt 操作注册表实现文件关联

    最近,项目中经常碰到需要先打开软件,然后再加载相应的工程文件这样的繁琐操作,为了更好的客户体验(主要是自己想偷懒),遂决定添加文件关联, 文件关联:是将一种类型的文件与一个可以打开它的程序建立起一种依 ...

  8. .html 打开方式注册表,修改注册表实现文件默认打开方式

    在您的系统中安装了许多应用软件时,难免会有几个软件可以打开同一种文件格式的情况,这时,您可能希望能够自己选择用哪一种软件打开,也可能希望能在使用的过程中更换打开方式,这样不仅可以避免在某个应用软件损坏 ...

  9. Windows: Longmai GM3000 ukey修改注册表实现是否清PIN码方法

    操作系统:Win7x64 ukey型号:Longmai GM3000 for itrus(itrus定制版.通用版应该也可以,手头没有,没法测试) csp版本: GM3000TWCSP.dll  1. ...

最新文章

  1. 高防服务器究竟能防御哪些攻击?
  2. 连接LilyPad之Linux平台的驱动
  3. 柠檬班python自动化视频百度云_python自动化装逼指南1-装饰器详解
  4. Tunnel Warfare(HDU1540+线段树+区间合并)
  5. C语言程序设计及上机指导,《C语言程序设计上机指导》全套教案
  6. python 忽略 异常_如何忽略Python中的异常?
  7. PWM调光方法在LED亮度调节中的应用
  8. 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf
  9. java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
  10. ffplay.c函数结构简单分析(画图)
  11. mysql管理系统需求分析_教学管理系统需求分析报告
  12. HTTP代理和SOCKS代理有什么区别
  13. QT5.11编译出现undefined reference to `_imp___ZN12QApplicationC1ERiPPci’
  14. Android Weekly #30
  15. 阿木社区的SLAM无人机硬件配置
  16. java ntp服务器ip地址_国内常用ntp服务器ip地址
  17. 自己写的代码太low?想提升代码质量但是不知道怎么做?IDEA安这个插件~
  18. centos7搭建集群过程
  19. Nwafu-OJ-1410 Problem I C语言实习题二——4.判断是否能构成一个三角形
  20. 《JAVA》课程设计报告--企业人力资源管理系统

热门文章

  1. php openssl做什么,php开启openssl的方法
  2. ajax下拉框省市级联动
  3. 一个web版的计算器
  4. android 7调用摄像头,Android调用摄像头拍照(兼容7.0)
  5. 【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理
  6. Java Web 应用概述
  7. Django model 字段类型及选项解析(一)
  8. [NOIP2010提高组]关押罪犯
  9. window.open 和showModalDialog的返回值
  10. CLR via C# 阅读 笔记