diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 2ec03d18298..7c2b11160dc 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -685,7 +685,7 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW HRESULT CFSFolder::_ParseSimple( _In_ LPOLESTR lpszDisplayName, - _Out_ WIN32_FIND_DATAW *pFind, + _Inout_ WIN32_FIND_DATAW *pFind, _Out_ LPITEMIDLIST *ppidl) { HRESULT hr; @@ -693,6 +693,8 @@ HRESULT CFSFolder::_ParseSimple( *ppidl = NULL; + const DWORD finalattr = pFind->dwFileAttributes; + const DWORD finalsizelo = pFind->nFileSizeLow; LPITEMIDLIST pidl; for (hr = S_OK; SUCCEEDED(hr); hr = SHILAppend(pidl, ppidl)) { @@ -700,9 +702,8 @@ HRESULT CFSFolder::_ParseSimple( if (hr != S_OK) break; - if (pchNext) - pFind->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; - + pFind->dwFileAttributes = pchNext ? FILE_ATTRIBUTE_DIRECTORY : finalattr; + pFind->nFileSizeLow = pchNext ? 0 : finalsizelo; pidl = _ILCreateFromFindDataW(pFind); if (!pidl) { diff --git a/dll/win32/shell32/folders/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index d74c7d915a2..e3db017578d 100644 --- a/dll/win32/shell32/folders/CFSFolder.h +++ b/dll/win32/shell32/folders/CFSFolder.h @@ -36,7 +36,7 @@ class CFSFolder : HRESULT _ParseSimple( _In_ LPOLESTR lpszDisplayName, - _Out_ WIN32_FIND_DATAW *pFind, + _Inout_ WIN32_FIND_DATAW *pFind, _Out_ LPITEMIDLIST *ppidl); BOOL _GetFindDataFromName(_In_ LPCWSTR pszName, _Out_ WIN32_FIND_DATAW *pFind); HRESULT _CreateIDListFromName(LPCWSTR pszName, DWORD attrs, IBindCtx *pbc, LPITEMIDLIST *ppidl);