https://git.reactos.org/?p=reactos.git;a=commitdiff;h=cc40a5870a67a2eaefa03…
commit cc40a5870a67a2eaefa03e1931408996621c5ffa
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sat Aug 10 21:22:11 2024 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Sun Dec 15 22:15:13 2024 +0100
[NTOS:CM] Implement Win7+ VolatileBoot support.
Its support is controlled with a REG_DWORD value named
`VolatileBoot` inside the registry key
`HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager` .
Its implementation is very trivial: when enabled, CmpShareSystemHives
is set to TRUE and doesn't change state during runtime.
In a sense this is similar to what happens in WinPE-boot, except that
ALL hives without exception (system hives and others) will be loaded
in shared mode.
---
ntoskrnl/config/cmdata.c | 9 +++++++++
ntoskrnl/config/cmsysini.c | 6 +++++-
ntoskrnl/include/internal/cm.h | 1 +
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/ntoskrnl/config/cmdata.c b/ntoskrnl/config/cmdata.c
index aa9b1f010be..e428377a6fc 100644
--- a/ntoskrnl/config/cmdata.c
+++ b/ntoskrnl/config/cmdata.c
@@ -54,6 +54,8 @@ UNICODE_STRING CmSymbolicLinkValueName =
UNICODE_STRING CmpLoadOptions;
+/* TRUE if all hives must be loaded in shared mode */
+ULONG CmpVolatileBoot;
/* TRUE if the system hives must be loaded in shared mode */
BOOLEAN CmpShareSystemHives;
/* TRUE when the registry is in PE mode */
@@ -673,6 +675,13 @@ DATA_SEG("INITDATA") CM_SYSTEM_CONTROL_VECTOR
CmControlVector[] =
NULL,
NULL
},
+ {
+ L"Session Manager\\Configuration Manager",
+ L"VolatileBoot",
+ &CmpVolatileBoot,
+ NULL,
+ NULL
+ },
{
L"Session Manager",
L"ForceNpxEmulation",
diff --git a/ntoskrnl/config/cmsysini.c b/ntoskrnl/config/cmsysini.c
index a8ddc104073..df1de46a210 100644
--- a/ntoskrnl/config/cmsysini.c
+++ b/ntoskrnl/config/cmsysini.c
@@ -1164,7 +1164,7 @@ CmpCreateRegistryRoot(VOID)
return FALSE;
}
- /* Completely sucessful */
+ /* Completely successful */
return TRUE;
}
@@ -1635,6 +1635,10 @@ CmInitSystem1(VOID)
CmpMiniNTBoot = TRUE;
CmpShareSystemHives = TRUE;
}
+ /* If we are in volatile boot mode, ALL hives without exception
+ * (system hives and others) will be loaded in shared mode */
+ if (CmpVolatileBoot)
+ CmpShareSystemHives = TRUE;
/* Initialize the hive list and lock */
InitializeListHead(&CmpHiveListHead);
diff --git a/ntoskrnl/include/internal/cm.h b/ntoskrnl/include/internal/cm.h
index 8d33736c482..02d8b9e177c 100644
--- a/ntoskrnl/include/internal/cm.h
+++ b/ntoskrnl/include/internal/cm.h
@@ -1420,6 +1420,7 @@ CmGetSystemDriverList(
extern ULONG CmpTraceLevel;
extern BOOLEAN CmpSpecialBootCondition;
extern BOOLEAN CmpFlushOnLockRelease;
+extern ULONG CmpVolatileBoot;
extern BOOLEAN CmpShareSystemHives;
extern BOOLEAN CmpMiniNTBoot;
extern BOOLEAN CmpNoVolatileCreates;