[PATCH v2] kernelbase: Don't pass on StdHandles if they are never to be inherited
Brendan McGrath
brendan at redmandi.com
Tue Jun 22 01:52:45 CDT 2021
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 at 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
>
More information about the wine-devel
mailing list