On 22/6/21 2:40 am, Jacek Caban wrote:
Hi Brendan,
On 6/15/21 1:17 PM, Brendan McGrath wrote:
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51264 Signed-off-by: Brendan McGrath brendan@redmandi.com
Changes since v1:
- Correct the Wine-Bug reference
dlls/kernelbase/process.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index e3bd5feb296c..2833e76138bf 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -141,8 +141,8 @@ static WCHAR *get_file_name( WCHAR *cmdline, WCHAR *buffer, DWORD buflen ) * create_process_params */ static RTL_USER_PROCESS_PARAMETERS *create_process_params( const WCHAR *filename, const WCHAR *cmdline,
- const WCHAR *cur_dir, void *env, DWORD flags,
- const STARTUPINFOW *startup )
- const WCHAR *cur_dir, void *env, BOOL inherit,
- DWORD flags, const STARTUPINFOW *startup )
{ RTL_USER_PROCESS_PARAMETERS *params; UNICODE_STRING imageW, curdirW, cmdlineW, titleW, desktopW, runtimeW, newdirW; @@ -199,7 +199,7 @@ static RTL_USER_PROCESS_PARAMETERS *create_process_params( const WCHAR *filename params->hStdOutput = startup->hStdOutput; params->hStdError = startup->hStdError; } - else if (flags & DETACHED_PROCESS) + else if (flags & DETACHED_PROCESS || ((flags & CREATE_NEW_CONSOLE) && !inherit) )
Is the !inherit condition needed here? If CreateProcess (modern) part of [1] is correct, we could probably use that branch for CREATE_NEW_CONSOLE regardless of inherit value.
You're right. Currently in Wine, if the inherit parameter is set to TRUE, it will inherit the StdHandles; even with CREATE_NEW_CONSOLE. But I ran a test on Windows and it did not.
It would be great to have a test that directly uses CreateProcess() instead of ShellExecuteEx() so that we can verify that.
I tried adding a couple of simple tests to kernel32, but for them to work, I needed to add the '-mwindows' flag to the gcc options for kernel32_test.exe (as the tests require the child process to have the subsystem value of IMAGE_SUBSYSTEM_WINDOWS_GUI in its PE header).
This change however causes some of the existing tests to fail on Windows: https://testbot.winehq.org/JobDetails.pl?Key=92898
The only tests that failed on the Debian machine were two of my new ones (and that's because I incorrectly marked them as todo_wine). So this shows (for the failing Windows tests) that Windows changes how it behaves based on the subsystem value in the PE header; but Wine does not. So we probably want a way to test both an IMAGE_SUBSYSTEM_WINDOWS_GUI PE subsystem value and an IMAGE_SUBSYSTEM_WINDOWS_CUI PE subsystem value (i.e. GUI vs CUI).
But if so - what would be the best way to do that (that wouldn't impact the current testing process)?
Thanks,
Jacek
[1] https://github.com/rprichard/win32-console-docs/blob/master/README.md