ReactOS  0.4.15-dev-3165-gdf6fff7
CFSFolder.cpp File Reference
#include <precomp.h>
Include dependency graph for CFSFolder.cpp:

Go to the source code of this file.

Classes

class  CFileSysEnum
 

Macros

#define SUPER_HIDDEN   (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)
 
#define GENERICSHELLVIEWCOLUMNS   6
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
static HRESULT SHELL32_GetCLSIDForDirectory (LPCWSTR pwszDir, LPCWSTR KeyName, CLSID *pclsidFolder)
 
HKEY OpenKeyFromFileType (LPWSTR pExtension, LPCWSTR KeyName)
 
LPWSTR ExtensionFromPidl (PCUIDLIST_RELATIVE pidl)
 
HRESULT GetCLSIDForFileTypeFromExtension (LPWSTR pExtension, LPCWSTR KeyName, CLSID *pclsid)
 
HRESULT GetCLSIDForFileType (PCUIDLIST_RELATIVE pidl, LPCWSTR KeyName, CLSID *pclsid)
 
static HRESULT getDefaultIconLocation (LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT uFlags)
 
static BOOL getShellClassInfo (LPCWSTR Entry, LPWSTR pszValue, DWORD cchValueLen, LPCWSTR IniFile)
 
static HRESULT getIconLocationForFolder (IShellFolder *psf, PCITEMID_CHILD pidl, UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
 
HRESULT CFSExtractIcon_CreateInstance (IShellFolder *psf, LPCITEMIDLIST pidl, REFIID iid, LPVOID *ppvOut)
 
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx (IBindCtx *pbc, LPCWSTR path)
 
HRESULT SHELL32_GetFSItemAttributes (IShellFolder *psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
 
BOOL SHELL_FS_HideExtension (LPWSTR szPath)
 
void SHELL_FS_ProcessDisplayFilename (LPWSTR szPath, DWORD dwFlags)
 
static HBITMAP DoLoadPicture (LPCWSTR pszFileName)
 

Variables

static const WCHAR s_shellClassInfo [] = { '.', 'S', 'h', 'e', 'l', 'l', 'C', 'l', 'a', 's', 's', 'I', 'n', 'f', 'o', 0 }
 
static const shvheader GenericSFHeader []
 
static const WCHAR AdvancedW [] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
 
static const WCHAR HideFileExtW [] = L"HideFileExt"
 
static const WCHAR NeverShowExtW [] = L"NeverShowExt"
 

Macro Definition Documentation

◆ GENERICSHELLVIEWCOLUMNS

#define GENERICSHELLVIEWCOLUMNS   6

Definition at line 544 of file CFSFolder.cpp.

◆ SUPER_HIDDEN

Function Documentation

◆ CFSExtractIcon_CreateInstance()

HRESULT CFSExtractIcon_CreateInstance ( IShellFolder psf,
LPCITEMIDLIST  pidl,
REFIID  iid,
LPVOID ppvOut 
)

Definition at line 250 of file CFSFolder.cpp.

251 {
252  CComPtr<IDefaultExtractIconInit> initIcon;
253  HRESULT hr;
254  int icon_idx = 0;
255  UINT flags = 0; // FIXME: Use it!
256  WCHAR wTemp[MAX_PATH] = L"";
257 
259  if (FAILED(hr))
260  return hr;
261 
262  if (_ILIsFolder (pidl))
263  {
265  pidl, 0, wTemp, _countof(wTemp),
266  &icon_idx,
267  &flags)))
268  {
269  initIcon->SetNormalIcon(wTemp, icon_idx);
270  // FIXME: if/when getIconLocationForFolder does something for
271  // GIL_FORSHORTCUT, code below should be uncommented. and
272  // the following line removed.
273  initIcon->SetShortcutIcon(wTemp, icon_idx);
274  }
276  pidl, GIL_DEFAULTICON, wTemp, _countof(wTemp),
277  &icon_idx,
278  &flags)))
279  {
280  initIcon->SetDefaultIcon(wTemp, icon_idx);
281  }
282  // if (SUCCEEDED(getIconLocationForFolder(psf,
283  // pidl, GIL_FORSHORTCUT, wTemp, _countof(wTemp),
284  // &icon_idx,
285  // &flags)))
286  // {
287  // initIcon->SetShortcutIcon(wTemp, icon_idx);
288  // }
290  pidl, GIL_OPENICON, wTemp, _countof(wTemp),
291  &icon_idx,
292  &flags)))
293  {
294  initIcon->SetOpenIcon(wTemp, icon_idx);
295  }
296  }
297  else
298  {
299  LPWSTR pExtension = ExtensionFromPidl(pidl);
300  HKEY hkey = pExtension ? OpenKeyFromFileType(pExtension, L"DefaultIcon") : NULL;
301  if (!hkey)
302  WARN("Could not open DefaultIcon key!\n");
303 
304  DWORD dwSize = sizeof(wTemp);
305  if (hkey && !SHQueryValueExW(hkey, NULL, NULL, NULL, wTemp, &dwSize))
306  {
307  WCHAR sNum[5];
308  if (ParseFieldW (wTemp, 2, sNum, 5))
309  icon_idx = _wtoi(sNum);
310  else
311  icon_idx = 0; /* sometimes the icon number is missing */
312  ParseFieldW (wTemp, 1, wTemp, MAX_PATH);
313  PathUnquoteSpacesW(wTemp);
314 
315  if (!wcscmp(L"%1", wTemp)) /* icon is in the file */
316  {
317  ILGetDisplayNameExW(psf, pidl, wTemp, ILGDN_FORPARSING);
318  icon_idx = 0;
319 
320  INT ret = ExtractIconExW(wTemp, -1, NULL, NULL, 0);
321  if (ret <= 0)
322  {
323  StringCbCopyW(wTemp, sizeof(wTemp), swShell32Name);
324  icon_idx = -IDI_SHELL_EXE;
325  }
326  }
327 
328  initIcon->SetNormalIcon(wTemp, icon_idx);
329  }
330  else
331  {
332  initIcon->SetNormalIcon(swShell32Name, 0);
333  }
334 
335  if (hkey)
336  RegCloseKey(hkey);
337  }
338 
339  return initIcon->QueryInterface(iid, ppvOut);
340 }
HRESULT hr
Definition: shlfolder.c:183
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define WARN(fmt,...)
Definition: debug.h:112
LPWSTR ExtensionFromPidl(PCUIDLIST_RELATIVE pidl)
Definition: CFSFolder.cpp:48
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
#define IID_PPV_ARG(Itype, ppType)
int32_t INT
Definition: typedefs.h:58
static HRESULT getIconLocationForFolder(IShellFolder *psf, PCITEMID_CHILD pidl, UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
Definition: CFSFolder.cpp:168
#define ILGDN_FORPARSING
Definition: undocshell.h:68
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:872
if SUCCEEDED(hr)
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1965
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:91
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
HKEY OpenKeyFromFileType(LPWSTR pExtension, LPCWSTR KeyName)
Definition: CFSFolder.cpp:18
GLbitfield flags
Definition: glext.h:7161
DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len) DECLSPEC_HIDDEN
Definition: shellord.c:116
int ret
DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue, LPDWORD lpReserved, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1461
static const WCHAR L[]
Definition: oid.c:1250
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
#define IDI_SHELL_EXE
Definition: shresdef.h:524
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1034
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
WCHAR * LPWSTR
Definition: xmlstorage.h:184
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by CFSFolder::GetUIObjectOf().

◆ DoLoadPicture()

static HBITMAP DoLoadPicture ( LPCWSTR  pszFileName)
static

Definition at line 1823 of file CFSFolder.cpp.

1824 {
1825  // create stream from file
1826  HRESULT hr;
1827  CComPtr<IStream> pStream;
1829  FALSE, NULL, &pStream);
1830  if (FAILED(hr))
1831  return NULL;
1832 
1833  // load the picture
1834  HBITMAP hbm = NULL;
1835  CComPtr<IPicture> pPicture;
1836  OleLoadPicture(pStream, 0, FALSE, IID_IPicture, (LPVOID *)&pPicture);
1837 
1838  // get the bitmap handle
1839  if (pPicture)
1840  {
1841  pPicture->get_Handle((OLE_HANDLE *)&hbm);
1842 
1843  // copy the bitmap handle
1845  }
1846 
1847  return hbm;
1848 }
HRESULT hr
Definition: shlfolder.c:183
#define FALSE
Definition: types.h:117
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:1956
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:41
HRESULT WINAPI OleLoadPicture(LPSTREAM lpstream, LONG lSize, BOOL fRunmode, REFIID riid, LPVOID *ppvObj)
Definition: olepicture.c:2344
#define STGM_READ
Definition: objbase.h:916
int OLE_HANDLE
Definition: olepro.idl:76
LONG HRESULT
Definition: typedefs.h:79
HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR lpszPath, DWORD dwMode, DWORD dwAttributes, BOOL bCreate, IStream *lpTemplate, IStream **lppStream)
Definition: istream.c:401
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
const GUID IID_IPicture
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
#define LR_CREATEDIBSECTION
Definition: winuser.h:1088
#define NULL
Definition: types.h:112
#define IMAGE_BITMAP
Definition: winuser.h:211
static HBITMAP
Definition: button.c:44

Referenced by CFSFolder::GetCustomViewInfo().

◆ ExtensionFromPidl()

LPWSTR ExtensionFromPidl ( PCUIDLIST_RELATIVE  pidl)

Definition at line 48 of file CFSFolder.cpp.

49 {
50  if (!_ILIsValue(pidl))
51  {
52  ERR("Invalid pidl!\n");
53  return NULL;
54  }
55 
56  FileStructW* pDataW = _ILGetFileStructW(pidl);
57  if (!pDataW)
58  {
59  ERR("Invalid pidl!\n");
60  return NULL;
61  }
62 
63  LPWSTR pExtension = PathFindExtensionW(pDataW->wszName);
64  if (!pExtension || *pExtension == UNICODE_NULL)
65  {
66  WARN("No extension for %S!\n", pDataW->wszName);
67  return NULL;
68  }
69  return pExtension;
70 }
WCHAR wszName[1]
Definition: shlfolder.c:1555
#define WARN(fmt,...)
Definition: debug.h:112
#define UNICODE_NULL
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:1974
#define ERR(fmt,...)
Definition: debug.h:110
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2350
#define NULL
Definition: types.h:112
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CFSExtractIcon_CreateInstance(), and GetCLSIDForFileType().

◆ GetCLSIDForFileType()

HRESULT GetCLSIDForFileType ( PCUIDLIST_RELATIVE  pidl,
LPCWSTR  KeyName,
CLSID pclsid 
)

Definition at line 127 of file CFSFolder.cpp.

128 {
129  LPWSTR pExtension = ExtensionFromPidl(pidl);
130  if (!pExtension)
131  return S_FALSE;
132 
133  return GetCLSIDForFileTypeFromExtension(pExtension, KeyName, pclsid);
134 }
LPWSTR ExtensionFromPidl(PCUIDLIST_RELATIVE pidl)
Definition: CFSFolder.cpp:48
#define S_FALSE
Definition: winerror.h:2357
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2697
HRESULT GetCLSIDForFileTypeFromExtension(LPWSTR pExtension, LPCWSTR KeyName, CLSID *pclsid)
Definition: CFSFolder.cpp:72
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CFSFolder::_CreateExtensionUIObject(), CFSFolder::_GetDropTarget(), CFSFolder::_GetIconHandler(), and CFSFolder::BindToObject().

◆ GetCLSIDForFileTypeFromExtension()

HRESULT GetCLSIDForFileTypeFromExtension ( LPWSTR  pExtension,
LPCWSTR  KeyName,
CLSID pclsid 
)

Definition at line 72 of file CFSFolder.cpp.

73 {
74  HKEY hkeyProgId = OpenKeyFromFileType(pExtension, KeyName);
75  if (!hkeyProgId)
76  {
77  WARN("OpenKeyFromFileType failed for key %S\n", KeyName);
78  return S_FALSE;
79  }
80 
81  WCHAR wszCLSIDValue[CHARS_IN_GUID];
82  DWORD dwSize = sizeof(wszCLSIDValue);
83  LONG res = RegGetValueW(hkeyProgId, NULL, NULL, RRF_RT_REG_SZ, NULL, wszCLSIDValue, &dwSize);
84  RegCloseKey(hkeyProgId);
85  if (res)
86  {
87  ERR("OpenKeyFromFileType succeeded but RegGetValueW failed\n");
88  return S_FALSE;
89  }
90 
91 #if 0
92  {
94  L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
95  wszCLSIDValue,
97  NULL,
98  NULL,
99  NULL);
100  if (res != ERROR_SUCCESS)
101  {
102  ERR("DropHandler extension %S not approved\n", wszName);
103  return E_ACCESSDENIED;
104  }
105  }
106 #endif
107 
109  L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Blocked",
110  wszCLSIDValue,
112  NULL,
113  NULL,
114  NULL) == ERROR_SUCCESS)
115  {
116  ERR("Extension %S not approved\n", wszCLSIDValue);
117  return E_ACCESSDENIED;
118  }
119 
120  HRESULT hres = CLSIDFromString (wszCLSIDValue, pclsid);
122  return hres;
123 
124  return S_OK;
125 }
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1965
#define E_ACCESSDENIED
Definition: winerror.h:2849
#define ERROR_SUCCESS
Definition: deptool.c:10
#define WARN(fmt,...)
Definition: debug.h:112
#define CHARS_IN_GUID
#define RRF_RT_REG_SZ
Definition: driver.c:575
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
long LONG
Definition: pedump.c:60
#define S_FALSE
Definition: winerror.h:2357
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2697
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
unsigned long DWORD
Definition: ntddk_ex.h:95
HKEY OpenKeyFromFileType(LPWSTR pExtension, LPCWSTR KeyName)
Definition: CFSFolder.cpp:18
static const WCHAR L[]
Definition: oid.c:1250
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112
GLuint res
Definition: glext.h:9613
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by CFileSysEnum::_AddFindResult(), GetCLSIDForFileType(), and SHELL32_GetFSItemAttributes().

◆ getDefaultIconLocation()

static HRESULT getDefaultIconLocation ( LPWSTR  szIconFile,
UINT  cchMax,
int piIndex,
UINT  uFlags 
)
static

Definition at line 137 of file CFSFolder.cpp.

138 {
139  static const WCHAR folder[] = { 'F', 'o', 'l', 'd', 'e', 'r', 0 };
140 
141  if (!HCR_GetIconW(folder, szIconFile, NULL, cchMax, piIndex))
142  {
143  lstrcpynW(szIconFile, swShell32Name, cchMax);
144  *piIndex = -IDI_SHELL_FOLDER;
145  }
146 
147  if (uFlags & GIL_OPENICON)
148  {
149  // next icon
150  if (*piIndex < 0)
151  (*piIndex)--;
152  else
153  (*piIndex)++;
154  }
155 
156  return S_OK;
157 }
Definition: fci.c:115
BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
Definition: classes.c:294
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
UINT uFlags
Definition: api.c:59
#define lstrcpynW
Definition: compat.h:597
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT cchMax
#define IDI_SHELL_FOLDER
Definition: shresdef.h:525
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112

Referenced by getIconLocationForFolder().

◆ getIconLocationForFolder()

static HRESULT getIconLocationForFolder ( IShellFolder psf,
PCITEMID_CHILD  pidl,
UINT  uFlags,
LPWSTR  szIconFile,
UINT  cchMax,
int piIndex,
UINT pwFlags 
)
static

Definition at line 168 of file CFSFolder.cpp.

170 {
171  DWORD dwFileAttrs;
172  WCHAR wszPath[MAX_PATH];
173  WCHAR wszIniFullPath[MAX_PATH];
174  static const WCHAR iconFile[] = { 'I', 'c', 'o', 'n', 'F', 'i', 'l', 'e', 0 };
175  static const WCHAR clsid[] = { 'C', 'L', 'S', 'I', 'D', 0 };
176  static const WCHAR clsid2[] = { 'C', 'L', 'S', 'I', 'D', '2', 0 };
177  static const WCHAR iconIndex[] = { 'I', 'c', 'o', 'n', 'I', 'n', 'd', 'e', 'x', 0 };
178  static const WCHAR iconResource[] = { 'I', 'c', 'o', 'n', 'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', 0 };
179  static const WCHAR wszDesktopIni[] = { 'd','e','s','k','t','o','p','.','i','n','i',0 };
180 
181  if (uFlags & GIL_DEFAULTICON)
182  goto Quit;
183 
184  // get path
185  if (!ILGetDisplayNameExW(psf, pidl, wszPath, 0))
186  goto Quit;
187  if (!PathIsDirectoryW(wszPath))
188  goto Quit;
189 
190  // read-only or system folder?
191  dwFileAttrs = _ILGetFileAttributes(ILFindLastID(pidl), NULL, 0);
192  if ((dwFileAttrs & (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_READONLY)) == 0)
193  goto Quit;
194 
195  // build the full path of ini file
196  StringCchCopyW(wszIniFullPath, _countof(wszIniFullPath), wszPath);
197  PathAppendW(wszIniFullPath, wszDesktopIni);
198 
199  WCHAR wszValue[MAX_PATH], wszTemp[MAX_PATH];
200  if (getShellClassInfo(iconFile, wszValue, _countof(wszValue), wszIniFullPath))
201  {
202  // wszValue --> wszTemp
203  ExpandEnvironmentStringsW(wszValue, wszTemp, _countof(wszTemp));
204 
205  // wszPath + wszTemp --> wszPath
206  if (PathIsRelativeW(wszTemp))
207  PathAppendW(wszPath, wszTemp);
208  else
209  StringCchCopyW(wszPath, _countof(wszPath), wszTemp);
210 
211  // wszPath --> szIconFile
212  GetFullPathNameW(wszPath, cchMax, szIconFile, NULL);
213 
214  *piIndex = GetPrivateProfileIntW(s_shellClassInfo, iconIndex, 0, wszIniFullPath);
215  return S_OK;
216  }
217  else if (getShellClassInfo(clsid, wszValue, _countof(wszValue), wszIniFullPath) &&
218  HCR_GetIconW(wszValue, szIconFile, NULL, cchMax, piIndex))
219  {
220  return S_OK;
221  }
222  else if (getShellClassInfo(clsid2, wszValue, _countof(wszValue), wszIniFullPath) &&
223  HCR_GetIconW(wszValue, szIconFile, NULL, cchMax, piIndex))
224  {
225  return S_OK;
226  }
227  else if (getShellClassInfo(iconResource, wszValue, _countof(wszValue), wszIniFullPath))
228  {
229  // wszValue --> wszTemp
230  ExpandEnvironmentStringsW(wszValue, wszTemp, _countof(wszTemp));
231 
232  // parse the icon location
233  *piIndex = PathParseIconLocationW(wszTemp);
234 
235  // wszPath + wszTemp --> wszPath
236  if (PathIsRelativeW(wszTemp))
237  PathAppendW(wszPath, wszTemp);
238  else
239  StringCchCopyW(wszPath, _countof(wszPath), wszTemp);
240 
241  // wszPath --> szIconFile
242  GetFullPathNameW(wszPath, cchMax, szIconFile, NULL);
243  return S_OK;
244  }
245 
246 Quit:
247  return getDefaultIconLocation(szIconFile, cchMax, piIndex, uFlags);
248 }
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1722
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
Definition: path.c:1578
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2595
static HRESULT getDefaultIconLocation(LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT uFlags)
Definition: CFSFolder.cpp:137
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
Definition: classes.c:294
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1105
static BOOL getShellClassInfo(LPCWSTR Entry, LPWSTR pszValue, DWORD cchValueLen, LPCWSTR IniFile)
Definition: CFSFolder.cpp:162
UINT uFlags
Definition: api.c:59
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
UINT WINAPI GetPrivateProfileIntW(LPCWSTR section, LPCWSTR entry, INT def_val, LPCWSTR filename)
Definition: profile.c:1297
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:189
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:91
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT cchMax
REFCLSID clsid
Definition: msctf.c:82
int WINAPI PathParseIconLocationW(LPWSTR lpszPath)
Definition: path.c:1092
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
static const WCHAR s_shellClassInfo[]
Definition: CFSFolder.cpp:159

Referenced by CFSExtractIcon_CreateInstance().

◆ getShellClassInfo()

static BOOL getShellClassInfo ( LPCWSTR  Entry,
LPWSTR  pszValue,
DWORD  cchValueLen,
LPCWSTR  IniFile 
)
static

Definition at line 162 of file CFSFolder.cpp.

163 {
164  return GetPrivateProfileStringW(s_shellClassInfo, Entry, NULL, pszValue, cchValueLen, IniFile);
165 }
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
Definition: profile.c:1142
#define NULL
Definition: types.h:112
static const WCHAR s_shellClassInfo[]
Definition: CFSFolder.cpp:159
base of all file and directory entries
Definition: entries.h:82

Referenced by getIconLocationForFolder().

◆ OpenKeyFromFileType()

HKEY OpenKeyFromFileType ( LPWSTR  pExtension,
LPCWSTR  KeyName 
)

Definition at line 18 of file CFSFolder.cpp.

19 {
20  HKEY hkey;
21 
23  DWORD dwSize = sizeof(FullName);
24  wsprintf(FullName, L"%s\\%s", pExtension, KeyName);
25 
27  if (!res)
28  return hkey;
29 
31  if (res)
32  {
33  WARN("Failed to get progid for extension %S (%x), error %d\n", pExtension, pExtension, res);
34  return NULL;
35  }
36 
37  wcscat(FullName, L"\\");
39 
40  hkey = NULL;
42  if (res)
43  WARN("Could not open key %S for extension %S\n", KeyName, pExtension);
44 
45  return hkey;
46 }
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1965
#define KEY_READ
Definition: nt_native.h:1023
#define WARN(fmt,...)
Definition: debug.h:112
#define RRF_RT_REG_SZ
Definition: driver.c:575
long LONG
Definition: pedump.c:60
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2697
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_ PSTRING FullName
Definition: rtlfuncs.h:1648
static const WCHAR L[]
Definition: oid.c:1250
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define NULL
Definition: types.h:112
GLuint res
Definition: glext.h:9613
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define wsprintf
Definition: winuser.h:5841
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by CFSExtractIcon_CreateInstance(), and GetCLSIDForFileTypeFromExtension().

◆ SHELL32_CreatePidlFromBindCtx()

LPITEMIDLIST SHELL32_CreatePidlFromBindCtx ( IBindCtx pbc,
LPCWSTR  path 
)

Definition at line 553 of file CFSFolder.cpp.

554 {
556  LPITEMIDLIST pidl = NULL;
557  IUnknown *param = NULL;
558  WIN32_FIND_DATAW wfd;
559  HRESULT r;
560 
561  TRACE("%p %s\n", pbc, debugstr_w(path));
562 
563  if (!pbc)
564  return NULL;
565 
566  /* see if the caller bound File System Bind Data */
567  r = pbc->GetObjectParam((LPOLESTR)STR_FILE_SYS_BIND_DATA, &param);
568  if (FAILED(r))
569  return NULL;
570 
571  r = param->QueryInterface(IID_PPV_ARG(IFileSystemBindData,&fsbd));
572  if (SUCCEEDED(r))
573  {
574  r = fsbd->GetFindData(&wfd);
575  if (SUCCEEDED(r))
576  {
577  lstrcpynW(&wfd.cFileName[0], path, MAX_PATH);
578  pidl = _ILCreateFromFindDataW(&wfd);
579  }
580  fsbd->Release();
581  }
582 
583  return pidl;
584 }
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static LPOLESTR
Definition: stg_prop.c:27
HRESULT GetFindData([out] WIN32_FIND_DATAW *pfd)
#define IID_PPV_ARG(Itype, ppType)
#define lstrcpynW
Definition: compat.h:597
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
ULONG Release()
HRESULT GetObjectParam([in] LPOLESTR pszKey, [out] IUnknown **ppunk)
static IFileSystemBindData fsbd
Definition: shlfolder.c:4674
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
GLfloat param
Definition: glext.h:5796
#define MAX_PATH
Definition: compat.h:34
#define NULL
Definition: types.h:112
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *wfd)
Definition: pidl.c:1741
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by CFSFolder::ParseDisplayName(), and CDesktopFolder::ParseDisplayName().

◆ SHELL32_GetCLSIDForDirectory()

static HRESULT SHELL32_GetCLSIDForDirectory ( LPCWSTR  pwszDir,
LPCWSTR  KeyName,
CLSID pclsidFolder 
)
static

Definition at line 586 of file CFSFolder.cpp.

587 {
588  WCHAR wszCLSIDValue[CHARS_IN_GUID];
589  WCHAR wszDesktopIni[MAX_PATH];
590  StringCchCopyW(wszDesktopIni, MAX_PATH, pwszDir);
591  StringCchCatW(wszDesktopIni, MAX_PATH, L"\\desktop.ini");
592 
593  if (GetPrivateProfileStringW(L".ShellClassInfo",
594  KeyName,
595  L"",
596  wszCLSIDValue,
598  wszDesktopIni))
599  {
600  return CLSIDFromString(wszCLSIDValue, pclsidFolder);
601  }
602  return E_FAIL;
603 }
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
Definition: profile.c:1142
#define CHARS_IN_GUID
#define E_FAIL
Definition: ddrawi.h:102
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2697
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
static const WCHAR L[]
Definition: oid.c:1250
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338

Referenced by CFileSysEnum::_AddFindResult(), CFSFolder::BindToObject(), and CFSFolder::CreateViewObject().

◆ SHELL32_GetFSItemAttributes()

HRESULT SHELL32_GetFSItemAttributes ( IShellFolder psf,
LPCITEMIDLIST  pidl,
LPDWORD  pdwAttributes 
)

Definition at line 605 of file CFSFolder.cpp.

606 {
607  DWORD dwFileAttributes, dwShellAttributes;
608 
609  if (!_ILIsFolder(pidl) && !_ILIsValue(pidl))
610  {
611  ERR("Got wrong type of pidl!\n");
612  *pdwAttributes &= SFGAO_CANLINK;
613  return S_OK;
614  }
615 
617 
618  /* Set common attributes */
619  dwShellAttributes = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_CANLINK | SFGAO_CANRENAME | SFGAO_CANDELETE |
620  SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSTEM;
621 
622  BOOL bDirectory = (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
623 
624  if (!bDirectory)
625  {
626  // https://git.reactos.org/?p=reactos.git;a=blob;f=dll/shellext/zipfldr/res/zipfldr.rgs;hb=032b5aacd233cd7b83ab6282aad638c161fdc400#l9
627  WCHAR szFileName[MAX_PATH];
628  LPWSTR pExtension;
629 
630  if (_ILSimpleGetTextW(pidl, szFileName, _countof(szFileName)) && (pExtension = PathFindExtensionW(szFileName)))
631  {
632  CLSID clsidFile;
633  // FIXME: Cache this?
634  HRESULT hr = GetCLSIDForFileTypeFromExtension(pExtension, L"CLSID", &clsidFile);
635  if (hr == S_OK)
636  {
637  HKEY hkey;
638  hr = SHRegGetCLSIDKeyW(clsidFile, L"ShellFolder", FALSE, FALSE, &hkey);
639  if (SUCCEEDED(hr))
640  {
641  DWORD dwAttributes = 0;
642  DWORD dwSize = sizeof(dwAttributes);
643  LSTATUS Status;
644 
645  Status = SHRegGetValueW(hkey, NULL, L"Attributes", RRF_RT_REG_DWORD, NULL, &dwAttributes, &dwSize);
646  if (Status == STATUS_SUCCESS)
647  {
648  TRACE("Augmenting '%S' with dwAttributes=0x%x\n", szFileName, dwAttributes);
649  dwShellAttributes |= dwAttributes;
650  }
651  ::RegCloseKey(hkey);
652 
653  // This should be presented as directory!
654  bDirectory = TRUE;
655  TRACE("Treating '%S' as directory!\n", szFileName);
656  }
657  }
658  }
659  }
660 
661  // This is a directory
662  if (bDirectory)
663  {
664  dwShellAttributes |= (SFGAO_FOLDER | /*SFGAO_HASSUBFOLDER |*/ SFGAO_STORAGE);
665 
666  // Is this a real directory?
668  {
669  dwShellAttributes |= (SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR);
670  }
671  }
672  else
673  {
674  dwShellAttributes |= SFGAO_STREAM;
675  }
676 
678  dwShellAttributes |= SFGAO_HIDDEN;
679 
681  dwShellAttributes |= SFGAO_READONLY;
682 
683  if (SFGAO_LINK & *pdwAttributes)
684  {
685  char ext[MAX_PATH];
686 
687  if (_ILGetExtension(pidl, ext, MAX_PATH) && !lstrcmpiA(ext, "lnk"))
688  dwShellAttributes |= SFGAO_LINK;
689  }
690 
691  if (SFGAO_HASSUBFOLDER & *pdwAttributes)
692  {
693  CComPtr<IShellFolder> psf2;
694  if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &psf2))))
695  {
696  CComPtr<IEnumIDList> pEnumIL;
697  if (SUCCEEDED(psf2->EnumObjects(0, SHCONTF_FOLDERS, &pEnumIL)))
698  {
699  if (pEnumIL->Skip(1) == S_OK)
700  dwShellAttributes |= SFGAO_HASSUBFOLDER;
701  }
702  }
703  }
704 
705  *pdwAttributes = dwShellAttributes;
706 
707  TRACE ("-- 0x%08x\n", *pdwAttributes);
708  return S_OK;
709 }
int WINAPI lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:42
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2595
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
#define IID_PPV_ARG(Itype, ppType)
DWORD dwAttributes
Definition: vdmdbg.h:34
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
if SUCCEEDED(hr)
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1965
char ext[3]
Definition: mkdosfs.c:358
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2476
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2096
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
Status
Definition: gdiplustypes.h:24
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID, LPCWSTR, BOOL, BOOL, PHKEY)
Definition: reg.c:2422
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
static const WCHAR L[]
Definition: oid.c:1250
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:1974
LSTATUS WINAPI SHRegGetValueW(_In_ HKEY hkey, _In_opt_ LPCWSTR pszSubKey, _In_opt_ LPCWSTR pszValue, _In_ SRRF srrfFlags, _Out_opt_ LPDWORD pdwType, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID pvData, _Inout_opt_ LPDWORD pcbData)
HRESULT GetCLSIDForFileTypeFromExtension(LPWSTR pExtension, LPCWSTR KeyName, CLSID *pclsid)
Definition: CFSFolder.cpp:72
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define NULL
Definition: types.h:112
DWORD dwFileAttributes
#define STATUS_SUCCESS
Definition: shellext.h:65
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define RRF_RT_REG_DWORD
Definition: driver.c:578
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by CFSFolder::GetAttributesOf(), and CFSFolder::ParseDisplayName().

◆ SHELL_FS_HideExtension()

BOOL SHELL_FS_HideExtension ( LPWSTR  szPath)

Definition at line 1266 of file CFSFolder.cpp.

1267 {
1268  HKEY hKey;
1269  DWORD dwData;
1270  DWORD dwDataSize = sizeof (DWORD);
1271  BOOL doHide = FALSE; /* The default value is FALSE (win98 at least) */
1272 
1273  if (!RegCreateKeyExW(HKEY_CURRENT_USER, AdvancedW, 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0)) {
1274  if (!RegQueryValueExW(hKey, HideFileExtW, 0, 0, (LPBYTE) &dwData, &dwDataSize))
1275  doHide = dwData;
1276  RegCloseKey (hKey);
1277  }
1278 
1279  if (!doHide) {
1281 
1282  if (*ext != '\0') {
1284  LONG classlen = sizeof(classname);
1285 
1286  if (!RegQueryValueW(HKEY_CLASSES_ROOT, ext, classname, &classlen))
1289  doHide = TRUE;
1290  RegCloseKey(hKey);
1291  }
1292  }
1293  }
1294  return doHide;
1295 }
#define TRUE
Definition: types.h:120
#define HKEY_CURRENT_USER
Definition: winreg.h:11
static const WCHAR NeverShowExtW[]
Definition: CFSFolder.cpp:1251
static HANDLE ULONG_PTR dwData
Definition: file.c:35
WCHAR classname[128]
Definition: startup.c:15
#define DWORD
Definition: nt_native.h:44
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1091
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
char ext[3]
Definition: mkdosfs.c:358
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4254
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR HideFileExtW[]
Definition: CFSFolder.cpp:1250
FxAutoRegKey hKey
LPCWSTR szPath
Definition: env.c:37
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
#define NULL
Definition: types.h:112
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
static const WCHAR AdvancedW[]
Definition: CFSFolder.cpp:1249
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CFSFolder::SetNameOf(), and SHELL_FS_ProcessDisplayFilename().

◆ SHELL_FS_ProcessDisplayFilename()

void SHELL_FS_ProcessDisplayFilename ( LPWSTR  szPath,
DWORD  dwFlags 
)

Definition at line 1297 of file CFSFolder.cpp.

1298 {
1299  /*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
1300  if (!(dwFlags & SHGDN_FORPARSING) &&
1301  ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
1302  if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
1304  }
1305 }
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823
BOOL SHELL_FS_HideExtension(LPWSTR szPath)
Definition: CFSFolder.cpp:1266
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
LPCWSTR szPath
Definition: env.c:37

Referenced by CFSFolder::GetDisplayNameOf().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ AdvancedW

const WCHAR AdvancedW[] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
static

Definition at line 1249 of file CFSFolder.cpp.

Referenced by SHELL_FS_HideExtension().

◆ GenericSFHeader

◆ HideFileExtW

const WCHAR HideFileExtW[] = L"HideFileExt"
static

Definition at line 1250 of file CFSFolder.cpp.

Referenced by SHELL_FS_HideExtension().

◆ NeverShowExtW

const WCHAR NeverShowExtW[] = L"NeverShowExt"
static

Definition at line 1251 of file CFSFolder.cpp.

Referenced by SHELL_FS_HideExtension().

◆ s_shellClassInfo

const WCHAR s_shellClassInfo[] = { '.', 'S', 'h', 'e', 'l', 'l', 'C', 'l', 'a', 's', 's', 'I', 'n', 'f', 'o', 0 }
static

Definition at line 159 of file CFSFolder.cpp.

Referenced by getIconLocationForFolder(), and getShellClassInfo().