Jacek Caban : kernelbase: Use PEB ConsoleHandle to check for console connection in AllocConsole.
Alexandre Julliard
julliard at winehq.org
Thu Aug 13 15:11:52 CDT 2020
Module: wine
Branch: master
Commit: 1d65e474b1a5aa3ea60e6b14c7a49479b35cc7e1
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1d65e474b1a5aa3ea60e6b14c7a49479b35cc7e1
Author: Jacek Caban <jacek at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
}
More information about the wine-cvs
mailing list