ReactOS 0.4.16-dev-1165-g40721f4
ishellfolder_helpers.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SFGDNO_RETRYWITHFORPARSING   0x00000001
 
#define SFGDNO_RETRYALWAYS   0x80000000
 

Functions

HRESULT WINAPI IShellFolder_GetDisplayNameOf (_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ SHGDNF uFlags, _Out_ LPSTRRET lpName, _In_ DWORD dwRetryFlags)
 
HRESULT WINAPI IShellFolder_ParseDisplayName (_In_ IShellFolder *psf, _In_ HWND hwndOwner, _In_ LPBC pbcReserved, _In_ LPOLESTR lpszDisplayName, _Out_ ULONG *pchEaten, _Out_ PIDLIST_RELATIVE *ppidl, _Out_ ULONG *pdwAttributes)
 
EXTERN_C HRESULT WINAPI IShellFolder_CompareIDs (_In_ IShellFolder *psf, _In_ LPARAM lParam, _In_ PCUIDLIST_RELATIVE pidl1, _In_ PCUIDLIST_RELATIVE pidl2)
 

Macro Definition Documentation

◆ SFGDNO_RETRYALWAYS

#define SFGDNO_RETRYALWAYS   0x80000000

Definition at line 30 of file ishellfolder_helpers.h.

◆ SFGDNO_RETRYWITHFORPARSING

#define SFGDNO_RETRYWITHFORPARSING   0x00000001

Definition at line 29 of file ishellfolder_helpers.h.

Function Documentation

◆ IShellFolder_CompareIDs()

EXTERN_C HRESULT WINAPI IShellFolder_CompareIDs ( _In_ IShellFolder psf,
_In_ LPARAM  lParam,
_In_ PCUIDLIST_RELATIVE  pidl1,
_In_ PCUIDLIST_RELATIVE  pidl2 
)

Definition at line 447 of file utils.cpp.

452{
453 TRACE("(%p, %p, %p, %p)\n", psf, lParam, pidl1, pidl2);
454
455 if (lParam & ~(SIZE_T)SHCIDS_COLUMNMASK)
456 {
457 /* Try as IShellFolder2 if possible */
458 HRESULT hr = psf->QueryInterface(IID_IShellFolder2, (void **)&psf);
459 if (FAILED(hr))
460 lParam &= SHCIDS_COLUMNMASK;
461 else
462 psf->Release();
463 }
464
465 return psf->CompareIDs(lParam, pidl1, pidl2);
466}
LPARAM lParam
Definition: combotst.c:139
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
nsrefcnt Release()
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
ULONG_PTR SIZE_T
Definition: typedefs.h:80

◆ IShellFolder_GetDisplayNameOf()

HRESULT WINAPI IShellFolder_GetDisplayNameOf ( _In_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_ SHGDNF  uFlags,
_Out_ LPSTRRET  lpName,
_In_ DWORD  dwRetryFlags 
)

Definition at line 359 of file utils.cpp.

365{
366 HRESULT hr;
367
368 TRACE("(%p)->(%p, 0x%lX, %p, 0x%lX)\n", psf, pidl, uFlags, lpName, dwRetryFlags);
369
370 hr = psf->GetDisplayNameOf(pidl, uFlags, lpName);
372 return hr;
373
374 dwRetryFlags |= SFGDNO_RETRYALWAYS;
375
376 if ((uFlags & SHGDN_FORPARSING) == 0)
377 dwRetryFlags |= SFGDNO_RETRYWITHFORPARSING;
378
379 // Retry with other flags to get successful results
380 for (SIZE_T iEntry = 0; iEntry < _countof(g_RetryData); ++iEntry)
381 {
382 const RETRY_DATA *pData = &g_RetryData[iEntry];
383 if (!(dwRetryFlags & pData->dwRetryFlags))
384 continue;
385
386 SHGDNF uNewFlags = ((uFlags & ~pData->uRemove) | pData->uAdd);
387 if (uNewFlags == uFlags)
388 continue;
389
390 hr = psf->GetDisplayNameOf(pidl, uNewFlags, lpName);
392 break;
393
394 uFlags = uNewFlags; // Update flags every time
395 }
396
397 return hr;
398}
UINT uFlags
Definition: api.c:59
static const RETRY_DATA g_RetryData[]
Definition: utils.cpp:342
static BOOL SHLWAPI_IsBogusHRESULT(HRESULT hr)
Definition: utils.cpp:330
#define SFGDNO_RETRYWITHFORPARSING
#define SFGDNO_RETRYALWAYS
#define _countof(array)
Definition: sndvol32.h:70
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
_In_ LPCSTR lpName
Definition: winbase.h:2821

◆ IShellFolder_ParseDisplayName()

HRESULT WINAPI IShellFolder_ParseDisplayName ( _In_ IShellFolder psf,
_In_ HWND  hwndOwner,
_In_ LPBC  pbcReserved,
_In_ LPOLESTR  lpszDisplayName,
_Out_ ULONG pchEaten,
_Out_ PIDLIST_RELATIVE ppidl,
_Out_ ULONG pdwAttributes 
)