Module: wine Branch: master Commit: fd60a33e5d30210388330f37514135b0d4085474 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fd60a33e5d30210388330f375...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Oct 8 16:58:40 2018 +0200
kernel32: Pass the full filename to winevdm.exe in CreateProcessW().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/process.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 18c0f08..5951501 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -107,7 +107,9 @@ static const WCHAR comW[] = {'.','c','o','m',0}; static const WCHAR batW[] = {'.','b','a','t',0}; static const WCHAR cmdW[] = {'.','c','m','d',0}; static const WCHAR pifW[] = {'.','p','i','f',0}; -static const WCHAR winevdmW[] = {'w','i','n','e','v','d','m','.','e','x','e',0}; +static WCHAR winevdm[] = {'C',':','\','w','i','n','d','o','w','s', + '\','s','y','s','t','e','m','3','2', + '\','w','i','n','e','v','d','m','.','e','x','e',0};
static void exec_process( LPCWSTR name );
@@ -1140,6 +1142,7 @@ static void init_windows_dirs(void) if (is_win64 || is_wow64) /* SysWow64 is always defined on 64-bit */ { DIR_SysWow64 = default_syswow64W; + memcpy( winevdm, default_syswow64W, sizeof(default_syswow64W) - sizeof(WCHAR) ); if (!CreateDirectoryW( DIR_SysWow64, NULL ) && GetLastError() != ERROR_ALREADY_EXISTS) ERR( "directory %s could not be created, error %u\n", debugstr_w(DIR_SysWow64), GetLastError() ); @@ -1445,9 +1448,7 @@ void CDECL __wine_kernel_init(void) } else if (error == ERROR_MOD_NOT_FOUND) { - if ((p = strrchrW( main_exe_name, '\' ))) p++; - else p = main_exe_name; - if (!strcmpiW( p, winevdmW ) && __wine_main_argc > 3) + if (!strcmpiW( main_exe_name, winevdm ) && __wine_main_argc > 3) { /* args 1 and 2 are --app-name full_path */ MESSAGE( "wine: could not run %s: 16-bit/DOS support missing\n", @@ -2438,17 +2439,16 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L return FALSE;
new_cmd_line = HeapAlloc(GetProcessHeap(), 0, - (strlenW(buffer) + strlenW(cmd_line) + 30) * sizeof(WCHAR)); - + (strlenW(buffer) + strlenW(cmd_line) + strlenW(winevdm) + 16) * sizeof(WCHAR)); if (!new_cmd_line) { SetLastError( ERROR_OUTOFMEMORY ); return FALSE; } - sprintfW(new_cmd_line, argsW, winevdmW, buffer, cmd_line); + sprintfW(new_cmd_line, argsW, winevdm, buffer, cmd_line); memset( &pe_info, 0, sizeof(pe_info) ); pe_info.machine = IMAGE_FILE_MACHINE_I386; - ret = create_process( 0, winevdmW, new_cmd_line, env, cur_dir, psa, tsa, inherit, + ret = create_process( 0, winevdm, new_cmd_line, env, cur_dir, psa, tsa, inherit, flags, startup, info, unixdir, &pe_info, exec_only ); HeapFree( GetProcessHeap(), 0, new_cmd_line ); return ret;