[ros-diffs] [ion] 24409: - 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.

ion at svn.reactos.org ion at svn.reactos.org
Thu Oct 5 04:02:27 CEST 2006


Author: ion
Date: Thu Oct  5 06:02:27 2006
New Revision: 24409

URL: http://svn.reactos.org/svn/reactos?rev=24409&view=rev
Log:
- 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.

Modified:
    trunk/reactos/ntoskrnl/KrnlFun.c
    trunk/reactos/ntoskrnl/cm/registry.c
    trunk/reactos/ntoskrnl/ex/init.c
    trunk/reactos/ntoskrnl/include/internal/ke.h
    trunk/reactos/ntoskrnl/ke/freeldr.c

Modified: trunk/reactos/ntoskrnl/KrnlFun.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/KrnlFun.c?rev=24409&r1=24408&r2=24409&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/KrnlFun.c (original)
+++ trunk/reactos/ntoskrnl/KrnlFun.c Thu Oct  5 06:02:27 2006
@@ -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.

Modified: trunk/reactos/ntoskrnl/cm/registry.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cm/registry.c?rev=24409&r1=24408&r2=24409&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/cm/registry.c (original)
+++ trunk/reactos/ntoskrnl/cm/registry.c Thu Oct  5 06:02:27 2006
@@ -136,18 +136,48 @@
 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);
-    }
-
-    BaseAddress = (PCHAR)CachedModules[HardwareRegistry]->ModStart;
+                           KeLoaderBlock->RegistryLength);
+    }
+
+    /* 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,
-                         CachedModules[HardwareRegistry]->ModEnd - (ULONG_PTR)BaseAddress);
-
+                         MdBlock->PageCount << PAGE_SHIFT);
 
     /* Create dummy keys if no hardware hive was found */
     CmImportHardwareHive (NULL, 0);

Modified: trunk/reactos/ntoskrnl/ex/init.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/init.c?rev=24409&r1=24408&r2=24409&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/init.c (original)
+++ trunk/reactos/ntoskrnl/ex/init.c Thu Oct  5 06:02:27 2006
@@ -25,16 +25,13 @@
 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;
@@ -291,52 +288,6 @@
 
         DbgPrint("No system drive found!\n");
         KEBUGCHECK (NO_BOOT_DEVICE);
-    }
-}
-
-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];
-        }
     }
 }
 
@@ -577,9 +528,6 @@
     PLIST_ENTRY NextEntry, ListHead;
     PMEMORY_ALLOCATION_DESCRIPTOR MdBlock;
 
-    /* FIXME: Deprecate soon */
-    ParseAndCacheLoadedModules();
-
     /* Validate Loader */
     if (!ExpIsLoaderValid(LoaderBlock))
     {

Modified: trunk/reactos/ntoskrnl/include/internal/ke.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ke.h?rev=24409&r1=24408&r2=24409&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ke.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ke.h Thu Oct  5 06:02:27 2006
@@ -17,18 +17,6 @@
     KPROFILE_SOURCE Source;
     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
 {
@@ -122,6 +110,7 @@
 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;

Modified: trunk/reactos/ntoskrnl/ke/freeldr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/freeldr.c?rev=24409&r1=24408&r2=24409&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/freeldr.c (original)
+++ trunk/reactos/ntoskrnl/ke/freeldr.c Thu Oct  5 06:02:27 2006
@@ -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 @@
         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;




More information about the Ros-diffs mailing list