mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[SHELL32] shellpath: sync a part of _SHGetDefaultValue with wine
on 32bit builds CSIDL_PROGRAM_FILESX86 is treated as CSIDL_PROGRAM_FILES and on wow64 builds CSIDL_PROGRAM_FILES gets treated as CSIDL_PROGRAM_FILESX86
This commit is contained in:
parent
730d81b9f7
commit
ac950ea01d
1 changed files with 16 additions and 33 deletions
|
@ -49,30 +49,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||||
|
|
||||||
static const BOOL is_win64 = sizeof(void *) > sizeof(int);
|
static const BOOL is_win64 = sizeof(void *) > sizeof(int);
|
||||||
|
|
||||||
typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
|
|
||||||
|
|
||||||
static LPFN_ISWOW64PROCESS fnIsWow64Process = NULL;
|
|
||||||
|
|
||||||
BOOL IsWow64()
|
|
||||||
{
|
|
||||||
BOOL bIsWow64 = FALSE;
|
|
||||||
|
|
||||||
if (!fnIsWow64Process)
|
|
||||||
{
|
|
||||||
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
|
|
||||||
GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!fnIsWow64Process)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return bIsWow64;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
########## Combining and Constructing paths ##########
|
########## Combining and Constructing paths ##########
|
||||||
*/
|
*/
|
||||||
|
@ -1513,16 +1489,23 @@ static HRESULT _SHGetDefaultValue(HANDLE hToken, BYTE folder, LPWSTR pszPath)
|
||||||
if (!pszPath)
|
if (!pszPath)
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
switch (folder)
|
if (!is_win64)
|
||||||
{
|
{
|
||||||
case CSIDL_PROGRAM_FILES:
|
BOOL is_wow64;
|
||||||
if (IsWow64())
|
|
||||||
folder = CSIDL_PROGRAM_FILESX86;
|
switch (folder)
|
||||||
break;
|
{
|
||||||
case CSIDL_PROGRAM_FILES_COMMON:
|
case CSIDL_PROGRAM_FILES:
|
||||||
if (IsWow64())
|
case CSIDL_PROGRAM_FILESX86:
|
||||||
folder = CSIDL_PROGRAM_FILESX86;
|
IsWow64Process( GetCurrentProcess(), &is_wow64 );
|
||||||
break;
|
folder = is_wow64 ? CSIDL_PROGRAM_FILESX86 : CSIDL_PROGRAM_FILES;
|
||||||
|
break;
|
||||||
|
case CSIDL_PROGRAM_FILES_COMMON:
|
||||||
|
case CSIDL_PROGRAM_FILES_COMMONX86:
|
||||||
|
IsWow64Process( GetCurrentProcess(), &is_wow64 );
|
||||||
|
folder = is_wow64 ? CSIDL_PROGRAM_FILES_COMMONX86 : CSIDL_PROGRAM_FILES_COMMON;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (CSIDL_Data[folder].type)
|
switch (CSIDL_Data[folder].type)
|
||||||
|
|
Loading…
Reference in a new issue