Alexandre Julliard : ntdll: Add a separate helper for creating the initial ntdll module.
Alexandre Julliard
julliard at winehq.org
Thu Feb 25 16:45:37 CST 2021
Module: wine
Branch: master
Commit: 93eb4dbde875497c9c38a79d01f6c045f92560f0
URL: https://source.winehq.org/git/wine.git/?a=commit;h=93eb4dbde875497c9c38a79d01f6c045f92560f0
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Feb 25 12:30:18 2021 +0100
ntdll: Add a separate helper for creating the initial ntdll module.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/loader.c | 40 ++++++++++++++++++++++------------------
1 file changed, 22 insertions(+), 18 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index a166a6cc071..e609a0f77d4 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1937,20 +1937,23 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
/*************************************************************************
- * build_builtin_module
+ * build_ntdll_module
*
- * Build the module for a builtin library.
+ * Build the module data for the initially-loaded ntdll.
*/
-static NTSTATUS build_builtin_module( const WCHAR *load_path, const UNICODE_STRING *nt_name,
- void *module, DWORD flags, WINE_MODREF **pwm )
+static void build_ntdll_module(void)
{
- NTSTATUS status;
- SECTION_IMAGE_INFORMATION image_info = { 0 };
+ MEMORY_BASIC_INFORMATION meminfo;
+ UNICODE_STRING nt_name;
+ WINE_MODREF *wm;
- image_info.u.s.WineBuiltin = 1;
- status = build_module( load_path, nt_name, &module, &image_info, NULL, flags, pwm );
- if (status && module) unix_funcs->unload_builtin_dll( module );
- return status;
+ RtlInitUnicodeString( &nt_name, L"\\??\\C:\\windows\\system32\\ntdll.dll" );
+ NtQueryVirtualMemory( GetCurrentProcess(), build_ntdll_module, MemoryBasicInformation,
+ &meminfo, sizeof(meminfo), NULL );
+ wm = alloc_module( meminfo.AllocationBase, &nt_name, TRUE );
+ assert( wm );
+ wm->ldr.Flags &= ~LDR_DONT_RESOLVE_REFS;
+ if (TRACE_ON(relay)) RELAY_SetupDLL( meminfo.AllocationBase );
}
@@ -2348,7 +2351,14 @@ static NTSTATUS load_so_dll( LPCWSTR load_path, const UNICODE_STRING *nt_name,
}
else
{
- if ((status = build_builtin_module( load_path, &win_name, module, flags, &wm ))) return status;
+ SECTION_IMAGE_INFORMATION image_info = { 0 };
+
+ image_info.u.s.WineBuiltin = 1;
+ if ((status = build_module( load_path, &win_name, &module, &image_info, NULL, flags, pwm )))
+ {
+ if (module) unix_funcs->unload_builtin_dll( module );
+ return status;
+ }
TRACE_(loaddll)( "Loaded %s at %p: builtin\n", debugstr_us(nt_name), module );
}
*pwm = wm;
@@ -3958,8 +3968,6 @@ static NTSTATUS process_init(void)
WINE_MODREF *wm;
NTSTATUS status;
ANSI_STRING func_name;
- UNICODE_STRING nt_name;
- MEMORY_BASIC_INFORMATION meminfo;
INITIAL_TEB stack;
TEB *teb = NtCurrentTeb();
PEB *peb = teb->Peb;
@@ -4059,11 +4067,7 @@ static NTSTATUS process_init(void)
}
#endif
- RtlInitUnicodeString( &nt_name, L"\\??\\C:\\windows\\system32\\ntdll.dll" );
- NtQueryVirtualMemory( GetCurrentProcess(), process_init, MemoryBasicInformation,
- &meminfo, sizeof(meminfo), NULL );
- status = build_builtin_module( params->DllPath.Buffer, &nt_name, meminfo.AllocationBase, 0, &wm );
- assert( !status );
+ build_ntdll_module();
if ((status = load_dll( params->DllPath.Buffer, L"C:\\windows\\system32\\kernel32.dll",
NULL, 0, &wm )) != STATUS_SUCCESS)
More information about the wine-cvs
mailing list