Module: wine Branch: master Commit: 1d65e474b1a5aa3ea60e6b14c7a49479b35cc7e1 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1d65e474b1a5aa3ea60e6b14c... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Aug 13 16:02:27 2020 +0200 kernelbase: Use PEB ConsoleHandle to check for console connection in AllocConsole. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernel32/kernel_main.c | 1 + dlls/kernelbase/console.c | 8 +++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dlls/kernel32/kernel_main.c b/dlls/kernel32/kernel_main.c index c7a10d233a..e856cc3af4 100644 --- a/dlls/kernel32/kernel_main.c +++ b/dlls/kernel32/kernel_main.c @@ -150,6 +150,7 @@ static BOOL process_attach( HMODULE module ) if (params->ConsoleHandle == KERNEL32_CONSOLE_ALLOC) { HMODULE mod = GetModuleHandleA(0); + params->ConsoleHandle = NULL; if (RtlImageNtHeader(mod)->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI) AllocConsole(); } diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 71dacb9ff4..484072e252 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -275,20 +275,18 @@ BOOL WINAPI AllocConsole(void) STARTUPINFOW app_si, console_si; WCHAR buffer[1024], cmd[256]; PROCESS_INFORMATION pi; - HANDLE event, std_in, console; - DWORD mode; + HANDLE event, console; BOOL ret; TRACE("()\n"); RtlEnterCriticalSection( &console_section ); - std_in = CreateFileW( L"CONIN$", GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, 0, NULL, OPEN_EXISTING, 0, 0 ); - if (GetConsoleMode( std_in, &mode )) + if (RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle) { /* we already have a console opened on this process, don't create a new one */ - CloseHandle( std_in ); RtlLeaveCriticalSection( &console_section ); + SetLastError( ERROR_ACCESS_DENIED ); return FALSE; }