[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: [PATCH 3/3] kernelbase: Move KERNEL32_CONSOLE_ALLOC handling to kernelbase.
From: Jacek Caban <jacek () codeweavers ! com>
Date: 2020-08-31 13:11:23
Message-ID: ed756931-0416-2534-7cec-b58ce90ab5da () codeweavers ! com
[Download RAW message or body]
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
---
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(-)
["0003-kernelbase-Move-KERNEL32_CONSOLE_ALLOC-handling-to-ker.txt" (text/x-patch)]
diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
index afbf9a91da0..5b5722847fb 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 e856cc3af47..450a10e93b8 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 2a0e5247488..ce893d7bc49 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 42dc971227d..7589f305b51 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 eb6439684a8..14177a5e19c 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 */
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic