mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
- Use KeLoaderBlock for registry hive loading.
- Get rid of the CACHED_MODULE array and associated structures and stop using them, get rid of ParseAndCacheLoadedModules. Stop using KeLoadedModules and KeLoadedModuleCount outside of freeldr.c. - Except for MmInit1, the kernel should now be totally isolated from FreeLDR-specific data. svn path=/trunk/; revision=24409
This commit is contained in:
parent
0bfcd77883
commit
5162751ab3
5 changed files with 40 additions and 79 deletions
|
@ -27,10 +27,9 @@
|
|||
// Ke:
|
||||
//
|
||||
// - FIXES:
|
||||
// * Stop using CachedModules.
|
||||
// * Try to make MmInit1 NTLDR compatible.
|
||||
// * Sanitize some context fields during conversions.
|
||||
// * Figure out why the DPC stack doesn't really work.
|
||||
// * Try to make MmInit1 NTLDR compatible.
|
||||
// * Add DR macro/save and VM macro/save.
|
||||
// - FEATURES:
|
||||
// * New optimized table-based tick-hashed timer implementation.
|
||||
|
|
|
@ -136,18 +136,48 @@ STDCALL
|
|||
CmInitHives(BOOLEAN SetupBoot)
|
||||
{
|
||||
PCHAR BaseAddress;
|
||||
PLIST_ENTRY ListHead, NextEntry;
|
||||
PMEMORY_ALLOCATION_DESCRIPTOR MdBlock = NULL;
|
||||
|
||||
/* Load Registry Hives. This one can be missing. */
|
||||
if (CachedModules[SystemRegistry]) {
|
||||
BaseAddress = (PCHAR)CachedModules[SystemRegistry]->ModStart;
|
||||
BaseAddress = KeLoaderBlock->RegistryBase;
|
||||
if (BaseAddress)
|
||||
{
|
||||
CmImportSystemHive(BaseAddress,
|
||||
CachedModules[SystemRegistry]->ModEnd - (ULONG_PTR)BaseAddress);
|
||||
KeLoaderBlock->RegistryLength);
|
||||
}
|
||||
|
||||
BaseAddress = (PCHAR)CachedModules[HardwareRegistry]->ModStart;
|
||||
CmImportHardwareHive(BaseAddress,
|
||||
CachedModules[HardwareRegistry]->ModEnd - (ULONG_PTR)BaseAddress);
|
||||
/* Loop the memory descriptors */
|
||||
ListHead = &KeLoaderBlock->MemoryDescriptorListHead;
|
||||
NextEntry = ListHead->Flink;
|
||||
while (NextEntry != ListHead)
|
||||
{
|
||||
/* Get the current block */
|
||||
MdBlock = CONTAINING_RECORD(NextEntry,
|
||||
MEMORY_ALLOCATION_DESCRIPTOR,
|
||||
ListEntry);
|
||||
|
||||
/* Check if this is an registry block */
|
||||
if (MdBlock->MemoryType == LoaderRegistryData)
|
||||
{
|
||||
/* Check if it's not the SYSTEM hive that we already initialized */
|
||||
if ((MdBlock->BasePage) != ((ULONG_PTR)BaseAddress >> PAGE_SHIFT))
|
||||
{
|
||||
/* Hardware hive break out */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Go to the next block */
|
||||
NextEntry = MdBlock->ListEntry.Flink;
|
||||
}
|
||||
|
||||
/* We need a hardware hive */
|
||||
ASSERT(MdBlock);
|
||||
|
||||
BaseAddress = (PCHAR)(MdBlock->BasePage << PAGE_SHIFT);
|
||||
CmImportHardwareHive(BaseAddress,
|
||||
MdBlock->PageCount << PAGE_SHIFT);
|
||||
|
||||
/* Create dummy keys if no hardware hive was found */
|
||||
CmImportHardwareHive (NULL, 0);
|
||||
|
|
|
@ -25,17 +25,14 @@ ULONG NtBuildNumber = KERNEL_VERSION_BUILD;
|
|||
ULONG NtGlobalFlag;
|
||||
ULONG ExSuiteMask;
|
||||
|
||||
extern LOADER_MODULE KeLoaderModules[64];
|
||||
extern ULONG KeLoaderModuleCount;
|
||||
extern ULONG KiServiceLimit;
|
||||
BOOLEAN NoGuiBoot = FALSE;
|
||||
|
||||
/* Init flags and settings */
|
||||
ULONG ExpInitializationPhase;
|
||||
BOOLEAN ExpInTextModeSetup;
|
||||
BOOLEAN IoRemoteBootClient;
|
||||
ULONG InitSafeBootMode;
|
||||
|
||||
BOOLEAN NoGuiBoot = FALSE;
|
||||
|
||||
/* NT Boot Path */
|
||||
UNICODE_STRING NtSystemRoot;
|
||||
|
||||
|
@ -294,52 +291,6 @@ InitSystemSharedUserPage (IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
FORCEINLINE
|
||||
ParseAndCacheLoadedModules(VOID)
|
||||
{
|
||||
ULONG i;
|
||||
PCHAR Name;
|
||||
|
||||
/* Loop the Module List and get the modules we want */
|
||||
for (i = 1; i < KeLoaderModuleCount; i++)
|
||||
{
|
||||
/* Get the Name of this Module */
|
||||
if (!(Name = strrchr((PCHAR)KeLoaderModules[i].String, '\\')))
|
||||
{
|
||||
/* Save the name */
|
||||
Name = (PCHAR)KeLoaderModules[i].String;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No name, skip */
|
||||
Name++;
|
||||
}
|
||||
|
||||
/* Now check for any of the modules we will need later */
|
||||
if (!_stricmp(Name, "ansi.nls"))
|
||||
{
|
||||
CachedModules[AnsiCodepage] = &KeLoaderModules[i];
|
||||
}
|
||||
else if (!_stricmp(Name, "oem.nls"))
|
||||
{
|
||||
CachedModules[OemCodepage] = &KeLoaderModules[i];
|
||||
}
|
||||
else if (!_stricmp(Name, "casemap.nls"))
|
||||
{
|
||||
CachedModules[UnicodeCasemap] = &KeLoaderModules[i];
|
||||
}
|
||||
else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv"))
|
||||
{
|
||||
CachedModules[SystemRegistry] = &KeLoaderModules[i];
|
||||
}
|
||||
else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv"))
|
||||
{
|
||||
CachedModules[HardwareRegistry] = &KeLoaderModules[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
INIT_FUNCTION
|
||||
ExpDisplayNotice(VOID)
|
||||
|
@ -577,9 +528,6 @@ ExpInitializeExecutive(IN ULONG Cpu,
|
|||
PLIST_ENTRY NextEntry, ListHead;
|
||||
PMEMORY_ALLOCATION_DESCRIPTOR MdBlock;
|
||||
|
||||
/* FIXME: Deprecate soon */
|
||||
ParseAndCacheLoadedModules();
|
||||
|
||||
/* Validate Loader */
|
||||
if (!ExpIsLoaderValid(LoaderBlock))
|
||||
{
|
||||
|
|
|
@ -18,18 +18,6 @@ typedef struct _KPROFILE_SOURCE_OBJECT
|
|||
LIST_ENTRY ListEntry;
|
||||
} KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT;
|
||||
|
||||
/* Cached modules from the loader block */
|
||||
typedef enum _CACHED_MODULE_TYPE
|
||||
{
|
||||
AnsiCodepage,
|
||||
OemCodepage,
|
||||
UnicodeCasemap,
|
||||
SystemRegistry,
|
||||
HardwareRegistry,
|
||||
MaximumCachedModuleType,
|
||||
} CACHED_MODULE_TYPE, *PCACHED_MODULE_TYPE;
|
||||
extern PLOADER_MODULE CachedModules[MaximumCachedModuleType];
|
||||
|
||||
typedef enum _CONNECT_TYPE
|
||||
{
|
||||
NoConnect,
|
||||
|
@ -122,6 +110,7 @@ extern BOOLEAN KeThreadDpcEnable;
|
|||
extern LARGE_INTEGER KiTimeIncrementReciprocal;
|
||||
extern UCHAR KiTimeIncrementShiftCount;
|
||||
extern ULONG KiTimeLimitIsrMicroseconds;
|
||||
extern ULONG KiServiceLimit;
|
||||
extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead;
|
||||
extern KSPIN_LOCK BugCheckCallbackLock;
|
||||
extern KDPC KiExpireTimerDpc;
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
LOADER_MODULE KeLoaderModules[64];
|
||||
ULONG KeLoaderModuleCount;
|
||||
static CHAR KeLoaderModuleStrings[64][256];
|
||||
PLOADER_MODULE CachedModules[MaximumCachedModuleType];
|
||||
|
||||
/* FreeLDR Memory Data */
|
||||
ADDRESS_RANGE KeMemoryMap[64];
|
||||
|
@ -171,10 +170,6 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
|
|||
if (!(_stricmp(DriverName, "hardware")) ||
|
||||
!(_stricmp(DriverName, "hardware.hiv")))
|
||||
{
|
||||
/* Save registry data */
|
||||
LoaderBlock->RegistryBase = ModStart;
|
||||
LoaderBlock->RegistryLength = ModSize;
|
||||
|
||||
/* Create an MD for it */
|
||||
MdEntry = &BldrMemoryDescriptors[i];
|
||||
MdEntry->MemoryType = LoaderRegistryData;
|
||||
|
|
Loading…
Reference in a new issue