ReactOS 0.4.15-dev-6662-g1b3eed5
shfldr.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  shvheader
 

Macros

#define CHARS_IN_GUID   39
 
#define GET_SHGDN_FOR(dwFlags)   ((DWORD)dwFlags & (DWORD)0x0000FF00)
 
#define GET_SHGDN_RELATION(dwFlags)   ((DWORD)dwFlags & (DWORD)0x000000FF)
 

Functions

LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut)
 
HRESULT SHELL32_ParseNextElement (IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
 
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
 
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx (IBindCtx *pbc, LPCWSTR path)
 
HRESULT SHELL32_GetFSItemAttributes (IShellFolder *psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
 
HRESULT SHELL32_CompareDetails (IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
HRESULT SHELL32_CompareChildren (IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
HRESULT SHELL32_BindToSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
 
BOOL HCR_RegOpenClassIDKey (REFIID riid, HKEY *hkey)
 
void AddFSClassKeysToArray (PCUITEMID_CHILD pidl, HKEY *array, UINT *cKeys)
 
HRESULT CDefViewBckgrndMenu_CreateInstance (IShellFolder *psf, REFIID riid, void **ppv)
 
HRESULT SH_GetApidlFromDataObject (IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
 
static __inline int SHELL32_GUIDToStringA (REFGUID guid, LPSTR str)
 
static __inline int SHELL32_GUIDToStringW (REFGUID guid, LPWSTR str)
 
void SHELL_FS_ProcessDisplayFilename (LPWSTR szPath, DWORD dwFlags)
 
BOOL SHELL_FS_HideExtension (LPCWSTR pwszPath)
 
void AddClassKeyToArray (const WCHAR *szClass, HKEY *array, UINT *cKeys)
 

Macro Definition Documentation

◆ CHARS_IN_GUID

#define CHARS_IN_GUID   39

Definition at line 27 of file shfldr.h.

◆ GET_SHGDN_FOR

#define GET_SHGDN_FOR (   dwFlags)    ((DWORD)dwFlags & (DWORD)0x0000FF00)

Definition at line 36 of file shfldr.h.

◆ GET_SHGDN_RELATION

#define GET_SHGDN_RELATION (   dwFlags)    ((DWORD)dwFlags & (DWORD)0x000000FF)

Definition at line 37 of file shfldr.h.

Function Documentation

◆ AddClassKeyToArray()

void AddClassKeyToArray ( const WCHAR szClass,
HKEY array,
UINT cKeys 
)

Definition at line 268 of file shlfolder.cpp.

269{
270 if (*cKeys >= 16)
271 return;
272
273 HKEY hkey;
275 if (result != ERROR_SUCCESS)
276 return;
277
278 array[*cKeys] = hkey;
279 *cKeys += 1;
280}
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3353
GLuint64EXT * result
Definition: glext.h:11304
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by AddFSClassKeysToArray(), CDrivesContextMenu_CreateInstance(), CGuidItemContextMenu_CreateInstance(), CDesktopFolder::CreateViewObject(), CDrivesFolder::CreateViewObject(), CFSFolder::CreateViewObject(), and CNetFolder::GetUIObjectOf().

◆ AddFSClassKeysToArray()

void AddFSClassKeysToArray ( PCUITEMID_CHILD  pidl,
HKEY array,
UINT cKeys 
)

Definition at line 282 of file shlfolder.cpp.

283{
284 if (_ILIsValue(pidl))
285 {
286 FileStructW* pFileData = _ILGetFileStructW(pidl);
287 LPWSTR extension = PathFindExtension(pFileData->wszName);
288
289 if (extension)
290 {
291 AddClassKeyToArray(extension, array, cKeys);
292
293 WCHAR wszClass[MAX_PATH], wszClass2[MAX_PATH];
294 DWORD dwSize = sizeof(wszClass);
295 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, NULL, RRF_RT_REG_SZ, NULL, wszClass, &dwSize) == ERROR_SUCCESS)
296 {
297 swprintf(wszClass2, L"%s//%s", extension, wszClass);
298
299 AddClassKeyToArray(wszClass, array, cKeys);
300 AddClassKeyToArray(wszClass2, array, cKeys);
301 }
302
303 swprintf(wszClass2, L"SystemFileAssociations//%s", extension);
304 AddClassKeyToArray(wszClass2, array, cKeys);
305
306 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, L"PerceivedType ", RRF_RT_REG_SZ, NULL, wszClass, &dwSize) == ERROR_SUCCESS)
307 {
308 swprintf(wszClass2, L"SystemFileAssociations//%s", wszClass);
309 AddClassKeyToArray(wszClass2, array, cKeys);
310 }
311 }
312
313 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
314 AddClassKeyToArray(L"*", array, cKeys);
315 }
316 else if (_ILIsFolder(pidl))
317 {
318 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
319 AddClassKeyToArray(L"Directory", array, cKeys);
320 AddClassKeyToArray(L"Folder", array, cKeys);
321 }
322 else
323 {
324 ERR("Got non FS pidl\n");
325 }
326}
#define ERR(fmt,...)
Definition: debug.h:110
#define NULL
Definition: types.h:112
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1962
#define MAX_PATH
Definition: compat.h:34
#define RRF_RT_REG_SZ
Definition: driver.c:575
#define swprintf
Definition: precomp.h:40
unsigned long DWORD
Definition: ntddk_ex.h:95
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define L(x)
Definition: ntvdm.h:50
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2365
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1980
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:1989
void AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:268
#define PathFindExtension
Definition: shlwapi.h:907
WCHAR wszName[1]
Definition: shlfolder.c:1555
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

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

◆ CDefViewBckgrndMenu_CreateInstance()

HRESULT CDefViewBckgrndMenu_CreateInstance ( IShellFolder psf,
REFIID  riid,
void **  ppv 
)

Definition at line 334 of file CDefViewBckgrndMenu.cpp.

335{
336 return ShellObjectCreatorInit<CDefViewBckgrndMenu>(psf, riid, ppv);
337}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

Referenced by CDefView::GetItemObject().

◆ GetNextElementW()

LPCWSTR GetNextElementW ( LPCWSTR  pszNext,
LPWSTR  pszOut,
DWORD  dwOut 
)

Definition at line 44 of file shlfolder.cpp.

45{
46 LPCWSTR pszTail = pszNext;
47 DWORD dwCopy;
48
49 TRACE ("(%s %p 0x%08x)\n", debugstr_w (pszNext), pszOut, dwOut);
50
51 *pszOut = 0x0000;
52
53 if (!pszNext || !*pszNext)
54 return NULL;
55
56 while (*pszTail && (*pszTail != (WCHAR) '\\'))
57 pszTail++;
58
59 dwCopy = pszTail - pszNext + 1;
60 lstrcpynW (pszOut, pszNext, (dwOut < dwCopy) ? dwOut : dwCopy);
61
62 if (*pszTail)
63 pszTail++;
64 else
65 pszTail = NULL;
66
67 TRACE ("--(%s %s 0x%08x %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail);
68 return pszTail;
69}
#define lstrcpynW
Definition: compat.h:738
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by CFSFolder::ParseDisplayName().

◆ HCR_RegOpenClassIDKey()

BOOL HCR_RegOpenClassIDKey ( REFIID  riid,
HKEY hkey 
)

Definition at line 227 of file classes.c.

228{
229 char xriid[50];
230 sprintf( xriid, "CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
231 riid->Data1, riid->Data2, riid->Data3,
232 riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
233 riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7] );
234
235 TRACE("%s\n",xriid );
236
237 return !RegOpenKeyExA(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey);
238}
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3318
#define sprintf(buf, format,...)
Definition: sprintf.c:55

Referenced by CRegFolder::GetDetailsOf(), CRegFolder::GetDisplayNameOf(), HCR_GetClassNameA(), and HCR_GetClassNameW().

◆ SH_GetApidlFromDataObject()

HRESULT SH_GetApidlFromDataObject ( IDataObject pDataObject,
PIDLIST_ABSOLUTE ppidlfolder,
PUITEMID_CHILD **  apidlItems,
UINT pcidl 
)

Definition at line 328 of file shlfolder.cpp.

329{
330 CDataObjectHIDA cida(pDataObject);
331
332 if (FAILED_UNEXPECTEDLY(cida.hr()))
333 return cida.hr();
334
335 /* convert the data into pidl */
336 LPITEMIDLIST pidl;
337 LPITEMIDLIST *apidl = _ILCopyCidaToaPidl(&pidl, cida);
338 if (!apidl)
339 {
340 return E_OUTOFMEMORY;
341 }
342
343 *ppidlfolder = pidl;
344 *apidlItems = apidl;
345 *pcidl = cida->cidl;
346
347 return S_OK;
348}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define S_OK
Definition: intsafe.h:52
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST *pidl, const CIDA *cida)
Definition: pidl.c:2688
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by CFSDropTarget::_RepositionItems(), DrivesContextMenuCallback(), and RegFolderContextMenuCallback().

◆ SHELL32_BindToSF()

HRESULT SHELL32_BindToSF ( LPCITEMIDLIST  pidlRoot,
PERSIST_FOLDER_TARGET_INFO *  ppfti,
LPCITEMIDLIST  pidl,
const GUID clsid,
REFIID  riid,
LPVOID ppvOut 
)

Definition at line 160 of file shlfolder.cpp.

162{
163 PITEMID_CHILD pidlChild = ILCloneFirst (pidl);
164 if (!pidlChild)
165 return E_FAIL;
166
169 ppfti,
170 pidlChild,
171 clsid,
173 ILFree(pidlChild);
174
176 return hr;
177
178 if (_ILIsPidlSimple (pidl))
179 return psf->QueryInterface(riid, ppvOut);
180 else
181 return psf->BindToObject(ILGetNext (pidl), NULL, riid, ppvOut);
182}
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
REFCLSID clsid
Definition: msctf.c:82
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:929
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:253
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:855
HRESULT hr
Definition: shlfolder.c:183
HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:122
#define IID_PPV_ARG(Itype, ppType)

Referenced by CDrivesFolder::BindToObject(), CFSFolder::BindToObject(), CNetFolder::BindToObject(), and CRegFolder::BindToObject().

◆ SHELL32_CompareChildren()

HRESULT SHELL32_CompareChildren ( IShellFolder2 psf,
LPARAM  lParam,
LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 216 of file shlfolder.cpp.

217{
218 PUIDLIST_RELATIVE nextpidl1 = ILGetNext (pidl1);
219 PUIDLIST_RELATIVE nextpidl2 = ILGetNext (pidl2);
220
221 bool isEmpty1 = _ILIsDesktop(nextpidl1);
222 bool isEmpty2 = _ILIsDesktop(nextpidl2);
223 if (isEmpty1 || isEmpty2)
224 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
225
226 PITEMID_CHILD firstpidl = ILCloneFirst (pidl1);
227 if (!firstpidl)
228 return E_OUTOFMEMORY;
229
231 HRESULT hr = psf->BindToObject(firstpidl, 0, IID_PPV_ARG(IShellFolder, &psf2));
232 ILFree(firstpidl);
233 if (FAILED(hr))
234 return MAKE_COMPARE_HRESULT(0);
235
236 return psf2->CompareIDs(lParam, nextpidl1, nextpidl2);
237}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
LPARAM lParam
Definition: combotst.c:139
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
#define FAILED(hr)
Definition: intsafe.h:51
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:561
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55

Referenced by CDrivesFolder::CompareIDs(), CFSFolder::CompareIDs(), CRegFolder::CompareIDs(), and SHELL32_CompareDetails().

◆ SHELL32_CompareDetails()

HRESULT SHELL32_CompareDetails ( IShellFolder2 isf,
LPARAM  lParam,
LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 239 of file shlfolder.cpp.

240{
242 WCHAR wszItem1[MAX_PATH], wszItem2[MAX_PATH];
244
245 hres = isf->GetDetailsOf(pidl1, lParam, &sd);
246 if (FAILED(hres))
247 return MAKE_COMPARE_HRESULT(1);
248
249 hres = StrRetToBufW(&sd.str, pidl1, wszItem1, MAX_PATH);
250 if (FAILED(hres))
251 return MAKE_COMPARE_HRESULT(1);
252
253 hres = isf->GetDetailsOf(pidl2, lParam, &sd);
254 if (FAILED(hres))
255 return MAKE_COMPARE_HRESULT(1);
256
257 hres = StrRetToBufW(&sd.str, pidl2, wszItem2, MAX_PATH);
258 if (FAILED(hres))
259 return MAKE_COMPARE_HRESULT(1);
260
261 int ret = wcsicmp(wszItem1, wszItem2);
262 if (ret == 0)
263 return SHELL32_CompareChildren(isf, lParam, pidl1, pidl2);
264
266}
#define wcsicmp
Definition: compat.h:15
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1522
HRESULT GetDetailsOf([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
HRESULT hres
Definition: protocol.c:465
static const WCHAR sd[]
Definition: suminfo.c:286
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:216
int ret

Referenced by CControlPanelFolder::CompareIDs(), CDrivesFolder::CompareIDs(), CFSFolder::CompareIDs(), CPrinterFolder::CompareIDs(), and CRegFolder::CompareIDs().

◆ SHELL32_CreatePidlFromBindCtx()

LPITEMIDLIST SHELL32_CreatePidlFromBindCtx ( IBindCtx pbc,
LPCWSTR  path 
)

Definition at line 546 of file CFSFolder.cpp.

547{
549 LPITEMIDLIST pidl = NULL;
552 HRESULT r;
553
554 TRACE("%p %s\n", pbc, debugstr_w(path));
555
556 if (!pbc)
557 return NULL;
558
559 /* see if the caller bound File System Bind Data */
560 r = pbc->GetObjectParam((LPOLESTR)STR_FILE_SYS_BIND_DATA, &param);
561 if (FAILED(r))
562 return NULL;
563
564 r = param->QueryInterface(IID_PPV_ARG(IFileSystemBindData,&fsbd));
565 if (SUCCEEDED(r))
566 {
567 r = fsbd->GetFindData(&wfd);
568 if (SUCCEEDED(r))
569 {
570 lstrcpynW(&wfd.cFileName[0], path, MAX_PATH);
571 pidl = _ILCreateFromFindDataW(&wfd);
572 }
573 fsbd->Release();
574 }
575
576 return pidl;
577}
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLfloat param
Definition: glext.h:5796
HRESULT GetObjectParam([in] LPOLESTR pszKey, [out] IUnknown **ppunk)
HRESULT GetFindData([out] WIN32_FIND_DATAW *pfd)
ULONG Release()
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static LPOLESTR
Definition: stg_prop.c:27
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *wfd)
Definition: pidl.c:1745
static IFileSystemBindData fsbd
Definition: shlfolder.c:4674

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

◆ SHELL32_GetDisplayNameOfChild()

HRESULT SHELL32_GetDisplayNameOfChild ( IShellFolder2 psf,
LPCITEMIDLIST  pidl,
DWORD  dwFlags,
LPSTRRET  strRet 
)

Definition at line 198 of file shlfolder.cpp.

200{
201 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
202 if (!pidlFirst)
203 return E_OUTOFMEMORY;
204
205 CComPtr<IShellFolder> psfChild;
206 HRESULT hr = psf->BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
207 if (SUCCEEDED (hr))
208 {
209 hr = psfChild->GetDisplayNameOf(ILGetNext (pidl), dwFlags, strRet);
210 }
211 ILFree (pidlFirst);
212
213 return hr;
214}
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

Referenced by CDesktopFolder::GetDisplayNameOf(), CDrivesFolder::GetDisplayNameOf(), CFSFolder::GetDisplayNameOf(), and CRegFolder::GetDisplayNameOf().

◆ SHELL32_GetFSItemAttributes()

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

Definition at line 599 of file CFSFolder.cpp.

600{
601 DWORD dwFileAttributes, dwShellAttributes;
602
603 if (!_ILIsFolder(pidl) && !_ILIsValue(pidl))
604 {
605 ERR("Got wrong type of pidl!\n");
606 *pdwAttributes &= SFGAO_CANLINK;
607 return S_OK;
608 }
609
611
612 /* Set common attributes */
613 dwShellAttributes = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_CANLINK | SFGAO_CANRENAME | SFGAO_CANDELETE |
614 SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSTEM;
615
616 BOOL bDirectory = (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
617
618 if (!bDirectory)
619 {
620 // https://git.reactos.org/?p=reactos.git;a=blob;f=dll/shellext/zipfldr/res/zipfldr.rgs;hb=032b5aacd233cd7b83ab6282aad638c161fdc400#l9
621 WCHAR szFileName[MAX_PATH];
622 LPWSTR pExtension;
623
624 if (_ILSimpleGetTextW(pidl, szFileName, _countof(szFileName)) && (pExtension = PathFindExtensionW(szFileName)))
625 {
626 CLSID clsidFile;
627 // FIXME: Cache this?
628 HRESULT hr = GetCLSIDForFileTypeFromExtension(pExtension, L"CLSID", &clsidFile);
629 if (hr == S_OK)
630 {
631 HKEY hkey;
632 hr = SHRegGetCLSIDKeyW(clsidFile, L"ShellFolder", FALSE, FALSE, &hkey);
633 if (SUCCEEDED(hr))
634 {
636 DWORD dwSize = sizeof(dwAttributes);
638
640 if (Status == STATUS_SUCCESS)
641 {
642 TRACE("Augmenting '%S' with dwAttributes=0x%x\n", szFileName, dwAttributes);
643 dwShellAttributes |= dwAttributes;
644 }
645 ::RegCloseKey(hkey);
646
647 // This should be presented as directory!
648 bDirectory = TRUE;
649 TRACE("Treating '%S' as directory!\n", szFileName);
650 }
651 }
652 }
653 }
654
655 // This is a directory
656 if (bDirectory)
657 {
658 dwShellAttributes |= (SFGAO_FOLDER | /*SFGAO_HASSUBFOLDER |*/ SFGAO_STORAGE);
659
660 // Is this a real directory?
662 {
663 dwShellAttributes |= (SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR);
664 }
665 }
666 else
667 {
668 dwShellAttributes |= SFGAO_STREAM;
669 }
670
672 dwShellAttributes |= SFGAO_HIDDEN;
673
675 dwShellAttributes |= SFGAO_READONLY;
676
677 if (SFGAO_LINK & *pdwAttributes)
678 {
679 char ext[MAX_PATH];
680
681 if (_ILGetExtension(pidl, ext, MAX_PATH) && !lstrcmpiA(ext, "lnk"))
682 dwShellAttributes |= SFGAO_LINK;
683 }
684
685 if (SFGAO_HASSUBFOLDER & *pdwAttributes)
686 {
687 CComPtr<IShellFolder> psf2;
688 if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &psf2))))
689 {
690 CComPtr<IEnumIDList> pEnumIL;
691 if (SUCCEEDED(psf2->EnumObjects(0, SHCONTF_FOLDERS, &pEnumIL)))
692 {
693 if (pEnumIL->Skip(1) == S_OK)
694 dwShellAttributes |= SFGAO_HASSUBFOLDER;
695 }
696 }
697 }
698
699 *pdwAttributes = dwShellAttributes;
700
701 TRACE ("-- 0x%08x\n", *pdwAttributes);
702 return S_OK;
703}
DWORD dwFileAttributes
#define RegCloseKey(hKey)
Definition: registry.h:47
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR *const ext[]
Definition: module.c:53
#define RRF_RT_REG_DWORD
Definition: driver.c:578
HRESULT GetCLSIDForFileTypeFromExtension(LPWSTR pExtension, LPCWSTR KeyName, CLSID *pclsid)
Definition: CFSFolder.cpp:72
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID, LPCWSTR, BOOL, BOOL, PHKEY)
Definition: reg.c:2422
unsigned int BOOL
Definition: ntddk_ex.h:94
Status
Definition: gdiplustypes.h:25
int WINAPI lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:42
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2610
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2491
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2111
#define STATUS_SUCCESS
Definition: shellext.h:65
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)
#define _countof(array)
Definition: sndvol32.h:68
DWORD dwAttributes
Definition: vdmdbg.h:34

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

◆ SHELL32_GUIDToStringA()

static __inline int SHELL32_GUIDToStringA ( REFGUID  guid,
LPSTR  str 
)
static

Definition at line 73 of file shfldr.h.

74{
75 return sprintf(str, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
76 guid.Data1, guid.Data2, guid.Data3,
77 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
78 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
79}
const GUID * guid
const WCHAR * str

◆ SHELL32_GUIDToStringW()

static __inline int SHELL32_GUIDToStringW ( REFGUID  guid,
LPWSTR  str 
)
static

Definition at line 81 of file shfldr.h.

82{
83 static const WCHAR fmtW[] =
84 { '{','%','0','8','l','x','-','%','0','4','x','-','%','0','4','x','-',
85 '%','0','2','x','%','0','2','x','-',
86 '%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x',
87 '%','0','2','x','%','0','2','x','}',0 };
88 return swprintf(str, fmtW,
89 guid.Data1, guid.Data2, guid.Data3,
90 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
91 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
92}

Referenced by CRegFolder::GetDisplayNameOf(), and IsNamespaceExtensionHidden().

◆ SHELL32_ParseNextElement()

HRESULT SHELL32_ParseNextElement ( IShellFolder2 psf,
HWND  hwndOwner,
LPBC  pbc,
LPITEMIDLIST pidlInOut,
LPOLESTR  szNext,
DWORD pEaten,
DWORD pdwAttributes 
)

Definition at line 71 of file shlfolder.cpp.

73{
75 LPITEMIDLIST pidlIn = pidlInOut ? *pidlInOut : NULL;
76 LPITEMIDLIST pidlOut = NULL;
77 LPITEMIDLIST pidlTemp = NULL;
78 CComPtr<IShellFolder> psfChild;
79
80 TRACE ("(%p, %p, %p, %s)\n", psf, pbc, pidlIn, debugstr_w (szNext));
81
82 /* get the shellfolder for the child pidl and let it analyse further */
83 hr = psf->BindToObject(pidlIn, pbc, IID_PPV_ARG(IShellFolder, &psfChild));
84 if (FAILED(hr))
85 return hr;
86
87 hr = psfChild->ParseDisplayName(hwndOwner, pbc, szNext, pEaten, &pidlOut, pdwAttributes);
88 if (FAILED(hr))
89 return hr;
90
91 pidlTemp = ILCombine (pidlIn, pidlOut);
92 if (!pidlTemp)
93 {
95 if (pidlOut)
96 ILFree(pidlOut);
97 return hr;
98 }
99
100 if (pidlOut)
101 ILFree (pidlOut);
102
103 if (pidlIn)
104 ILFree (pidlIn);
105
106 *pidlInOut = pidlTemp;
107
108 TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr);
109 return S_OK;
110}
#define E_INVALIDARG
Definition: ddrawi.h:101
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:703

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

◆ SHELL_FS_HideExtension()

BOOL SHELL_FS_HideExtension ( LPCWSTR  pwszPath)

Definition at line 1272 of file CFSFolder.cpp.

1273{
1274 HKEY hKey;
1275 DWORD dwData, dwDataSize = sizeof(DWORD);
1276 BOOL doHide = FALSE; /* The default value is FALSE (win98 at least) */
1277 LONG lError;
1278
1279 lError = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
1280 0, NULL, 0, KEY_ALL_ACCESS, NULL,
1281 &hKey, NULL);
1282 if (lError == ERROR_SUCCESS)
1283 {
1284 lError = RegQueryValueExW(hKey, L"HideFileExt", NULL, NULL, (LPBYTE)&dwData, &dwDataSize);
1285 if (lError == ERROR_SUCCESS)
1286 doHide = dwData;
1288 }
1289
1290 if (!doHide)
1291 {
1293 if (*DotExt != 0)
1294 {
1296 LONG classlen = sizeof(classname);
1297 lError = RegQueryValueW(HKEY_CLASSES_ROOT, DotExt, classname, &classlen);
1298 if (lError == ERROR_SUCCESS)
1299 {
1301 if (lError == ERROR_SUCCESS)
1302 {
1303 lError = RegQueryValueExW(hKey, L"NeverShowExt", NULL, NULL, NULL, NULL);
1304 if (lError == ERROR_SUCCESS)
1305 doHide = TRUE;
1306
1308 }
1309 }
1310 }
1311 }
1312
1313 return doHide;
1314}
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 RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3288
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4256
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4118
FxAutoRegKey hKey
LPCWSTR szPath
Definition: env.c:37
static HANDLE ULONG_PTR dwData
Definition: file.c:35
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
#define DWORD
Definition: nt_native.h:44
long LONG
Definition: pedump.c:60
WCHAR classname[128]
Definition: startup.c:15
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11

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

◆ SHELL_FS_ProcessDisplayFilename()

void SHELL_FS_ProcessDisplayFilename ( LPWSTR  szPath,
DWORD  dwFlags 
)

Definition at line 1316 of file CFSFolder.cpp.

1317{
1318 /*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
1319 if (!(dwFlags & SHGDN_FORPARSING) &&
1320 ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
1321 if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
1323 }
1324}
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1272
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823

Referenced by CFSFolder::GetDisplayNameOf().