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