1

首先,我会说我已经阅读了这里的帖子 ,但我仍然遇到问题。

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

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

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

  • 放置注册表的目录,称为“硬盘”
  • 一个名为“Hard Disk2”的设备,其中永久闪存位于
  • 对注册表所做的任何更改都会在重新启动时丢失

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

奇怪的是,如果我在注册表目录中创建一个随机文件/目录,它在重新启动后仍然存在,所以即使这个目录不在另一个分区上(我试图把它放在哪里),它似乎是永久的. 如果是永久的,为什么不保存注册表设置(即以太网适配器 IP 地址?)

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

4

1 回答 1

0

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

SystemHive应该设置为您要存储 hive 文件的目录的名称,而不是设备的名称。在您的情况下: "SystemHive"="Registry\\system.hv"
引用MSDN 来源

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


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

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

您是否正在刷新您所做的更改?
检查您是否没有IOCTL_HAL_GET_HIVE_CLEAN_FLAG( source ) 的奇怪实现 - 您的系统可能会返回一个 true 值以在每次启动时清理系统注册表。


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

于 2010-04-25T07:14:23.277 回答