Реестр на базе Hive во Flash

Для начала скажу, что прочитал сообщение здесь и у меня все еще есть проблемы.

Я пытаюсь создать образ CE6 с реестром на основе улья, который фактически сохраняет результаты после перезагрузки.

  • Я отметил настройки улья в элементах каталога.
  • В common.reg я установил расположение улья ([HKEY_LOCAL_MACHINE\init\BootVars] «SystemHive») на «Жесткий диск\Реестр» (Примечание: флэш-память отображается как устройство с именем «Жесткий диск»)
  • В common.reg я установил «Flags»=dword:3 в том же месте, чтобы диспетчер устройств загружался вместе с диспетчером хранилища.
  • Я убедился, что эти настройки заключены в "; HIVE BOOT SECTION"

Вот и начинает падать. Все компилируется нормально, но в целевой системе при загрузке я получаю:

  • Каталог под названием «Жесткий диск», в который помещается реестр.
  • Устройство с именем «Жесткий диск2», на котором установлена ​​постоянная флэш-память.
  • Любые изменения, внесенные в реестр, теряются при перезагрузке.

Чего мне еще не хватает? Почему реестр не сохраняется на флешке?

Как ни странно, если я создаю случайный файл/каталог в каталоге реестра, он все еще там после перезагрузки, поэтому, хотя этот каталог не находится в другом разделе (куда я пытался его поместить), он кажется постоянным . Если он постоянный, то почему не сохраняются настройки реестра (например, IP-адреса Ethernet-адаптера?)

Я не использую какие-либо определенные профили, поэтому я не знаю, какой последний шаг должен сделать этот реестр улья постоянным хранилищем.


person Dave    schedule 23.04.2010    source источник


Ответы (1)


Во-первых, я надеюсь, что вы не меняете common.reg напрямую. Вы никогда не должны изменять общедоступный код. Если вы хотите изменить общедоступные ключи реестра, вам необходимо установить их в файле project.reg или platform.reg, и они переопределят общедоступные настройки.

SystemHive должно быть установлено имя каталога, в котором вы хотите хранить файлы куста без имени устройства. В вашем случае: "SystemHive"="Registry\\system.hv"
Цитата из источника MSDN:

Не включайте имя файловой системы, в которой хранится файл. Система определит, какую файловую систему использовать на основе других параметров реестра.


Обновление относительно вашего второго комментария (источник):

Если это значение присутствует в разделе HKEY_LOCAL_MACHINE, это означает, что системный куст был успешно восстановлен. Если он присутствует в разделе HKEY_CURRENT_USER, это означает, что пользовательский куст был успешно восстановлен.

Сбрасываете ли вы внесенные изменения?
Убедитесь, что у вас нет странной реализации IOCTL_HAL_GET_HIVE_CLEAN_FLAG (source) — ваша система может возвращать истинное значение для очистки системного реестра при каждой загрузке.


Вы можете добавить поток, который будет периодически сбрасывать ваш реестр (хотя я бы рекомендовал исключить его и позволить каждому приложению сбрасывать свои собственные изменения) — PRJ_ENABLE_REGFLUSH_THREAD

person Shaihi    schedule 25.04.2010
comment
Если имя устройства не указано, как система узнает, что я хочу, чтобы файлы хранились на другом устройстве? Кроме того, при установке местоположения реестра таким образом (который работает для системного раздела) параметры реестра по-прежнему не сохраняются. Любые изменения, которые я делаю, теряются во время холодного перезапуска. - person Dave; 26.04.2010
comment
Интересно, что я обнаружил, что RegPersisted=dword:1 помещается в HKEY_CURRENT_USER (это означает, что куст якобы был восстановлен), но не в HKEY_LOCAL_MACHINE. Но любые настройки, которые я помещаю в любой из двух ульев, теряются. - person Dave; 26.04.2010
comment
Похоже, что и панель управления, и инструменты RegEdit редактируют реестр только в ОЗУ, и что RegFlushKey необходим для фактического сохранения реестра во флэш-память! Хотя это было бы нормально в пользовательском приложении, это настоящая проблема, если вы просто хотите сохранить изменение IP. Во всяком случае, сейчас все спасает. - person Dave; 26.04.2010