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);
|
||||
|
||||
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,16 +1489,23 @@ static HRESULT _SHGetDefaultValue(HANDLE hToken, BYTE folder, LPWSTR pszPath)
|
|||
if (!pszPath)
|
||||
return E_INVALIDARG;
|
||||
|
||||
switch (folder)
|
||||
if (!is_win64)
|
||||
{
|
||||
case CSIDL_PROGRAM_FILES:
|
||||
if (IsWow64())
|
||||
folder = CSIDL_PROGRAM_FILESX86;
|
||||
break;
|
||||
case CSIDL_PROGRAM_FILES_COMMON:
|
||||
if (IsWow64())
|
||||
folder = CSIDL_PROGRAM_FILESX86;
|
||||
break;
|
||||
BOOL is_wow64;
|
||||
|
||||
switch (folder)
|
||||
{
|
||||
case CSIDL_PROGRAM_FILES:
|
||||
case CSIDL_PROGRAM_FILESX86:
|
||||
IsWow64Process( GetCurrentProcess(), &is_wow64 );
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue