diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index 8c6e8a89b2c..d9d65cbaed6 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -2697,9 +2697,15 @@ static const CSIDL_DATA CSIDL_Data[] = }, { /* 0x54 */ &FOLDERID_ProgramFilesX64, +#ifdef _WIN64 + CSIDL_Type_CurrVer, + ProgramFilesDirW, + Program_FilesW, +#else CSIDL_Type_NonExistent, NULL, NULL, +#endif KF_CATEGORY_FIXED, /* category */ ProgramFilesX64W, /* name */ @@ -2717,9 +2723,15 @@ static const CSIDL_DATA CSIDL_Data[] = }, { /* 0x55 */ &FOLDERID_ProgramFilesCommonX64, +#ifdef _WIN64 + CSIDL_Type_CurrVer, + ProgramFilesCommonX64W, + Program_Files_Common_FilesW, +#else CSIDL_Type_NonExistent, NULL, NULL, +#endif KF_CATEGORY_FIXED, /* category */ ProgramFilesCommonX64W, /* name */ diff --git a/dlls/shell32/tests/shellpath.c b/dlls/shell32/tests/shellpath.c index f768f44c8b7..262714a9f3c 100644 --- a/dlls/shell32/tests/shellpath.c +++ b/dlls/shell32/tests/shellpath.c @@ -1932,6 +1932,28 @@ if (0) { /* crashes */ hr = pSHGetFolderPathEx(&FOLDERID_Desktop, 0, NULL, buffer, len + 1); ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr); + + path = NULL; + hr = pSHGetKnownFolderPath(&FOLDERID_ProgramFilesX64, 0, NULL, &path); +#ifdef _WIN64 + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(path != NULL, "path not set\n"); + CoTaskMemFree(path); +#else + todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "got 0x%08x\n", hr); + ok(path == NULL, "path set\n"); +#endif + + path = NULL; + hr = pSHGetKnownFolderPath(&FOLDERID_ProgramFilesCommonX64, 0, NULL, &path); +#ifdef _WIN64 + ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr); + ok(path != NULL, "path not set\n"); + CoTaskMemFree(path); +#else + todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "got 0x%08x\n", hr); + ok(path == NULL, "path set\n"); +#endif } static BOOL is_in_strarray(const WCHAR *needle, const char *hay)