[ros-diffs] [tkreuzer] 52452: [FEELDR] - Don't try to load referenced dlls in any other dir than system32. A second attempt would fail on the first dll that was already loaded and the function would bail out b...

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Sat Jun 25 13:52:47 UTC 2011


Author: tkreuzer
Date: Sat Jun 25 13:52:47 2011
New Revision: 52452

URL: http://svn.reactos.org/svn/reactos?rev=52452&view=rev
Log:
[FEELDR]
- Don't try to load referenced dlls in any other dir than system32. A second attempt would fail on the first dll that was already loaded and the function would bail out before any missing dll could be loaded. This worked only by chance on gcc builds, because the 1st import was bootvid, which was always loaded in the 2nd attempt from system32, and the function failed after that, since hal and kdcom were already loaded.

Modified:
    trunk/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c
    trunk/reactos/boot/freeldr/freeldr/windows/setupldr2.c

Modified: trunk/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c?rev=52452&r1=52451&r2=52452&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c [iso-8859-1] Sat Jun 25 13:52:47 2011
@@ -148,7 +148,7 @@
 	ULONG Entry, Page;
 
 	//Print(L"MempSetupPaging: SP 0x%X, Number: 0x%X\n", StartPage, NumberOfPages);
-	
+
 	// HACK
 	if (StartPage+NumberOfPages >= 0x80000)
 	{
@@ -487,13 +487,13 @@
 		"1:\n");
 #elif defined(_MSC_VER)
 	/* We can't express the above in MASM so we use this far return instead */
-	DbgPrint("WinLdrSetProcessorContext: Performing untested far-return\n");
-	__asm {
+	__asm
+	{
 		push 8
 		push offset resume
 		retf
 		resume:
-		};
+	};
 #else
 #error
 #endif

Modified: trunk/reactos/boot/freeldr/freeldr/windows/setupldr2.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windows/setupldr2.c?rev=52452&r1=52451&r2=52452&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/windows/setupldr2.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/windows/setupldr2.c [iso-8859-1] Sat Jun 25 13:52:47 2011
@@ -123,7 +123,7 @@
     do
     {
         if (InfGetDataField(&InfContext, 7, &Media) &&
-            InfGetDataField(&InfContext, 0, &DriverName) && 
+            InfGetDataField(&InfContext, 0, &DriverName) &&
             InfGetDataField(&InfContext, 13, &dirIndex))
         {
             if ((strcmp(Media, "x") == 0) &&
@@ -137,7 +137,7 @@
                 swprintf(ImagePathW, L"%S", ImagePath);
                 wcscat(ImagePathW, L"\\");
                 wcscat(ImagePathW, ServiceName);
-                
+
                 /* Remove .sys extension */
                 ServiceName[wcslen(ServiceName) - 4] = 0;
 
@@ -310,16 +310,11 @@
 
     /* Load all referenced DLLs for kernel, HAL and kdcom.dll */
     strcpy(SearchPath, BootPath);
+    strcat(SearchPath, "system32\\");
     WinLdrScanImportDescriptorTable(LoaderBlock, SearchPath, KernelDTE);
     WinLdrScanImportDescriptorTable(LoaderBlock, SearchPath, HalDTE);
     if (KdComDTE)
         WinLdrScanImportDescriptorTable(LoaderBlock, SearchPath, KdComDTE);
-    /* In system32 too */
-    strcpy(SearchPath + strlen(BootPath), "system32\\");
-    WinLdrScanImportDescriptorTable(LoaderBlock, SearchPath, KernelDTE);
-    WinLdrScanImportDescriptorTable(LoaderBlock, SearchPath, HalDTE);
-    if (KdComDTE)
-        WinLdrScanImportDescriptorTable(LoaderBlock, SearchPath, KdComDTE);
 
     /* Load NLS data, they are in system32 */
     SetupLdrLoadNlsData(LoaderBlock, InfHandle, SearchPath);




More information about the Ros-diffs mailing list