[PATCH 4/4] dlls/kernelbase: in CreateProcess, allocate a console for CUI process
Eric Pouech
eric.pouech at gmail.com
Thu Feb 10 10:34:07 CST 2022
in CreateProcess, if:
- parent isn't attached to any console
- CreateProcess's flag isn't set with DETACHED_PROCESS nor
CREATE_NEW_CONSOLE
- child is a CUI program
then a console must be allocated for the child
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52048
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
---
dlls/kernel32/tests/console.c | 2 +-
dlls/kernelbase/process.c | 6 +++++-
programs/services/services.c | 2 +-
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 16cbb234c21..c62b78e26c1 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -4698,7 +4698,7 @@ static void test_CreateProcess_CUI(void)
GetExitCodeProcess(info.hProcess, &ec);
res = GetExitCodeProcess(info.hProcess, &ec);
ok(res, "Couldn't grab exit code %u\n", GetLastError());
- todo_wine ok(!res || ec == 0, "Got unexpected error code %u\n", ec);
+ ok(!res || ec == 0, "Got unexpected error code %u\n", ec);
CloseHandle(info.hProcess);
}
diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
index 12187b92e5c..fe2f79e60fd 100644
--- a/dlls/kernelbase/process.c
+++ b/dlls/kernelbase/process.c
@@ -191,7 +191,11 @@ static RTL_USER_PROCESS_PARAMETERS *create_process_params( const WCHAR *filename
if (flags & CREATE_NEW_PROCESS_GROUP) params->ConsoleFlags = 1;
if (flags & CREATE_NEW_CONSOLE) params->ConsoleHandle = CONSOLE_HANDLE_ALLOC;
- else if (!(flags & DETACHED_PROCESS)) params->ConsoleHandle = NtCurrentTeb()->Peb->ProcessParameters->ConsoleHandle;
+ else if (!(flags & DETACHED_PROCESS))
+ {
+ params->ConsoleHandle = NtCurrentTeb()->Peb->ProcessParameters->ConsoleHandle;
+ if (!params->ConsoleHandle) params->ConsoleHandle = CONSOLE_HANDLE_ALLOC;
+ }
if (startup->dwFlags & STARTF_USESTDHANDLES)
{
diff --git a/programs/services/services.c b/programs/services/services.c
index 87ab319367b..2edc02d300c 100644
--- a/programs/services/services.c
+++ b/programs/services/services.c
@@ -1094,7 +1094,7 @@ found:
process->use_count++;
service_unlock(service_entry);
- r = CreateProcessW(NULL, path, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, environment, NULL, &si, &pi);
+ r = CreateProcessW(NULL, path, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT | DETACHED_PROCESS, environment, NULL, &si, &pi);
HeapFree(GetProcessHeap(), 0, path);
if (!r)
{
More information about the wine-devel
mailing list