[SHELL32] Fix desktop.ini folder icon again (retrial of #595) (#632)

#595 failed at non-Desktop folder. We should use ILGetDisplayNameExW instead of SHGetPathFromLDList to get path from psf and pidl.
CORE-9196
This commit is contained in:
Katayama Hirofumi MZ 2018-06-25 02:59:03 +09:00 committed by Hermès BÉLUSCA - MAÏTO
parent d5440316fa
commit 1829f5fed7

View file

@ -161,7 +161,7 @@ getShellClassInfo(LPCWSTR Entry, LPWSTR pszValue, DWORD cchValueLen, LPCWSTR Ini
}
static HRESULT
getIconLocationForFolder(IShellFolder * psf, LPCITEMIDLIST pidl, UINT uFlags,
getIconLocationForFolder(IShellFolder * psf, PCITEMID_CHILD pidl, UINT uFlags,
LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
{
DWORD dwFileAttrs;
@ -178,14 +178,15 @@ getIconLocationForFolder(IShellFolder * psf, LPCITEMIDLIST pidl, UINT uFlags,
goto Quit;
// get path
SHGetPathFromIDListW(pidl, wszPath);
if (!ILGetDisplayNameExW(psf, pidl, wszPath, 0))
goto Quit;
if (!PathIsDirectoryW(wszPath))
goto Quit;
goto Quit;
// read-only or system folder?
dwFileAttrs = GetFileAttributes(wszPath);
dwFileAttrs = _ILGetFileAttributes(ILFindLastID(pidl), NULL, 0);
if ((dwFileAttrs & (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_READONLY)) == 0)
goto Quit;
goto Quit;
// build the full path of ini file
StringCchCopyW(wszIniFullPath, _countof(wszIniFullPath), wszPath);