/*
* The following are invalid:
- * An external hive that is also internal.
- * A log hive that's not a primary hive too.
- * A volatile hive that's linked to permanent storage.
- * An in-memory initialization without hive data.
- * A log hive that's not linked to a correct file type.
+ * - An external hive that is also internal.
+ * - A log hive that is not a primary hive too.
+ * - A volatile hive that is linked to permanent storage,
+ * unless this hive is a shared system hive.
+ * - An in-memory initialization without hive data.
+ * - A log hive that is not linked to a correct file type.
*/
if (((External) && ((Primary) || (Log))) ||
((Log) && !(Primary)) ||
- ((HiveFlags & HIVE_VOLATILE) && ((Primary) || (External) || (Log))) ||
+ (!(CmpShareSystemHives) && (HiveFlags & HIVE_VOLATILE) &&
+ ((Primary) || (External) || (Log))) ||
((OperationType == HINIT_MEMORY) && (!HiveData)) ||
((Log) && (FileType != HFILE_TYPE_LOG)))
{
&CmpMachineHiveList[i].Allocate,
0);
if (!(NT_SUCCESS(Status)) ||
- (!(CmHive->FileHandles[HFILE_TYPE_LOG]) && !(CmpMiniNTBoot))) // HACK
+ (!(CmpShareSystemHives) && !(CmHive->FileHandles[HFILE_TYPE_LOG])))
{
- /* We failed or couldn't get a log file, raise a hard error */
+ /*
+ * We failed, or could not get a log file (unless
+ * the hive is shared), raise a hard error.
+ */
ErrorParameters = &FileName;
NtRaiseHardError(STATUS_CANNOT_LOAD_REGISTRY_FILE,
1,