Module: wine Branch: master Commit: b7db0b52cee65a008f503ce727befcad3ba8d28a URL: https://source.winehq.org/git/wine.git/?a=commit;h=b7db0b52cee65a008f503ce72...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Nov 7 16:54:31 2019 +0100
ntdll: Initialize earlier things that need the executable name.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/loader.c | 45 ++++++++++++++++++++++----------------------- dlls/ntdll/ntdll_misc.h | 2 +- dlls/ntdll/version.c | 33 +++++++++++++++------------------ 3 files changed, 38 insertions(+), 42 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index cc7bf6900b..b16d646bdd 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -3832,28 +3832,33 @@ static void load_global_options(void) attr.SecurityQualityOfService = NULL; RtlInitUnicodeString( &name_str, sessionW );
- if (NtOpenKey( &hkey, KEY_QUERY_VALUE, &attr )) return; - - query_dword_option( hkey, globalflagW, &NtCurrentTeb()->Peb->NtGlobalFlag ); - query_dword_option( hkey, safesearchW, &path_safe_mode ); - query_dword_option( hkey, safedllmodeW, &dll_safe_mode ); + if (!NtOpenKey( &hkey, KEY_QUERY_VALUE, &attr )) + { + query_dword_option( hkey, globalflagW, &NtCurrentTeb()->Peb->NtGlobalFlag ); + query_dword_option( hkey, safesearchW, &path_safe_mode ); + query_dword_option( hkey, safedllmodeW, &dll_safe_mode );
- if (!query_dword_option( hkey, critsectW, &value )) - NtCurrentTeb()->Peb->CriticalSectionTimeout.QuadPart = (ULONGLONG)value * -10000000; + if (!query_dword_option( hkey, critsectW, &value )) + NtCurrentTeb()->Peb->CriticalSectionTimeout.QuadPart = (ULONGLONG)value * -10000000;
- if (!query_dword_option( hkey, heapresW, &value )) - NtCurrentTeb()->Peb->HeapSegmentReserve = value; + if (!query_dword_option( hkey, heapresW, &value )) + NtCurrentTeb()->Peb->HeapSegmentReserve = value;
- if (!query_dword_option( hkey, heapcommitW, &value )) - NtCurrentTeb()->Peb->HeapSegmentCommit = value; + if (!query_dword_option( hkey, heapcommitW, &value )) + NtCurrentTeb()->Peb->HeapSegmentCommit = value;
- if (!query_dword_option( hkey, decommittotalW, &value )) - NtCurrentTeb()->Peb->HeapDeCommitTotalFreeThreshold = value; + if (!query_dword_option( hkey, decommittotalW, &value )) + NtCurrentTeb()->Peb->HeapDeCommitTotalFreeThreshold = value;
- if (!query_dword_option( hkey, decommitfreeW, &value )) - NtCurrentTeb()->Peb->HeapDeCommitFreeBlockThreshold = value; + if (!query_dword_option( hkey, decommitfreeW, &value )) + NtCurrentTeb()->Peb->HeapDeCommitFreeBlockThreshold = value;
- NtClose( hkey ); + NtClose( hkey ); + } + LdrQueryImageFileExecutionOptions( &NtCurrentTeb()->Peb->ProcessParameters->ImagePathName, + globalflagW, REG_DWORD, &NtCurrentTeb()->Peb->NtGlobalFlag, + sizeof(DWORD), NULL ); + heap_set_debug_flags( GetProcessHeap() ); }
@@ -4223,8 +4228,6 @@ void __wine_process_init(void) static const WCHAR kernel32W[] = {'\','?','?','\','C',':','\','w','i','n','d','o','w','s','\', 's','y','s','t','e','m','3','2','\', 'k','e','r','n','e','l','3','2','.','d','l','l',0}; - static const WCHAR globalflagW[] = {'G','l','o','b','a','l','F','l','a','g',0}; - WINE_MODREF *wm; NTSTATUS status; ANSI_STRING func_name; @@ -4239,6 +4242,7 @@ void __wine_process_init(void) umask( FILE_umask );
load_global_options(); + version_init();
/* setup the load callback and create ntdll modref */ wine_dll_set_callback( load_builtin_callback ); @@ -4268,13 +4272,8 @@ void __wine_process_init(void) }
NtCurrentTeb()->Peb->LoaderLock = &loader_section; - version_init( wm->ldr.FullDllName.Buffer ); virtual_set_large_address_space();
- LdrQueryImageFileExecutionOptions( &wm->ldr.FullDllName, globalflagW, REG_DWORD, - &NtCurrentTeb()->Peb->NtGlobalFlag, sizeof(DWORD), NULL ); - heap_set_debug_flags( GetProcessHeap() ); - /* the main exe needs to be the first in the load order list */ RemoveEntryList( &wm->ldr.InLoadOrderModuleList ); InsertHeadList( &NtCurrentTeb()->Peb->LdrData->InLoadOrderModuleList, &wm->ldr.InLoadOrderModuleList ); diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index e2280dea84..074792ff2a 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -77,7 +77,7 @@ extern void signal_start_thread( LPTHREAD_START_ROUTINE entry, void *arg, BOOL s extern void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) DECLSPEC_HIDDEN; extern void DECLSPEC_NORETURN signal_exit_thread( int status ) DECLSPEC_HIDDEN; extern void DECLSPEC_NORETURN signal_exit_process( int status ) DECLSPEC_HIDDEN; -extern void version_init( const WCHAR *appname ) DECLSPEC_HIDDEN; +extern void version_init(void) DECLSPEC_HIDDEN; extern void debug_init(void) DECLSPEC_HIDDEN; extern void thread_init(void) DECLSPEC_HIDDEN; extern void actctx_init(void) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/version.c b/dlls/ntdll/version.c index 9c9f2cc8cd..bd03382899 100644 --- a/dlls/ntdll/version.c +++ b/dlls/ntdll/version.c @@ -485,7 +485,7 @@ static BOOL parse_win_version( HANDLE hkey ) /********************************************************************** * version_init */ -void version_init( const WCHAR *appname ) +void version_init(void) { static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\','W','i','n','e',0}; static const WCHAR appdefaultsW[] = {'A','p','p','D','e','f','a','u','l','t','s','\',0}; @@ -493,6 +493,8 @@ void version_init( const WCHAR *appname ) UNICODE_STRING nameW; HANDLE root, hkey, config_key; BOOL got_win_ver = FALSE; + const WCHAR *p, *appname = NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer; + WCHAR appversion[MAX_PATH+20];
current_version = &VersionData[WIN7];
@@ -511,26 +513,21 @@ void version_init( const WCHAR *appname ) if (!config_key) goto done;
/* open AppDefaults\appname key */ - if (appname && *appname) - { - const WCHAR *p; - WCHAR appversion[MAX_PATH+20];
- if ((p = strrchrW( appname, '/' ))) appname = p + 1; - if ((p = strrchrW( appname, '\' ))) appname = p + 1; + if ((p = strrchrW( appname, '/' ))) appname = p + 1; + if ((p = strrchrW( appname, '\' ))) appname = p + 1;
- strcpyW( appversion, appdefaultsW ); - strcatW( appversion, appname ); - RtlInitUnicodeString( &nameW, appversion ); - attr.RootDirectory = config_key; + strcpyW( appversion, appdefaultsW ); + strcatW( appversion, appname ); + RtlInitUnicodeString( &nameW, appversion ); + attr.RootDirectory = config_key;
- /* @@ Wine registry key: HKCU\Software\Wine\AppDefaults\app.exe */ - if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) - { - TRACE( "getting version from %s\n", debugstr_w(appversion) ); - got_win_ver = parse_win_version( hkey ); - NtClose( hkey ); - } + /* @@ Wine registry key: HKCU\Software\Wine\AppDefaults\app.exe */ + if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) + { + TRACE( "getting version from %s\n", debugstr_w(appversion) ); + got_win_ver = parse_win_version( hkey ); + NtClose( hkey ); }
if (!got_win_ver)