[PATCH v2 resend] kernel32: Consider the working directory first when launching executables with CreateProcess.

Alexandre Julliard julliard at winehq.org
Wed Jun 5 12:55:42 CDT 2019


"Erich E. Hoover" <erich.e.hoover at gmail.com> writes:

> @@ -440,9 +440,17 @@ static HANDLE open_exe_file( const WCHAR *name, BOOL *is_64bit )
>   */
>  static BOOL find_exe_file( const WCHAR *name, WCHAR *buffer, int buflen, HANDLE *handle )
>  {
> +    WCHAR cur_dir[MAX_PATH];
> +
>      TRACE("looking for %s\n", debugstr_w(name) );
>  
> -    if (!SearchPathW( NULL, name, exeW, buflen, buffer, NULL ) &&
> +    /* The working directory takes precedence over other locations for CreateProcess unless the
> +     * 'NoDefaultCurrentDirectoryInExePath' environment variable is set (and the executable name
> +     * does not contain a backslash). */
> +    if (!(NeedCurrentDirectoryForExePathW( name ) && GetCurrentDirectoryW( MAX_PATH, cur_dir) &&
> +          SearchPathW( cur_dir, name, exeW, buflen, buffer, NULL )) &&
> +        /* not found in the working directory, try the system search path */

It seems to me that the current module path still needs to have
precedence over the current directory, as explained in the
CreateProcess() documentation. Some test cases would be a good idea.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list