[USETUP] Implement work-in-progress code that allows verifying whether registry hives...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 12 Jun 2017 00:09:16 +0000 (00:09 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 24 Oct 2018 22:58:23 +0000 (00:58 +0200)
commit455e69a0113defa7e28a61ba0c16fecef5f77e77
treeb9f94f4a0b80ac5f7283138ed8ac4a59d3d4f074
parent55d8a8490c5cb795fa1308c291485d31f8b53608
[USETUP] Implement work-in-progress code that allows verifying whether registry hives validity.

Implement work-in-progress code that, when upgrading an existing
ReactOS installation, verifies whether the (existing) system registry
hives are valid (by loading & unloading them, this allows using the
built-in repair functionality if needed), or not.

If a given hive cannot be repaired successfully, it is backed up
(with a '.brk' extension, "brk" as "broken"), then is marked up for
recreation.

When all hives have been checked, if there are any hive that needs
to be recreated, we recreate its hive file, mount it, but we do *NOT*
mount the other valid existing hives for update. We create instead
dummy registry hives so that we can actually use, as the update code,
the same one as the one used when fully creating the registry hives
for a clean installation (of course, this choice can be improved later on).

The update code (i.e. the same as the registry clean-install one) then
adds the registry keys & values, either putting them in the dummy
registry hives (the ones that we don't want to recreate) or in the
registry hive that is recreated.

At the end, the (re)created registry hives are flushed back to disk,
and a copy of them (under a '.sav' extension) are created, so that they
can be used for restoration purposes if 2nd-stage (and up) goes berserk.

Extra fixes:

- Use the correct structure member field when initializing the
  'InstallDir' variable, when performing an upgrade.

- CreateNestedKey() should be better analysed to see whether it correctly
  creates the full registry path compatible with volatile/non-volatile keys
  (under inspection).

svn path=/branches/setup_improvements/; revision=75010
base/setup/usetup/registry.c
base/setup/usetup/registry.h
base/setup/usetup/usetup.c