Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/ntdll/loader.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 35a474a93e..782e1d28af 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -821,10 +821,11 @@ static NTSTATUS create_module_activation_context( LDR_MODULE *module ) * Some dlls (corpol.dll from IE6 for instance) are incorrectly marked as native * while being perfectly normal DLLs. This heuristic should catch such breakages. */ -static BOOL is_dll_native_subsystem( HMODULE module, const IMAGE_NT_HEADERS *nt, LPCWSTR filename ) +static BOOL is_dll_native_subsystem( WINE_MODREF *wm ) { static const WCHAR ntdllW[] = {'n','t','d','l','l','.','d','l','l',0}; static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0}; + const IMAGE_NT_HEADERS *nt = RtlImageNtHeader( wm->ldr.BaseAddress ); const IMAGE_IMPORT_DESCRIPTOR *imports; DWORD i, size; WCHAR buffer[16]; @@ -832,18 +833,19 @@ static BOOL is_dll_native_subsystem( HMODULE module, const IMAGE_NT_HEADERS *nt, if (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_NATIVE) return FALSE; if (nt->OptionalHeader.SectionAlignment < page_size) return TRUE;
- if ((imports = RtlImageDirectoryEntryToData( module, TRUE, + if ((imports = RtlImageDirectoryEntryToData( wm->ldr.BaseAddress, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &size ))) { for (i = 0; imports[i].Name; i++) { - const char *name = get_rva( module, imports[i].Name ); + const char *name = get_rva( wm->ldr.BaseAddress, imports[i].Name ); DWORD len = strlen(name); if (len * sizeof(WCHAR) >= sizeof(buffer)) continue; ascii_to_unicode( buffer, name, len + 1 ); if (!strcmpiW( buffer, ntdllW ) || !strcmpiW( buffer, kernel32W )) { - TRACE( "%s imports %s, assuming not native\n", debugstr_w(filename), debugstr_w(buffer) ); + TRACE( "%s imports %s, assuming not native\n", + debugstr_us(&wm->ldr.BaseDllName), debugstr_w(buffer) ); return FALSE; } } @@ -1083,7 +1085,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) else p = wm->ldr.FullDllName.Buffer; RtlInitUnicodeString( &wm->ldr.BaseDllName, p );
- if (!(nt->FileHeader.Characteristics & IMAGE_FILE_DLL) || !is_dll_native_subsystem( hModule, nt, p )) + if (!(nt->FileHeader.Characteristics & IMAGE_FILE_DLL) || !is_dll_native_subsystem( wm )) { if (nt->FileHeader.Characteristics & IMAGE_FILE_DLL) wm->ldr.Flags |= LDR_IMAGE_IS_DLL;