Changeset View
Changeset View
Standalone View
Standalone View
files/d3d9-helper.patch
| From c2a4bb932e5f37c6ccd6e9934965041d5372e34f Mon Sep 17 00:00:00 2001 | From f0991570f98db2ffcb64fa88882ecccd40474392 Mon Sep 17 00:00:00 2001 | ||||
| From: Nick Sarnie <commendsarnex@gmail.com> | From: Nick Sarnie <commendsarnex@gmail.com> | ||||
| Date: Wed, 20 Sep 2017 20:50:18 -0400 | Date: Sun, 5 Nov 2017 22:31:50 -0500 | ||||
| Subject: [PATCH] D3D9 Helper | Subject: [PATCH] D3D9 Helper | ||||
| Signed-off-by: Nick Sarnie <commendsarnex@gmail.com> | Signed-off-by: Nick Sarnie <commendsarnex@gmail.com> | ||||
| --- | --- | ||||
| dlls/ntdll/loader.c | 66 ++++++---- | dlls/ntdll/loader.c | 66 ++++++---- | ||||
| dlls/ntdll/loadorder.c | 304 ++++++++++++++++++++++++++++++++----------- | dlls/ntdll/loadorder.c | 304 ++++++++++++++++++++++++++++++++----------- | ||||
| dlls/ntdll/ntdll_misc.h | 1 + | dlls/ntdll/ntdll_misc.h | 1 + | ||||
| programs/winecfg/Makefile.in | 1 + | programs/winecfg/Makefile.in | 1 + | ||||
| programs/winecfg/main.c | 12 +- | programs/winecfg/main.c | 12 +- | ||||
| programs/winecfg/resource.h | 5 + | programs/winecfg/resource.h | 5 + | ||||
| programs/winecfg/staging.c | 93 +++++++++++++ | programs/winecfg/staging.c | 93 +++++++++++++ | ||||
| programs/winecfg/winecfg.h | 1 + | programs/winecfg/winecfg.h | 1 + | ||||
| programs/winecfg/winecfg.rc | 10 ++ | programs/winecfg/winecfg.rc | 10 ++ | ||||
| 9 files changed, 394 insertions(+), 99 deletions(-) | 9 files changed, 394 insertions(+), 99 deletions(-) | ||||
| create mode 100644 programs/winecfg/staging.c | create mode 100644 programs/winecfg/staging.c | ||||
| diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c | diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c | ||||
| index 76edd2a053..080ecb3a63 100644 | index 9c89d57154..5c493b98a4 100644 | ||||
| --- a/dlls/ntdll/loader.c | --- a/dlls/ntdll/loader.c | ||||
| +++ b/dlls/ntdll/loader.c | +++ b/dlls/ntdll/loader.c | ||||
| @@ -93,6 +93,7 @@ struct builtin_load_info | @@ -93,6 +93,7 @@ struct builtin_load_info | ||||
| { | { | ||||
| const WCHAR *load_path; | const WCHAR *load_path; | ||||
| const WCHAR *filename; | const WCHAR *filename; | ||||
| + const WCHAR *fakemodule; | + const WCHAR *fakemodule; | ||||
| NTSTATUS status; | NTSTATUS status; | ||||
| WINE_MODREF *wm; | WINE_MODREF *wm; | ||||
| }; | }; | ||||
| @@ -124,7 +125,8 @@ static WINE_MODREF *cached_modref; | @@ -118,7 +119,8 @@ static WINE_MODREF *cached_modref; | ||||
| static WINE_MODREF *current_modref; | static WINE_MODREF *current_modref; | ||||
| static WINE_MODREF *last_failed_modref; | static WINE_MODREF *last_failed_modref; | ||||
| -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ); | -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ); | ||||
| +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | ||||
| + DWORD flags, WINE_MODREF** pwm ); | + DWORD flags, WINE_MODREF** pwm ); | ||||
| static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved ); | static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved ); | ||||
| static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports, | static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports, | ||||
| DWORD exp_size, DWORD ordinal, LPCWSTR load_path ); | DWORD exp_size, DWORD ordinal, LPCWSTR load_path ); | ||||
| @@ -475,7 +477,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS | @@ -469,7 +471,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS | ||||
| if (!(wm = find_basename_module( mod_name ))) | if (!(wm = find_basename_module( mod_name ))) | ||||
| { | { | ||||
| TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward ); | TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward ); | ||||
| - if (load_dll( load_path, mod_name, 0, &wm ) == STATUS_SUCCESS && | - if (load_dll( load_path, mod_name, 0, &wm ) == STATUS_SUCCESS && | ||||
| + if (load_dll( load_path, mod_name, NULL, 0, &wm ) == STATUS_SUCCESS && | + if (load_dll( load_path, mod_name, NULL, 0, &wm ) == STATUS_SUCCESS && | ||||
| !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | ||||
| { | { | ||||
| if (process_attach( wm, NULL ) != STATUS_SUCCESS) | if (process_attach( wm, NULL ) != STATUS_SUCCESS) | ||||
| @@ -631,7 +633,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | @@ -625,7 +627,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | ||||
| { | { | ||||
| ascii_to_unicode( buffer, name, len ); | ascii_to_unicode( buffer, name, len ); | ||||
| buffer[len] = 0; | buffer[len] = 0; | ||||
| - status = load_dll( load_path, buffer, 0, &wmImp ); | - status = load_dll( load_path, buffer, 0, &wmImp ); | ||||
| + status = load_dll( load_path, buffer, NULL, 0, &wmImp ); | + status = load_dll( load_path, buffer, NULL, 0, &wmImp ); | ||||
| } | } | ||||
| else /* need to allocate a larger buffer */ | else /* need to allocate a larger buffer */ | ||||
| { | { | ||||
| @@ -639,7 +641,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | @@ -633,7 +635,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | ||||
| if (!ptr) return FALSE; | if (!ptr) return FALSE; | ||||
| ascii_to_unicode( ptr, name, len ); | ascii_to_unicode( ptr, name, len ); | ||||
| ptr[len] = 0; | ptr[len] = 0; | ||||
| - status = load_dll( load_path, ptr, 0, &wmImp ); | - status = load_dll( load_path, ptr, 0, &wmImp ); | ||||
| + status = load_dll( load_path, ptr, NULL, 0, &wmImp ); | + status = load_dll( load_path, ptr, NULL, 0, &wmImp ); | ||||
| RtlFreeHeap( GetProcessHeap(), 0, ptr ); | RtlFreeHeap( GetProcessHeap(), 0, ptr ); | ||||
| } | } | ||||
| @@ -963,7 +965,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path ) | @@ -957,7 +959,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path ) | ||||
| * Allocate a WINE_MODREF structure and add it to the process list | * Allocate a WINE_MODREF structure and add it to the process list | ||||
| * The loader_section must be locked while calling this function. | * The loader_section must be locked while calling this function. | ||||
| */ | */ | ||||
| -static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | -static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | ||||
| +static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename, LPCWSTR fakemodule ) | +static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename, LPCWSTR fakemodule ) | ||||
| { | { | ||||
| WINE_MODREF *wm; | WINE_MODREF *wm; | ||||
| const WCHAR *p; | const WCHAR *p; | ||||
| @@ -985,7 +987,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | @@ -979,7 +981,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | ||||
| wm->ldr.TimeDateStamp = 0; | wm->ldr.TimeDateStamp = 0; | ||||
| wm->ldr.ActivationContext = 0; | wm->ldr.ActivationContext = 0; | ||||
| - RtlCreateUnicodeString( &wm->ldr.FullDllName, filename ); | - RtlCreateUnicodeString( &wm->ldr.FullDllName, filename ); | ||||
| + RtlCreateUnicodeString( &wm->ldr.FullDllName, fakemodule ? fakemodule : filename ); | + RtlCreateUnicodeString( &wm->ldr.FullDllName, fakemodule ? fakemodule : filename ); | ||||
| if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; | if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; | ||||
| else p = wm->ldr.FullDllName.Buffer; | else p = wm->ldr.FullDllName.Buffer; | ||||
| RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); | RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); | ||||
| @@ -1646,7 +1648,7 @@ static void load_builtin_callback( void *module, const char *filename ) | @@ -1640,7 +1642,7 @@ static void load_builtin_callback( void *module, const char *filename ) | ||||
| return; | return; | ||||
| } | } | ||||
| - wm = alloc_module( module, fullname ); | - wm = alloc_module( module, fullname ); | ||||
| + wm = alloc_module( module, fullname, builtin_load_info->fakemodule ); | + wm = alloc_module( module, fullname, builtin_load_info->fakemodule ); | ||||
| RtlFreeHeap( GetProcessHeap(), 0, fullname ); | RtlFreeHeap( GetProcessHeap(), 0, fullname ); | ||||
| if (!wm) | if (!wm) | ||||
| { | { | ||||
| @@ -1828,8 +1830,8 @@ static NTSTATUS perform_relocations( void *module, SIZE_T len ) | @@ -1820,8 +1822,8 @@ static NTSTATUS perform_relocations( void *module, SIZE_T len ) | ||||
| /****************************************************************************** | /****************************************************************************** | ||||
| * load_native_dll (internal) | * load_native_dll (internal) | ||||
| */ | */ | ||||
| -static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | -static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| - DWORD flags, WINE_MODREF** pwm ) | - DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemodule, | +static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemodule, | ||||
| + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| void *module; | void *module; | ||||
| HANDLE mapping; | HANDLE mapping; | ||||
| @@ -1863,7 +1865,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | @@ -1856,7 +1858,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| /* create the MODREF */ | /* create the MODREF */ | ||||
| - if (!(wm = alloc_module( module, name ))) | - if (!(wm = alloc_module( module, name ))) | ||||
| + if (!(wm = alloc_module( module, name, fakemodule ))) | + if (!(wm = alloc_module( module, name, fakemodule ))) | ||||
| { | { | ||||
| status = STATUS_NO_MEMORY; | status = STATUS_NO_MEMORY; | ||||
| goto done; | goto done; | ||||
| @@ -1927,8 +1929,8 @@ done: | @@ -1918,8 +1920,8 @@ done: | ||||
| /*********************************************************************** | /*********************************************************************** | ||||
| * load_builtin_dll | * load_builtin_dll | ||||
| */ | */ | ||||
| -static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | -static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | ||||
| - DWORD flags, WINE_MODREF** pwm ) | - DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, LPCWSTR fakemodule, | +static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, LPCWSTR fakemodule, | ||||
| + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| char error[256], dllname[MAX_PATH]; | char error[256], dllname[MAX_PATH]; | ||||
| const WCHAR *name, *p; | const WCHAR *name, *p; | ||||
| @@ -1948,6 +1950,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | @@ -1939,6 +1941,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | ||||
| */ | */ | ||||
| info.load_path = load_path; | info.load_path = load_path; | ||||
| info.filename = NULL; | info.filename = NULL; | ||||
| + info.fakemodule = fakemodule; | + info.fakemodule = fakemodule; | ||||
| info.status = STATUS_SUCCESS; | info.status = STATUS_SUCCESS; | ||||
| info.wm = NULL; | info.wm = NULL; | ||||
| @@ -2266,14 +2269,14 @@ overflow: | @@ -2257,14 +2260,14 @@ overflow: | ||||
| return STATUS_BUFFER_TOO_SMALL; | return STATUS_BUFFER_TOO_SMALL; | ||||
| } | } | ||||
| - | - | ||||
| /*********************************************************************** | /*********************************************************************** | ||||
| * load_dll (internal) | * load_dll (internal) | ||||
| * | * | ||||
| * Load a PE style module according to the load order. | * Load a PE style module according to the load order. | ||||
| * The loader_section must be locked while calling this function. | * The loader_section must be locked while calling this function. | ||||
| */ | */ | ||||
| -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ) | -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | ||||
| + DWORD flags, WINE_MODREF** pwm ) | + DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| enum loadorder loadorder; | enum loadorder loadorder; | ||||
| WCHAR buffer[64]; | WCHAR buffer[64]; | ||||
| @@ -2310,6 +2313,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2301,6 +2304,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| } | } | ||||
| main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); | main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); | ||||
| + | + | ||||
| + /* handle dll redirection */ | + /* handle dll redirection */ | ||||
| + if (!fakemodule) | + if (!fakemodule) | ||||
| + { | + { | ||||
| + BYTE buffer2[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; | + BYTE buffer2[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; | ||||
| Show All 9 Lines | |||||
| + if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | + if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | ||||
| + return nts; | + return nts; | ||||
| + } | + } | ||||
| + } | + } | ||||
| + | + | ||||
| loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); | loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); | ||||
| if (handle && is_fake_dll( handle )) | if (handle && is_fake_dll( handle )) | ||||
| @@ -2332,22 +2354,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2323,22 +2345,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| if (!handle) nts = STATUS_DLL_NOT_FOUND; | if (!handle) nts = STATUS_DLL_NOT_FOUND; | ||||
| else | else | ||||
| { | { | ||||
| - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | ||||
| + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| if (nts == STATUS_INVALID_IMAGE_NOT_MZ) | if (nts == STATUS_INVALID_IMAGE_NOT_MZ) | ||||
| /* not in PE format, maybe it's a builtin */ | /* not in PE format, maybe it's a builtin */ | ||||
| - nts = load_builtin_dll( load_path, filename, handle, flags, pwm ); | - nts = load_builtin_dll( load_path, filename, handle, flags, pwm ); | ||||
| Show All 11 Lines | + nts = load_builtin_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| if (!handle) break; /* nothing else we can try */ | if (!handle) break; /* nothing else we can try */ | ||||
| /* file is not a builtin library, try without using the specified file */ | /* file is not a builtin library, try without using the specified file */ | ||||
| if (nts != STATUS_SUCCESS) | if (nts != STATUS_SUCCESS) | ||||
| - nts = load_builtin_dll( load_path, filename, 0, flags, pwm ); | - nts = load_builtin_dll( load_path, filename, 0, flags, pwm ); | ||||
| + nts = load_builtin_dll( load_path, filename, fakemodule, 0, flags, pwm ); | + nts = load_builtin_dll( load_path, filename, fakemodule, 0, flags, pwm ); | ||||
| if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && | if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && | ||||
| (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) | (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) | ||||
| { | { | ||||
| @@ -2357,7 +2379,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2348,7 +2370,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| nts = STATUS_DLL_NOT_FOUND; | nts = STATUS_DLL_NOT_FOUND; | ||||
| } | } | ||||
| if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) | if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) | ||||
| - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | ||||
| + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -2390,7 +2412,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, | @@ -2381,7 +2403,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, | ||||
| RtlEnterCriticalSection( &loader_section ); | RtlEnterCriticalSection( &loader_section ); | ||||
| if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; | if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; | ||||
| - nts = load_dll( path_name, libname->Buffer, flags, &wm ); | - nts = load_dll( path_name, libname->Buffer, flags, &wm ); | ||||
| + nts = load_dll( path_name, libname->Buffer, NULL, flags, &wm ); | + nts = load_dll( path_name, libname->Buffer, NULL, flags, &wm ); | ||||
| if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | ||||
| { | { | ||||
| @@ -3361,7 +3383,7 @@ void __wine_process_init(void) | @@ -3349,7 +3371,7 @@ void __wine_process_init(void) | ||||
| /* setup the load callback and create ntdll modref */ | /* setup the load callback and create ntdll modref */ | ||||
| wine_dll_set_callback( load_builtin_callback ); | wine_dll_set_callback( load_builtin_callback ); | ||||
| - if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS) | - if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS) | ||||
| + if ((status = load_builtin_dll( NULL, kernel32W, NULL, 0, 0, &wm )) != STATUS_SUCCESS) | + if ((status = load_builtin_dll( NULL, kernel32W, NULL, 0, 0, &wm )) != STATUS_SUCCESS) | ||||
| { | { | ||||
| MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); | MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); | ||||
| exit(1); | exit(1); | ||||
| diff --git a/dlls/ntdll/loadorder.c b/dlls/ntdll/loadorder.c | diff --git a/dlls/ntdll/loadorder.c b/dlls/ntdll/loadorder.c | ||||
| index 401d256f1c..ec13e7542c 100644 | index 157d2cb2d7..9b2eab2cb9 100644 | ||||
| --- a/dlls/ntdll/loadorder.c | --- a/dlls/ntdll/loadorder.c | ||||
| +++ b/dlls/ntdll/loadorder.c | +++ b/dlls/ntdll/loadorder.c | ||||
| @@ -290,102 +290,165 @@ static inline enum loadorder get_env_load_order( const WCHAR *module ) | @@ -290,102 +290,165 @@ static inline enum loadorder get_env_load_order( const WCHAR *module ) | ||||
| /*************************************************************************** | /*************************************************************************** | ||||
| - * get_standard_key | - * get_standard_key | ||||
| + * open_user_reg_key | + * open_user_reg_key | ||||
| ▲ Show 20 Lines • Show All 374 Lines • ▼ Show 20 Lines | |||||
| + ret = NULL; | + ret = NULL; | ||||
| + TRACE( "no redirection found for %s\n", debugstr_w(path) ); | + TRACE( "no redirection found for %s\n", debugstr_w(path) ); | ||||
| + | + | ||||
| + done: | + done: | ||||
| + RtlFreeHeap( GetProcessHeap(), 0, module ); | + RtlFreeHeap( GetProcessHeap(), 0, module ); | ||||
| + return ret; | + return ret; | ||||
| +} | +} | ||||
| diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h | diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h | ||||
| index c97b1e1f73..5219e50ea9 100644 | index 907bbdd2d9..3c90389fa6 100644 | ||||
| --- a/dlls/ntdll/ntdll_misc.h | --- a/dlls/ntdll/ntdll_misc.h | ||||
| +++ b/dlls/ntdll/ntdll_misc.h | +++ b/dlls/ntdll/ntdll_misc.h | ||||
| @@ -203,6 +203,7 @@ enum loadorder | @@ -208,6 +208,7 @@ enum loadorder | ||||
| }; | }; | ||||
| extern enum loadorder get_load_order( const WCHAR *app_name, const WCHAR *path ) DECLSPEC_HIDDEN; | extern enum loadorder get_load_order( const WCHAR *app_name, const WCHAR *path ) DECLSPEC_HIDDEN; | ||||
| +extern WCHAR* get_redirect( const WCHAR *app_name, const WCHAR *path, BYTE *buffer, ULONG size ) DECLSPEC_HIDDEN; | +extern WCHAR* get_redirect( const WCHAR *app_name, const WCHAR *path, BYTE *buffer, ULONG size ) DECLSPEC_HIDDEN; | ||||
| struct debug_info | struct debug_info | ||||
| { | { | ||||
| diff --git a/programs/winecfg/Makefile.in b/programs/winecfg/Makefile.in | diff --git a/programs/winecfg/Makefile.in b/programs/winecfg/Makefile.in | ||||
| ▲ Show 20 Lines • Show All 200 Lines • ▼ Show 20 Lines | |||||
| + LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.\nGallium Nine requires MESA graphic drivers and AMD/Nvidia GPU.\n",IDC_STATIC,16,16,230,24 | + LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.\nGallium Nine requires MESA graphic drivers and AMD/Nvidia GPU.\n",IDC_STATIC,16,16,230,24 | ||||
| + CONTROL "Enable &Gallium Nine for better D3D9 graphic performance.",IDC_ENABLE_NATIVE_D3D9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 | + CONTROL "Enable &Gallium Nine for better D3D9 graphic performance.",IDC_ENABLE_NATIVE_D3D9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 | ||||
| +END | +END | ||||
| + | + | ||||
| LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||
| /* @makedep: winecfg.ico */ | /* @makedep: winecfg.ico */ | ||||
| -- | -- | ||||
| 2.14.1 | 2.15.0 | ||||
Copyright © 2015-2021 Solus Project. The Solus logo is Copyright © 2016-2021 Solus Project. All Rights Reserved.