Author: gadamopoulos Date: Fri Apr 3 11:44:30 2015 New Revision: 67017
URL: http://svn.reactos.org/svn/reactos?rev=67017&view=rev Log: [SHELL32] - CFSFolder: Explicitly check for the supported pidl types. A CFSFolder can be created by a drive pidl. Handle this case and return the appropriate attributes in GetAttributesOf. CORE-9458
Modified: trunk/reactos/dll/win32/shell32/folders/CFSFolder.cpp
Modified: trunk/reactos/dll/win32/shell32/folders/CFSFolder.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/folders/C... ============================================================================== --- trunk/reactos/dll/win32/shell32/folders/CFSFolder.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/folders/CFSFolder.cpp [iso-8859-1] Fri Apr 3 11:44:30 2015 @@ -369,6 +369,9 @@ PCUITEMID_CHILD_ARRAY apidl, DWORD * rgfInOut) { HRESULT hr = S_OK; + static const DWORD dwDriveAttributes = + SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR | + SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANRENAME | SFGAO_CANLINK;
TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); @@ -389,7 +392,13 @@ hr = SHBindToParent(pidlRoot, IID_PPV_ARG(IShellFolder, &psfParent), &rpidl); if(SUCCEEDED(hr)) { - SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut); + if (_ILIsDrive(rpidl)) + *rgfInOut &= dwDriveAttributes; + if (_ILIsFolder(rpidl) || _ILIsValue(rpidl)) + SHELL32_GetItemAttributes(this, rpidl, rgfInOut); + else + ERR("Got an unknown type of pidl!!!\n"); + psfParent->Release(); } } @@ -398,7 +407,10 @@ while (cidl > 0 && *apidl) { pdump(*apidl); - SHELL32_GetItemAttributes(this, *apidl, rgfInOut); + if(_ILIsFolder(*apidl) || _ILIsValue(*apidl)) + SHELL32_GetItemAttributes(this, *apidl, rgfInOut); + else + ERR("Got an unknown type of pidl!!!\n"); apidl++; cidl--; }