From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- dlls/kernel32/tests/console.c | 2 +- dlls/kernelbase/console.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index 24c1e5c69fd..4e164c11b3d 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -4951,7 +4951,7 @@ static void test_CreateProcessCUI(void) }, with_console_tests[] = { -/* 0*/ {FALSE, 0, NULL_STD, 0, TRUE}, +/* 0*/ {FALSE, 0, NULL_STD, 0}, {FALSE, DETACHED_PROCESS, NULL_STD, 0}, {FALSE, CREATE_NEW_CONSOLE, NULL_STD, 0}, {FALSE, CREATE_NO_WINDOW, NULL_STD, 0}, diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 831e358c692..7745ee7ee14 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -2344,14 +2344,19 @@ void init_console( void ) init_console_std_handles( FALSE ); } } + else if (RtlImageNtHeader( GetModuleHandleW( NULL ))->OptionalHeader.Subsystem != + IMAGE_SUBSYSTEM_WINDOWS_CUI) + { + /* don't try to close pseudo handles */ + if ((LONG_PTR)params->ConsoleHandle > 0) CloseHandle(params->ConsoleHandle); + params->ConsoleHandle = NULL; + } else if (params->ConsoleHandle == CONSOLE_HANDLE_ALLOC || params->ConsoleHandle == CONSOLE_HANDLE_ALLOC_NO_WINDOW) { BOOL no_window = params->ConsoleHandle == CONSOLE_HANDLE_ALLOC_NO_WINDOW; - HMODULE mod = GetModuleHandleW( NULL ); params->ConsoleHandle = NULL; - if (RtlImageNtHeader( mod )->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI) - alloc_console( no_window ); + alloc_console( no_window ); } else if (params->ConsoleHandle && params->ConsoleHandle != CONSOLE_HANDLE_SHELL_NO_WINDOW) create_console_connection( params->ConsoleHandle );