Jacek Caban : kernelbase: Move force override logic to init_console_std_handles callers.
Module: wine Branch: master Commit: ef57a8df8b53fcacf769a28bb9f4e77317ce7167 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ef57a8df8b53fcacf769a28bb... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Sep 21 17:06:50 2020 +0200 kernelbase: Move force override logic to init_console_std_handles callers. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernelbase/console.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 8c39cde30a..2289d7ea5f 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -224,20 +224,18 @@ static BOOL create_console_connection( HANDLE root ) return set_ntstatus( status ); } -static BOOL init_console_std_handles(void) +static BOOL init_console_std_handles( BOOL override_all ) { HANDLE std_out = NULL, std_err = NULL, handle; OBJECT_ATTRIBUTES attr = {sizeof(attr)}; IO_STATUS_BLOCK iosb; UNICODE_STRING name; - STARTUPINFOW si; NTSTATUS status; - GetStartupInfoW( &si ); attr.ObjectName = &name; attr.Attributes = OBJ_INHERIT; - if (!(si.dwFlags & STARTF_USESTDHANDLES) || !GetStdHandle( STD_INPUT_HANDLE )) + if (override_all || !GetStdHandle( STD_INPUT_HANDLE )) { /* FIXME: Use unbound console handle */ RtlInitUnicodeString( &name, L"\\Device\\ConDrv\\CurrentIn" ); @@ -250,7 +248,7 @@ static BOOL init_console_std_handles(void) SetStdHandle( STD_INPUT_HANDLE, console_handle_map( handle )); } - if (si.dwFlags & STARTF_USESTDHANDLES) + if (!override_all) { std_out = GetStdHandle( STD_OUTPUT_HANDLE ); std_err = GetStdHandle( STD_ERROR_HANDLE ); @@ -306,7 +304,13 @@ BOOL WINAPI DECLSPEC_HOTPATCH AttachConsole( DWORD pid ) if (ret) { RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle = create_console_reference( console_connection ); - ret = RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle && init_console_std_handles(); + if (RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle) + { + STARTUPINFOW si; + GetStartupInfoW( &si ); + init_console_std_handles( !(si.dwFlags & STARTF_USESTDHANDLES) ); + } + else ret = FALSE; } if (!ret) FreeConsole(); @@ -379,7 +383,7 @@ BOOL WINAPI AllocConsole(void) CloseHandle( pi.hProcess ); } CloseHandle( event ); - if (!ret || !init_console_std_handles()) goto error; + if (!ret || !init_console_std_handles( !(app_si.dwFlags & STARTF_USESTDHANDLES) )) goto error; console = CreateFileW( L"CONIN$", GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, 0, NULL, OPEN_EXISTING, 0, 0 ); if (console == INVALID_HANDLE_VALUE) goto error; RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle = console;
participants (1)
-
Alexandre Julliard