基于Hive的Flash注册表

时间:2010-04-23 07:40:46

标签: windows-ce registry platform-builder hive

首先,我会说我已阅读帖子here,但我仍遇到问题。

我正在尝试使用基于配置单元的注册表创建CE6映像,该注册表实际上通过重新启动来存储结果。

  • 我勾选了目录项中的配置单元设置。
  • 在common.reg中,我已将配置单元的位置([HKEY_LOCAL_MACHINE \ init \ BootVars]“SystemHive”)设置为“Hard Drive \ Registry”(注意:闪存显示为名为“硬盘驱动器”的设备“)
  • 在common.reg中,我在同一个地方设置了“Flags”= dword:3以使设备管理器与存储管理器一起加载
  • 我已经确认这些设置包含在“; HIVE BOOT SECTION”

这是它开始倒下的地方。这一切都很好,但在目标系统上,当它启动时,我得到:

  • 一个名为“Hard Disk”的目录,其中包含注册表
  • 一个名为“Hard Disk2”的设备,其中永久闪存为
  • 重新启动时,对注册表所做的任何更改都将丢失

我还缺少什么? 为什么注册表没有存储在闪存中?

嗯,如果我在注册表目录中创建一个随机文件/目录,它在重启后仍然存在,所以即使这个目录不在另一个分区(我试图把它放在那里),它确实会出现永久的。如果它是永久性的,为什么不保存注册表设置(即以太网适配器IP地址?)

我没有使用任何特定的配置文件,所以我不知道最后一步是使这个配置单注册表成为永久存储。

1 个答案:

答案 0 :(得分:1)

首先,我希望你不要直接改变common.reg。 您永远不应更改公共代码。如果要更改公共注册表项,则需要在project.reg或platform.reg中设置它们,它们将覆盖公共设置。

SystemHive应设置为您要将hive文件存储到的目录的名称,而不包含设备名称。 在你的情况下: "SystemHive"="Registry\\system.hv"
引自MSDN source

  

不要包含存储文件的文件系统的名称。系统将根据其他注册表设置确定要使用的文件系统。


关于您的第二条评论(source)的更新:

  

如果此值存在于HKEY_LOCAL_MACHINE下,则表示系统配置单元已成功还原。如果它出现在HKEY_CURRENT_USER下,则表示用户配置单元已成功恢复。

你是否正在抨击你所做的改变? 检查您是否没有IOCTL_HAL_GET_HIVE_CLEAN_FLAGsource)的错误实现 - 您的系统可能会返回一个真值以在每次启动时清理系统注册表。


您可以添加一个定期刷新注册表的线程(虽然我建议将其排除,让每个应用程序刷新自己的更改) - PRJ_ENABLE_REGFLUSH_THREAD