Module: wine Branch: master Commit: ca95afd37f6416b1972ef33a811939b37b405320 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ca95afd37f6416b1972ef33a8... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Sep 16 20:39:45 2020 +0200 kernelbase: Use console connection object in AttachConsole. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernelbase/console.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index eff63a29a1..8c39cde30a 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -293,24 +293,23 @@ BOOL WINAPI DECLSPEC_HOTPATCH AttachConsole( DWORD pid ) RtlEnterCriticalSection( &console_section ); - SERVER_START_REQ( attach_console ) + if (RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle) { - req->pid = pid; - ret = !wine_server_call_err( req ); + RtlLeaveCriticalSection( &console_section ); + WARN( "console already attached\n" ); + SetLastError( ERROR_ACCESS_DENIED ); + return FALSE; } - SERVER_END_REQ; + ret = create_console_connection( NULL ) && + console_ioctl( console_connection, IOCTL_CONDRV_BIND_PID, &pid, sizeof(pid), NULL, 0, NULL ); if (ret) { - if ((ret = init_console_std_handles())) - { - HANDLE console = CreateFileW( L"CONIN$", GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, 0, NULL, OPEN_EXISTING, 0, 0 ); - if (console != INVALID_HANDLE_VALUE) RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle = console; - else ret = FALSE; - } - if (!ret) FreeConsole(); + RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle = create_console_reference( console_connection ); + ret = RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle && init_console_std_handles(); } + if (!ret) FreeConsole(); RtlLeaveCriticalSection( &console_section ); return ret; }