From: Paul Gofman <pgofman@codeweavers.com> --- dlls/ntdll/env.c | 1 + dlls/ntdll/tests/info.c | 6 +++--- dlls/ntdll/unix/env.c | 1 + dlls/ntdll/unix/server.c | 13 +++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c index cae5e5d8bbd..1ced62bf608 100644 --- a/dlls/ntdll/env.c +++ b/dlls/ntdll/env.c @@ -699,6 +699,7 @@ void init_user_process_params(void) return; new_params->Environment = env; + new_params->Flags = params->Flags; new_params->DebugFlags = params->DebugFlags; new_params->ConsoleHandle = params->ConsoleHandle; new_params->ConsoleFlags = params->ConsoleFlags; diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index 814ac377547..51978a7b38b 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -4415,7 +4415,7 @@ static void test_process_parameters_flags( int argc, char **argv ) sprintf( keyname, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%s", basename ); if (!strcmp( keyname + strlen(keyname) - 3, ".so" )) keyname[strlen(keyname) - 3] = 0; - todo_wine ok( peb->ProcessParameters->Flags & PROCESS_PARAMS_IMAGE_KEY_MISSING, "got %#lx.\n", peb->ProcessParameters->Flags ); + ok( peb->ProcessParameters->Flags & PROCESS_PARAMS_IMAGE_KEY_MISSING, "got %#lx.\n", peb->ProcessParameters->Flags ); sprintf( cmdline, "%s %s %s", argv[0], argv[1], "check_pp_flags" ); si.cb = sizeof(si); @@ -4431,7 +4431,7 @@ static void test_process_parameters_flags( int argc, char **argv ) ret = CreateProcessA( NULL, cmdline, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi ); ok( ret, "got error %ld.\n", GetLastError() ); flags = get_process_parameters_flags( pi.hProcess ); - todo_wine ok( flags & PROCESS_PARAMS_IMAGE_KEY_MISSING, "got %#lx.\n", peb->ProcessParameters->Flags ); + ok( flags & PROCESS_PARAMS_IMAGE_KEY_MISSING, "got %#lx.\n", peb->ProcessParameters->Flags ); TerminateProcess( pi.hProcess, 0 ); CloseHandle( pi.hThread ); CloseHandle( pi.hProcess ); @@ -4460,7 +4460,7 @@ static void test_process_parameters_flags( int argc, char **argv ) ret = CreateProcessA( NULL, cmdline, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi ); ok( ret, "got error %ld.\n", GetLastError() ); flags = get_process_parameters_flags( pi.hProcess ); - todo_wine ok( flags & PROCESS_PARAMS_IMAGE_KEY_MISSING, "got %#lx.\n", peb->ProcessParameters->Flags ); + ok( flags & PROCESS_PARAMS_IMAGE_KEY_MISSING, "got %#lx.\n", peb->ProcessParameters->Flags ); TerminateProcess( pi.hProcess, 0 ); CloseHandle( pi.hThread ); CloseHandle( pi.hProcess ); diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index f7060b82d23..b54d7920bea 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -1752,6 +1752,7 @@ static void load_global_options( const UNICODE_STRING *image ) peb->NtGlobalFlag = get_dword_option( key, globalflagW, peb->NtGlobalFlag ); NtClose( key ); } + else peb->ProcessParameters->Flags |= PROCESS_PARAMS_IMAGE_KEY_MISSING; NtClose( attr.RootDirectory ); } } diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index 730a0cd9a94..9d3cd30eac7 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -1773,6 +1773,19 @@ void server_init_process_done(void) SERVER_END_REQ; assert( !status ); + if (peb->BeingDebugged) + { + peb->ProcessParameters->Flags &= ~PROCESS_PARAMS_IMAGE_KEY_MISSING; + if (wow_peb) + { +#ifdef _WIN64 + RTL_USER_PROCESS_PARAMETERS32 *wow64_params = ULongToPtr(wow_peb->ProcessParameters); +#else + RTL_USER_PROCESS_PARAMETERS64 *wow64_params = ULongToPtr(wow_peb->ProcessParameters); +#endif + wow64_params->Flags &= ~PROCESS_PARAMS_IMAGE_KEY_MISSING; + } + } signal_start_thread( main_image_info.TransferAddress, peb, data->teb ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11167