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++)