Module: wine Branch: master Commit: 1d65e474b1a5aa3ea60e6b14c7a49479b35cc7e1 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1d65e474b1a5aa3ea60e6b14c...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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; }