load_dll: MODULE_GetLoadOrderW on filename versus libname

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Wed Sep 22 05:13:57 CDT 2004


Hallo,

some installer (extracted from slvc009j.zip from Texas instruments
(www.ti.com)) loaded the native msi.dll, also I gave WINEDLLOVERRIDES=msi=b
on the command line.
The program copies some msi.dll to some directory, and prepends that
directory to the loadpath. Then it calls:
000d:Call kernel32.LoadLibraryA(010013f8 "msi.dll") ret=01004283

load_dll now does a find_dll_file and sees "L:\\temp\\IXP000.TMP\\msi.dll"
. sets filename to "L:\\temp\\IXP000.TMP\\msi.dll" and compares
"L:\\temp\\IXP000.TMP\\msi.dll" for the loadorder.

000d:Call ntdll.LdrLoadDll(403dc0e8 L"L:\\temp\\IXP000.TMP;.;c:\\nt4sp5g\\system32;c:\\nt4sp5g;d:\\wine95;d:\\
wine95\\system;c:\\cae\\pasic\\spde;f:;",00000000,4070f424,4070f404) ret=4052392b
trace:module:load_dll looking for L"msi.dll" in L"L:\\temp\\IXP000.TMP;.;c:\\nt4sp5g\\system32;c:\\nt4sp5g;d:\
\wine95;d:\\wine95\\system;c:\\cae\\pasic\\spde;f:;"
trace:module:MODULE_GetLoadOrderW looking for L"L:\\temp\\IXP000.TMP\\msi.dll"
trace:module:open_app_key searching L"L:\\temp\\IXP000.TMP\\msi" in L"Machine\\Software\\Wine\\Wine\\Config\\A
ppDefaults\\msiinst.exe\\DllOverrides"
trace:module:MODULE_GetLoadOrderW got hardcoded path default "n,b" for L"L:\\temp\\IXP000.TMP\\msi.dll"
trace:module:load_dll Trying native dll L"L:\\temp\\IXP000.TMP\\msi.dll"
trace:module:load_native_dll loading L"L:\\temp\\IXP000.TMP\\msi.dll"

This leads to the native dll getting loaded. Is this the right thing?
Shouldn't MODULE_GetLoadOrderW compare for libname and not filename? Only if
libname has an explicit path, we should compare for that path.

Bye
Index: wine/dlls/ntdll/loader.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/loader.c,v
retrieving revision 1.77
diff -u -w -r1.77 loader.c
--- wine/dlls/ntdll/loader.c	15 Sep 2004 18:02:49 -0000	1.77
+++ wine/dlls/ntdll/loader.c	22 Sep 2004 10:08:48 -0000
@@ -1507,7 +1507,7 @@
     }
 
     main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
-    MODULE_GetLoadOrderW( loadorder, main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename );
+    MODULE_GetLoadOrderW( loadorder, main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, libname );
 
     nts = STATUS_DLL_NOT_FOUND;
     for (i = 0; i < LOADORDER_NTYPES; i++)


-- 
Uwe Bonnes                bon at elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------



More information about the wine-devel mailing list