From: Paul Gofman <pgofman@codeweavers.com> --- dlls/kernel32/tests/loader.c | 8 ++++---- dlls/kernelbase/loader.c | 4 +++- dlls/ntdll/loader.c | 4 ++-- include/winternl.h | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index 4112c3674cd..529b9de870d 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -2305,15 +2305,15 @@ static void test_import_resolution(void) ok( mod != NULL, "failed to load err %lu\n", GetLastError() ); if (!mod) break; ptr = (struct imports *)((char *)mod + page_size); - todo_wine_if (test == 7) ok( ptr->thunks[0].u1.Function == 0xdeadbeef, "thunk resolved to %p for %s.%s\n", + ok( ptr->thunks[0].u1.Function == 0xdeadbeef, "thunk resolved to %p for %s.%s\n", (void *)ptr->thunks[0].u1.Function, data.module, data.function.name ); - todo_wine_if (test == 7) ok( ptr->tls_index == 9999, "wrong tls index %d\n", ptr->tls_index ); + ok( ptr->tls_index == 9999, "wrong tls index %d\n", ptr->tls_index ); mod2 = LoadLibraryW( dll_name ); ok( mod2 == mod, "loaded twice %p / %p\n", mod, mod2 ); - todo_wine_if (test == 7) ok( ptr->thunks[0].u1.Function == 0xdeadbeef, "thunk resolved to %p for %s.%s\n", + ok( ptr->thunks[0].u1.Function == 0xdeadbeef, "thunk resolved to %p for %s.%s\n", (void *)ptr->thunks[0].u1.Function, data.module, data.function.name ); - todo_wine_if (test == 7) ok( ptr->tls_index == 9999, "wrong tls index %d\n", ptr->tls_index ); + ok( ptr->tls_index == 9999, "wrong tls index %d\n", ptr->tls_index ); check_tls_index(mod, ptr->tls_index != 9999); FreeLibrary( mod2 ); FreeLibrary( mod ); diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c index 8e6a62512e1..35edbd1922b 100644 --- a/dlls/kernelbase/loader.c +++ b/dlls/kernelbase/loader.c @@ -155,6 +155,7 @@ static HMODULE load_library( const UNICODE_STRING *libname, DWORD flags ) NTSTATUS status; HMODULE module; WCHAR *load_path, *dummy; + DWORD load_flags = 0; if (flags & unsupported_flags) FIXME( "unsupported flag(s) used %#08lx\n", flags ); @@ -168,7 +169,8 @@ static HMODULE load_library( const UNICODE_STRING *libname, DWORD flags ) } else { - status = LdrLoadDll( load_path, &flags, libname, &module ); + if (flags & DONT_RESOLVE_DLL_REFERENCES) load_flags |= LDR_DONT_RESOLVE_REFS; + status = LdrLoadDll( load_path, &load_flags, libname, &module ); if (!set_ntstatus( status )) { module = 0; diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index ae799885346..58a265f5b70 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -2283,7 +2283,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name, /* fixup imports */ - if (!(flags & DONT_RESOLVE_DLL_REFERENCES) && + if (!(flags & LDR_DONT_RESOLVE_REFS) && ((nt->FileHeader.Characteristics & IMAGE_FILE_DLL) || nt->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_NATIVE)) { @@ -2900,7 +2900,7 @@ static WINE_MODREF *build_main_module(void) #endif status = RtlDosPathNameToNtPathName_U_WithStatus( params->ImagePathName.Buffer, &nt_name, NULL, NULL ); if (status) goto failed; - status = build_module( NULL, &nt_name, &module, &info, NULL, DONT_RESOLVE_DLL_REFERENCES, FALSE, + status = build_module( NULL, &nt_name, &module, &info, NULL, LDR_DONT_RESOLVE_REFS, FALSE, FALSE, &wm ); if (status) goto failed; RtlFreeUnicodeString( &nt_name ); diff --git a/include/winternl.h b/include/winternl.h index 0b981c24062..bdfaa0779fb 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -3993,6 +3993,7 @@ typedef union _LDR_DLL_NOTIFICATION_DATA typedef void (CALLBACK *PLDR_DLL_NOTIFICATION_FUNCTION)(ULONG, LDR_DLL_NOTIFICATION_DATA*, void*); /* those defines are (some of the) regular LDR_DATA_TABLE_ENTRY.Flags values */ +#define LDR_DONT_RESOLVE_REFS 0x00000002 #define LDR_IMAGE_IS_DLL 0x00000004 #define LDR_LOAD_IN_PROGRESS 0x00001000 #define LDR_UNLOAD_IN_PROGRESS 0x00002000 @@ -4002,8 +4003,7 @@ typedef void (CALLBACK *PLDR_DLL_NOTIFICATION_FUNCTION)(ULONG, LDR_DLL_NOTIFICAT #define LDR_COR_ILONLY 0x01000000 #define LDR_REDIRECTED 0x10000000 -/* these ones is Wine specific */ -#define LDR_DONT_RESOLVE_REFS 0x40000000 +/* this one is Wine specific */ #define LDR_WINE_INTERNAL 0x80000000 /* flag for LdrAddRefDll */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9888