Jacek Caban : kernelbase: Move KERNEL32_CONSOLE_ALLOC handling to kernelbase.

Alexandre Julliard julliard at winehq.org
Mon Aug 31 17:16:54 CDT 2020


Module: wine
Branch: master
Commit: 26e04d52fe466e44eb5ca383c94c2920c5e294ec
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=26e04d52fe466e44eb5ca383c94c2920c5e294ec

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Aug 31 15:11:23 2020 +0200

kernelbase: Move KERNEL32_CONSOLE_ALLOC handling to kernelbase.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/console.c        |  6 +++---
 dlls/kernel32/kernel_main.c    | 13 -------------
 dlls/kernel32/kernel_private.h |  1 -
 dlls/kernelbase/console.c      | 10 ++++++++++
 include/wine/condrv.h          |  3 +++
 5 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
index afbf9a91da..5b5722847f 100644
--- a/dlls/kernel32/console.c
+++ b/dlls/kernel32/console.c
@@ -1129,7 +1129,7 @@ BOOL CONSOLE_Init(RTL_USER_PROCESS_PARAMETERS *params)
      */
     if (!params->hStdInput || params->hStdInput == INVALID_HANDLE_VALUE)
         params->hStdInput = 0;
-    else if (VerifyConsoleIoHandle(params->hStdInput))
+    else if (!is_console_handle(params->hStdInput) && VerifyConsoleIoHandle(params->hStdInput))
     {
         params->hStdInput = console_handle_map(params->hStdInput);
         save_console_mode(params->hStdInput);
@@ -1137,12 +1137,12 @@ BOOL CONSOLE_Init(RTL_USER_PROCESS_PARAMETERS *params)
 
     if (!params->hStdOutput || params->hStdOutput == INVALID_HANDLE_VALUE)
         params->hStdOutput = 0;
-    else if (VerifyConsoleIoHandle(params->hStdOutput))
+    else if (!is_console_handle(params->hStdOutput) && VerifyConsoleIoHandle(params->hStdOutput))
         params->hStdOutput = console_handle_map(params->hStdOutput);
 
     if (!params->hStdError || params->hStdError == INVALID_HANDLE_VALUE)
         params->hStdError = 0;
-    else if (VerifyConsoleIoHandle(params->hStdError))
+    else if (!is_console_handle(params->hStdError) && VerifyConsoleIoHandle(params->hStdError))
         params->hStdError = console_handle_map(params->hStdError);
 
     return TRUE;
diff --git a/dlls/kernel32/kernel_main.c b/dlls/kernel32/kernel_main.c
index e856cc3af4..450a10e93b 100644
--- a/dlls/kernel32/kernel_main.c
+++ b/dlls/kernel32/kernel_main.c
@@ -147,19 +147,6 @@ static BOOL process_attach( HMODULE module )
             LoadLibraryA( "krnl386.exe16" );
     }
 
-    if (params->ConsoleHandle == KERNEL32_CONSOLE_ALLOC)
-    {
-        HMODULE mod = GetModuleHandleA(0);
-        params->ConsoleHandle = NULL;
-        if (RtlImageNtHeader(mod)->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI)
-            AllocConsole();
-    }
-    /* else TODO for DETACHED_PROCESS:
-     * 1/ inherit console + handles
-     * 2/ create std handles, if handles are not inherited
-     * TBD when not using wineserver handles for console handles
-     */
-
     return TRUE;
 }
 
diff --git a/dlls/kernel32/kernel_private.h b/dlls/kernel32/kernel_private.h
index 2a0e524748..ce893d7bc4 100644
--- a/dlls/kernel32/kernel_private.h
+++ b/dlls/kernel32/kernel_private.h
@@ -51,7 +51,6 @@ static inline BOOL set_ntstatus( NTSTATUS status )
 }
 
 /* Some Wine specific values for Console inheritance (params->ConsoleHandle) */
-#define KERNEL32_CONSOLE_ALLOC          ((HANDLE)1)
 #define KERNEL32_CONSOLE_SHELL          ((HANDLE)2)
 
 extern HMODULE kernel32_handle DECLSPEC_HIDDEN;
diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c
index 42dc971227..7589f305b5 100644
--- a/dlls/kernelbase/console.c
+++ b/dlls/kernelbase/console.c
@@ -1729,5 +1729,15 @@ HRESULT WINAPI ResizePseudoConsole( HPCON handle, COORD size )
 
 void init_console( void )
 {
+    RTL_USER_PROCESS_PARAMETERS *params = RtlGetCurrentPeb()->ProcessParameters;
+
+    if (params->ConsoleHandle == CONSOLE_HANDLE_ALLOC)
+    {
+        HMODULE mod = GetModuleHandleW( NULL );
+        params->ConsoleHandle = NULL;
+        if (RtlImageNtHeader( mod )->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI)
+            AllocConsole();
+    }
+
     RtlAddVectoredExceptionHandler( FALSE, handle_ctrl_c );
 }
diff --git a/include/wine/condrv.h b/include/wine/condrv.h
index eb6439684a..14177a5e19 100644
--- a/include/wine/condrv.h
+++ b/include/wine/condrv.h
@@ -226,4 +226,7 @@ enum condrv_renderer_event_type
     CONSOLE_RENDERER_EXIT_EVENT,
 };
 
+/* Wine specific values for console inheritance (params->ConsoleHandle) */
+#define CONSOLE_HANDLE_ALLOC  ((HANDLE)1)
+
 #endif /* _INC_CONDRV */




More information about the wine-cvs mailing list