[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.
This commit is contained in:
Hermès Bélusca-Maïto 2024-08-10 21:22:11 +02:00
parent f42c81e4ed
commit cc40a5870a
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
3 changed files with 15 additions and 1 deletions

View file

@ -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",

View file

@ -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);

View file

@ -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;