[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:
Giannis Adamopoulos 2018-02-20 10:58:14 +02:00
parent 730d81b9f7
commit ac950ea01d

View file

@ -49,30 +49,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
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 ##########
*/
@ -1513,17 +1489,24 @@ static HRESULT _SHGetDefaultValue(HANDLE hToken, BYTE folder, LPWSTR pszPath)
if (!pszPath)
return E_INVALIDARG;
if (!is_win64)
{
BOOL is_wow64;
switch (folder)
{
case CSIDL_PROGRAM_FILES:
if (IsWow64())
folder = CSIDL_PROGRAM_FILESX86;
case CSIDL_PROGRAM_FILESX86:
IsWow64Process( GetCurrentProcess(), &is_wow64 );
folder = is_wow64 ? CSIDL_PROGRAM_FILESX86 : CSIDL_PROGRAM_FILES;
break;
case CSIDL_PROGRAM_FILES_COMMON:
if (IsWow64())
folder = CSIDL_PROGRAM_FILESX86;
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)
{