|
|
/*++
Copyright (c) 1990, 1991 Microsoft Corporation
Module Name:
cmdat.c
Abstract:
This module contains registry "static" data, except for data also used by setup, which is in cmdat2.c.
Author:
Bryan Willman (bryanwi) 19-Oct-93
Environment:
Kernel mode.
Revision History:
--*/
#include "cmp.h"
//
// ***** INIT *****
//
#ifdef ALLOC_DATA_PRAGMA
#pragma data_seg("INIT")
#pragma const_seg("INITCONST")
#endif
//
// ---------------------------
//
UNICODE_STRING CmpLoadOptions = { 0 }; // sys options from FW or boot.ini
//
// CmpClassString - contains strings which are used as the class
// strings in the keynode.
// The associated enumerated type is CONFIGURATION_CLASS in arc.h
//
UNICODE_STRING CmClassName[MaximumClass + 1] = { 0 };
const PWCHAR CmClassString[MaximumClass + 1] = { L"System", L"Processor", L"Cache", L"Adapter", L"Controller", L"Peripheral", L"MemoryClass", L"Undefined" };
struct { PCHAR AscString; USHORT InterfaceType; USHORT Count; } CmpMultifunctionTypes[] = { "ISA", Isa, 0, "MCA", MicroChannel, 0, "PCI", PCIBus, 0, "VME", VMEBus, 0, "PCMCIA", PCMCIABus, 0, "CBUS", CBus, 0, "MPIPI", MPIBus, 0, "MPSA", MPSABus, 0, NULL, Internal, 0 };
USHORT CmpUnknownBusCount = 0;
ULONG CmpConfigurationAreaSize = 0x4000; // Initialize size = 16K
PCM_FULL_RESOURCE_DESCRIPTOR CmpConfigurationData = { 0 };
//
// The following strings will be used as the keynames for registry
// nodes.
// The associated enumerated type is CONFIGURATION_TYPE in arc.h
//
UNICODE_STRING CmTypeName[MaximumType + 1] = { 0 };
//
// ***** PAGE *****
//
#ifdef ALLOC_DATA_PRAGMA
#pragma data_seg("PAGEDATA")
#pragma const_seg("PAGECONST")
#endif
const PWCHAR CmTypeString[MaximumType + 1] = { L"System", L"CentralProcessor", L"FloatingPointProcessor", L"PrimaryICache", L"PrimaryDCache", L"SecondaryICache", L"SecondaryDCache", L"SecondaryCache", L"EisaAdapter", L"TcAdapter", L"ScsiAdapter", L"DtiAdapter", L"MultifunctionAdapter", L"DiskController", L"TapeController", L"CdRomController", L"WormController", L"SerialController", L"NetworkController", L"DisplayController", L"ParallelController", L"PointerController", L"KeyboardController", L"AudioController", L"OtherController", L"DiskPeripheral", L"FloppyDiskPeripheral", L"TapePeripheral", L"ModemPeripheral", L"MonitorPeripheral", L"PrinterPeripheral", L"PointerPeripheral", L"KeyboardPeripheral", L"TerminalPeripheral", L"OtherPeripheral", L"LinePeripheral", L"NetworkPeripheral", L"SystemMemory", L"DockingInformation", L"RealModeIrqRoutingTable", L"RealModePCIEnumeration", L"Undefined" };
//
// CmpTypeCount[] - For each 'type', a count is used to keep track how many
// keys have been created.
//
ULONG CmpTypeCount[NUMBER_TYPES] = { 0, // ArcSystem
0, // CentralProcessor",
0, // FloatingPointProcessor",
0, // PrimaryICache",
0, // PrimaryDCache",
0, // SecondaryICache",
0, // SecondaryDCache",
0, // SecondaryCache",
0, // EisaAdapter", (8)
0, // TcAdapter", (9)
0, // ScsiAdapter",
0, // DtiAdapter",
0, // MultifunctionAdapter", (12)
0, // DiskController", (13)
0, // TapeController",
0, // CdRomController",
0, // WormController",
0, // SerialController",
0, // NetworkController",
0, // DisplayController",
0, // ParallelController",
0, // PointerController",
0, // KeyboardController",
0, // AudioController",
0, // OtherController",
0, // DiskPeripheral",
0, // FloppyDiskPeripheral",
0, // TapePeripheral",
0, // ModemPeripheral",
0, // MonitorPeripheral",
0, // PrinterPeripheral",
0, // PointerPeripheral",
0, // KeyboardPeripheral",
0, // TerminalPeripheral",
0, // OtherPeripheral",
0, // LinePeripheral",
0, // NetworkPeripheral",
0, // SystemMemory",
0, // DockingInformation,
0, // RealModeIrqRoutingTable
0 // Undefined"
};
const UNICODE_STRING nullclass = { 0, 0, NULL };
//
// All names used by the registry
//
UNICODE_STRING CmRegistryRootName = { 0 }; UNICODE_STRING CmRegistryMachineName = { 0 }; UNICODE_STRING CmRegistryMachineHardwareName = { 0 }; UNICODE_STRING CmRegistryMachineHardwareDescriptionName = { 0 }; UNICODE_STRING CmRegistryMachineHardwareDescriptionSystemName = { 0 }; UNICODE_STRING CmRegistryMachineHardwareDeviceMapName = { 0 }; UNICODE_STRING CmRegistryMachineHardwareResourceMapName = { 0 }; UNICODE_STRING CmRegistryMachineHardwareOwnerMapName = { 0 }; UNICODE_STRING CmRegistryMachineSystemName = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSet = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetEnumName = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetEnumRootName = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetServices = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetHardwareProfilesCurrent = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlClass = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlSafeBoot = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlSessionManagerMemoryManagement = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlBootLog = { 0 }; UNICODE_STRING CmRegistryMachineSystemCurrentControlSetServicesEventLog = { 0 }; UNICODE_STRING CmRegistryUserName = { 0 }; UNICODE_STRING CmRegistrySystemCloneName = { 0 }; UNICODE_STRING CmpSystemFileName = { 0 }; UNICODE_STRING CmSymbolicLinkValueName = { 0 };
#ifdef _WANT_MACHINE_IDENTIFICATION
UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlBiosInfo = { 0 }; #endif
const PWCHAR CmpRegistryRootString = L"\\REGISTRY"; const PWCHAR CmpRegistryMachineString = L"\\REGISTRY\\MACHINE"; const PWCHAR CmpRegistryMachineHardwareString = L"\\REGISTRY\\MACHINE\\HARDWARE"; const PWCHAR CmpRegistryMachineHardwareDescriptionString = L"\\REGISTRY\\MACHINE\\HARDWARE\\DESCRIPTION"; const PWCHAR CmpRegistryMachineHardwareDescriptionSystemString = L"\\REGISTRY\\MACHINE\\HARDWARE\\DESCRIPTION\\SYSTEM"; const PWCHAR CmpRegistryMachineHardwareDeviceMapString = L"\\REGISTRY\\MACHINE\\HARDWARE\\DEVICEMAP"; const PWCHAR CmpRegistryMachineHardwareResourceMapString = L"\\REGISTRY\\MACHINE\\HARDWARE\\RESOURCEMAP"; const PWCHAR CmpRegistryMachineHardwareOwnerMapString = L"\\REGISTRY\\MACHINE\\HARDWARE\\OWNERMAP"; const PWCHAR CmpRegistryMachineSystemString = L"\\REGISTRY\\MACHINE\\SYSTEM"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetEnumString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\ENUM"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetEnumRootString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\ENUM\\ROOT"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetServicesString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\SERVICES"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetHardwareProfilesCurrentString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\HARDWARE PROFILES\\CURRENT"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetControlClassString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\CONTROL\\CLASS"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetControlSafeBootString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\CONTROL\\SAFEBOOT"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetControlSessionManagerMemoryManagementString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\CONTROL\\SESSION MANAGER\\MEMORY MANAGEMENT"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetControlBootLogString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\CONTROL\\BOOTLOG"; const PWCHAR CmpRegistryMachineSystemCurrentControlSetServicesEventLogString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\SERVICES\\EVENTLOG"; const PWCHAR CmpRegistryUserString = L"\\REGISTRY\\USER"; const PWCHAR CmpRegistrySystemCloneString = L"\\REGISTRY\\MACHINE\\CLONE"; const PWCHAR CmpRegistrySystemFileNameString = L"SYSTEM"; const PWCHAR CmpRegistryPerflibString = L"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS NT\\CURRENTVERSION\\PERFLIB";
const PWCHAR CmpProcessorControl = L"ProcessorControl"; const PWCHAR CmpControlSessionManager = L"Control\\Session Manager"; const PWCHAR CmpSymbolicLinkValueName = L"SymbolicLinkValue";
#ifdef _WANT_MACHINE_IDENTIFICATION
const PWCHAR CmpRegistryMachineSystemCurrentControlSetControlBiosInfoString = L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\CONTROL\\BIOSINFO"; #endif
//
// N.B. The CLONE hive is left out of the machine Hive list if
// we will not be using it to clone the current control set,
// since that is that Hive's only purpose.
//
HIVE_LIST_ENTRY CmpMachineHiveList[] = { { L"HARDWARE", L"MACHINE\\", NULL, HIVE_VOLATILE , 0 , NULL, FALSE, FALSE, FALSE}, { L"SECURITY", L"MACHINE\\", NULL, 0 , 0 , NULL, FALSE, FALSE, FALSE}, { L"SOFTWARE", L"MACHINE\\", NULL, 0 , 0 , NULL, FALSE, FALSE, FALSE}, { L"SYSTEM", L"MACHINE\\", NULL, 0 , 0 , NULL, FALSE, FALSE, FALSE}, { L"DEFAULT", L"USER\\.DEFAULT", NULL, 0 , CM_CMHIVE_FLAG_UNTRUSTED , NULL, FALSE, FALSE, FALSE}, { L"SAM", L"MACHINE\\", NULL, HIVE_NOLAZYFLUSH , 0 , NULL, FALSE, FALSE, FALSE},
#if CLONE_CONTROL_SET
{ L"CLONE", L"MACHINE\\", NULL, HIVE_VOLATILE , 0 , NULL, FALSE, FALSE, FALSE}, #endif
// { L"TEST", L"MACHINE\\", NULL, HIVE_NOLAZYFLUSH , 0 , NULL, FALSE, FALSE, FALSE},
{ NULL, NULL, 0, 0 , 0 , NULL, FALSE, FALSE, FALSE} };
UCHAR SystemHiveFullPathBuffer[MAX_NAME]; UNICODE_STRING SystemHiveFullPathName;
//
// Master Hive
//
// The KEY_NODEs for \REGISTRY, \REGISTRY\MACHINE, and \REGISTRY\USER
// are stored in a small memory only hive called the Master Hive.
// All other hives have link nodes in this hive which point to them.
//
PCMHIVE CmpMasterHive = { 0 }; BOOLEAN CmpNoMasterCreates = FALSE; // Set TRUE after we're done to
// prevent random creates in the
// master hive, which is not backed
// by a file.
LIST_ENTRY CmpHiveListHead = { 0 }; // List of CMHIVEs
FAST_MUTEX CmpHiveListHeadLock; // used to protect the list above
//
// Addresses of object type descriptors:
//
POBJECT_TYPE CmpKeyObjectType = { 0 };
//
// Write-Control:
// CmpNoWrite is initially true. When set this way write and flush
// do nothing, simply returning success. When cleared to FALSE, I/O
// is enabled. This change is made after the I/O system is started
// AND autocheck (chkdsk) has done its thing.
//
BOOLEAN CmpNoWrite = TRUE;
//
// NtInitializeRegistry global status flags
//
//
// If CmFirstTime is TRUE, then NtInitializeRegistry has not yet been
// called to perform basic registry initialization
//
BOOLEAN CmFirstTime = TRUE;
//
// trick to allow paralel threads to access the registry
//
BOOLEAN CmpSpecialBootCondition = FALSE;
//
// If CmBootAcceptFirstTime is TRUE, then NtInitializeRegistry has not
// yet been called to accept the current Boot and save the boot
// control set as the LKG control set.
//
BOOLEAN CmBootAcceptFirstTime = TRUE;
//
// CmpWasSetupBoot indicates whether or not the boot
// is into text mode setup. If so, we do not turn
// on global quotas.
//
BOOLEAN CmpWasSetupBoot;
//
// Indicates whether the hives need to be loaded in memory
// and in scratch mode
//
BOOLEAN CmpMiniNTBoot = FALSE;
//
// Indicates whether the system hives need to be opened in a
// shared mode. Generally needed if we are booting WinPE (MiniNT)
// on network
//
BOOLEAN CmpShareSystemHives = FALSE;
//
// Where are we booting from
//
ULONG CmpBootType; //
// Self healing hives control switch
//
BOOLEAN CmpSelfHeal = TRUE;
#ifdef ALLOC_DATA_PRAGMA
#pragma const_seg()
#pragma data_seg()
#endif
//
// ***** FIXED *****
//
|