ReactOS 0.4.17-dev-470-gf9e3448
shlfolder.cpp File Reference
#include "precomp.h"
Include dependency graph for shlfolder.cpp:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
SHCONTF SHELL_GetDefaultFolderEnumSHCONTF ()
 
BOOL SHELL_IncludeItemInFolderEnum (IShellFolder *pSF, PCUITEMID_CHILD pidl, SFGAOF Query, SHCONTF Flags)
 
static HRESULT MapSCIDToShell32FsColumn (const SHCOLUMNID *pscid, VARTYPE &vt)
 
HRESULT SHELL_MapSCIDToColumn (IShellFolder2 *pSF, const SHCOLUMNID *pscid)
 
template<class T >
static HRESULT GetDetailsOfAsStringVariant (T &pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
 
HRESULT SHELL_GetDetailsOfAsStringVariant (IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
 
HRESULT SHELL_GetDetailsOfAsStringVariant (IShellFolder *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
 
HRESULT SHELL_GetDetailsOfColumnAsVariant (IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARTYPE vt, VARIANT *pVar)
 
HRESULT SH32_GetDetailsOfPKeyAsVariant (IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap)
 
HRESULT SHELL_QueryInfoTipAlloc (_In_ IShellFolder *pSF, _In_ DWORD dwFlags, _In_ LPCITEMIDLIST pidl, _Out_ PWSTR *ppTip)
 
HRESULT SHELL_CreateAbsolutePidl (IShellFolder *pSF, PCUIDLIST_RELATIVE pidlChild, PIDLIST_ABSOLUTE *ppPidl)
 
HRESULT Shell_NextElement (_Inout_ LPWSTR *ppch, _Out_ LPWSTR pszOut, _In_ INT cchOut, _In_ BOOL bValidate)
 
HRESULT SHELL32_ParseNextElement (IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
 
HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
 
HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, const GUID *clsid, int csidl, REFIID riid, LPVOID *ppvOut)
 
HRESULT SHELL32_BindToSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
 
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
 
HRESULT SHELL32_CompareChildren (IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
HRESULT SHELL32_CompareDetails (IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
void CloseRegKeyArray (HKEY *array, UINT cKeys)
 
LSTATUS AddClassKeyToArray (const WCHAR *szClass, HKEY *array, UINT *cKeys)
 
LSTATUS AddClsidKeyToArray (REFCLSID clsid, HKEY *array, UINT *cKeys)
 
void AddFSClassKeysToArray (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
 
void AddPidlClassKeysToArray (LPCITEMIDLIST pidl, HKEY *array, UINT *cKeys)
 
HRESULT SH_GetApidlFromDataObject (IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
 
HRESULT WINAPI SHCreateLinks (HWND hWnd, LPCSTR lpszDir, IDataObject *lpDataObject, UINT uFlags, LPITEMIDLIST *lppidlLinks)
 
EXTERN_C HRESULT WINAPI SHOpenFolderAndSelectItems (PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD dwFlags)
 
HRESULT SHELL32_ShowPropertiesDialog (IDataObject *pdtobj)
 
HRESULT SHELL32_DefaultContextMenuCallBack (IShellFolder *psf, IDataObject *pdo, UINT msg)
 

Function Documentation

◆ AddClassKeyToArray()

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

Definition at line 440 of file shlfolder.cpp.

441{
442 if (*cKeys >= 16)
443 return ERROR_MORE_DATA;
444
445 HKEY hkey;
447 if (result == ERROR_SUCCESS)
448 {
449 array[*cKeys] = hkey;
450 *cKeys += 1;
451 }
452 return result;
453}
#define ERROR_MORE_DATA
Definition: dderror.h:13
#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:3333
GLuint64EXT * result
Definition: glext.h:11304
#define KEY_READ
Definition: nt_native.h:1026
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
Definition: undname.c:54
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by AddClsidKeyToArray(), and AddFSClassKeysToArray().

◆ AddClsidKeyToArray()

LSTATUS AddClsidKeyToArray ( REFCLSID  clsid,
HKEY array,
UINT cKeys 
)

Definition at line 455 of file shlfolder.cpp.

456{
457 WCHAR path[6 + 38 + 1] = L"CLSID\\";
458 StringFromGUID2(clsid, path + 6, 38 + 1);
459 return AddClassKeyToArray(path, array, cKeys);
460}
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define L(x)
Definition: resources.c:13
const CLSID * clsid
Definition: msctf.cpp:50
short WCHAR
Definition: pedump.c:58
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:440

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

◆ AddFSClassKeysToArray()

void AddFSClassKeysToArray ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
HKEY array,
UINT cKeys 
)

Definition at line 462 of file shlfolder.cpp.

463{
464 // This function opens the association array keys in canonical order for filesystem items.
465 // The order is documented: learn.microsoft.com/en-us/windows/win32/shell/fa-associationarray
466
467 ASSERT(cidl >= 1 && apidl);
468 PCUITEMID_CHILD pidl = apidl[0];
469 if (_ILIsValue(pidl))
470 {
472 PWSTR name;
473 FileStructW* pFileData = _ILGetFileStructW(pidl);
474 if (pFileData)
475 {
476 name = pFileData->wszName;
477 }
478 else
479 {
481 name = buf;
482 }
483 LPCWSTR extension = PathFindExtension(name);
484
485 if (extension)
486 {
487 WCHAR wszClass[MAX_PATH], wszSFA[23 + _countof(wszClass)];
488 DWORD dwSize = sizeof(wszClass);
489 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, NULL, RRF_RT_REG_SZ, NULL, wszClass, &dwSize) != ERROR_SUCCESS ||
490 !*wszClass || AddClassKeyToArray(wszClass, array, cKeys) != ERROR_SUCCESS)
491 {
492 // Only add the extension key if the ProgId is not valid
493 AddClassKeyToArray(extension, array, cKeys);
494
495 // "Open With" becomes the default when there are no verbs in the above keys
496 if (cidl == 1)
497 AddClassKeyToArray(L"Unknown", array, cKeys);
498 }
499
500 _swprintf(wszSFA, L"SystemFileAssociations\\%s", extension);
501 AddClassKeyToArray(wszSFA, array, cKeys);
502
503 dwSize = sizeof(wszClass);
504 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, L"PerceivedType", RRF_RT_REG_SZ, NULL, wszClass, &dwSize) == ERROR_SUCCESS)
505 {
506 _swprintf(wszSFA, L"SystemFileAssociations\\%s", wszClass);
507 AddClassKeyToArray(wszSFA, array, cKeys);
508 }
509 }
510
511 AddClassKeyToArray(L"*", array, cKeys);
512 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
513 }
514 else if (_ILIsFolder(pidl))
515 {
516 // FIXME: Directory > Folder > AFO is the correct order and it's
517 // the order Windows reports in its undocumented association array
518 // but it is somehow not the order Windows adds the items to its menu!
519 // Until the correct algorithm in CDefaultContextMenu can be determined,
520 // we add the folder keys in "menu order".
521 AddClassKeyToArray(L"Folder", array, cKeys);
522 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
523 AddClassKeyToArray(L"Directory", array, cKeys);
524 }
525 else if (_ILIsDrive(pidl))
526 {
527 AddClassKeyToArray(L"Drive", array, cKeys);
528 AddClassKeyToArray(L"Folder", array, cKeys);
529 }
530 else
531 {
532 ERR("Got non FS pidl\n");
533 }
534}
#define ERR(fmt,...)
Definition: precomp.h:57
#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:1931
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define ASSERT(a)
Definition: mode.c:44
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define _swprintf(buf, format,...)
Definition: sprintf.c:56
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2450
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2144
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2151
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:2137
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2198
#define PathFindExtension
Definition: shlwapi.h:468
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
#define _countof(array)
Definition: sndvol32.h:70
WCHAR wszName[1]
Definition: shlfolder.c:1557
Definition: name.c:39
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define RRF_RT_REG_SZ
Definition: winreg.h:58

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

◆ AddPidlClassKeysToArray()

void AddPidlClassKeysToArray ( LPCITEMIDLIST  pidl,
HKEY array,
UINT cKeys 
)

Definition at line 536 of file shlfolder.cpp.

537{
538 if ((pidl = ILFindLastID(pidl)) != NULL)
539 AddFSClassKeysToArray(1, &pidl, array, cKeys);
540}
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
void AddFSClassKeysToArray(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:462

Referenced by CFSDropTarget::_GetEffectFromMenu().

◆ CloseRegKeyArray()

void CloseRegKeyArray ( HKEY array,
UINT  cKeys 
)

Definition at line 434 of file shlfolder.cpp.

435{
436 for (UINT i = 0; i < cKeys; ++i)
438}
#define RegCloseKey(hKey)
Definition: registry.h:49
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13

Referenced by CRegKeyHandleArray::~CRegKeyHandleArray().

◆ GetDetailsOfAsStringVariant()

template<class T >
static HRESULT GetDetailsOfAsStringVariant ( T pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARIANT pVar 
)
inlinestatic

Definition at line 95 of file shlfolder.cpp.

96{
97 V_VT(pVar) = VT_EMPTY;
99 sd.str.uType = STRRET_CSTR;
100 HRESULT hr = pSF->GetDetailsOf(pidl, Column, &sd);
101 if (FAILED(hr))
102 return hr;
103 if (FAILED(hr = StrRetToBSTR(&sd.str, pidl, &V_BSTR(pVar))))
104 return hr;
105 V_VT(pVar) = VT_BSTR;
106 return hr;
107}
HRESULT hr
Definition: delayimp.cpp:582
@ VT_BSTR
Definition: compat.h:2303
@ VT_EMPTY
Definition: compat.h:2295
HRESULT WINAPI StrRetToBSTR(STRRET *lpStrRet, LPCITEMIDLIST pidl, BSTR *pBstrOut)
Definition: string.c:418
#define FAILED(hr)
Definition: intsafe.h:51
static const WCHAR sd[]
Definition: suminfo.c:286
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
@ STRRET_CSTR
Definition: shtypes.idl:87

Referenced by SHELL_GetDetailsOfAsStringVariant().

◆ MapSCIDToShell32FsColumn()

static HRESULT MapSCIDToShell32FsColumn ( const SHCOLUMNID *  pscid,
VARTYPE vt 
)
static

Definition at line 58 of file shlfolder.cpp.

59{
60 if (pscid->fmtid == FMTID_Storage)
61 {
62 switch (pscid->pid)
63 {
64 case PID_STG_NAME: vt = VT_BSTR; return SHFSF_COL_NAME;
65 case PID_STG_SIZE: vt = VT_UI8; return SHFSF_COL_SIZE;
69 }
70 }
71 if (pscid->fmtid == FMTID_SummaryInformation && pscid->pid == PIDSI_COMMENTS)
72 {
73 vt = VT_BSTR;
74 return SHFSF_COL_COMMENT;
75 }
76 return E_INVALIDARG;
77}
#define E_INVALIDARG
Definition: ddrawi.h:101
@ VT_UI8
Definition: compat.h:2315
@ VT_DATE
Definition: compat.h:2302
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define PID_STG_STORAGETYPE
Definition: ntquery.h:50
#define PID_STG_WRITETIME
Definition: ntquery.h:60
#define PID_STG_SIZE
Definition: ntquery.h:58
#define PID_STG_ATTRIBUTES
Definition: ntquery.h:59
#define PID_STG_NAME
Definition: ntquery.h:56
const FMTID FMTID_SummaryInformation
#define SHFSF_COL_COMMENT
Definition: shfldr.h:49
#define SHFSF_COL_SIZE
Definition: shfldr.h:45
#define SHFSF_COL_NAME
Definition: shfldr.h:44
#define SHFSF_COL_TYPE
Definition: shfldr.h:46
#define SHFSF_COL_FATTS
Definition: shfldr.h:48
#define SHFSF_COL_MDATE
Definition: shfldr.h:47

Referenced by SH32_GetDetailsOfPKeyAsVariant().

◆ SH32_GetDetailsOfPKeyAsVariant()

HRESULT SH32_GetDetailsOfPKeyAsVariant ( IShellFolder2 pSF,
PCUITEMID_CHILD  pidl,
const SHCOLUMNID *  pscid,
VARIANT pVar,
BOOL  UseFsColMap 
)

Definition at line 152 of file shlfolder.cpp.

153{
154 // CFSFolder and CRegFolder uses the SHFSF_COL columns and can use the faster and better version,
155 // everyone else must ask the folder to map the SCID to a column.
157 HRESULT hr = UseFsColMap ? MapSCIDToShell32FsColumn(pscid, vt) : SHELL_MapSCIDToColumn(pSF, pscid);
158 return SUCCEEDED(hr) ? SHELL_GetDetailsOfColumnAsVariant(pSF, pidl, hr, vt, pVar) : hr;
159}
unsigned short VARTYPE
Definition: compat.h:2254
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static HRESULT MapSCIDToShell32FsColumn(const SHCOLUMNID *pscid, VARTYPE &vt)
Definition: shlfolder.cpp:58
HRESULT SHELL_MapSCIDToColumn(IShellFolder2 *pSF, const SHCOLUMNID *pscid)
Definition: shlfolder.cpp:80
HRESULT SHELL_GetDetailsOfColumnAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARTYPE vt, VARIANT *pVar)
Definition: shlfolder.cpp:129

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

◆ SH_GetApidlFromDataObject()

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

Definition at line 542 of file shlfolder.cpp.

543{
544 CDataObjectHIDA cida(pDataObject);
545
546 if (FAILED_UNEXPECTEDLY(cida.hr()))
547 return cida.hr();
548
549 /* convert the data into pidl */
550 LPITEMIDLIST pidl;
551 LPITEMIDLIST *apidl = _ILCopyCidaToaPidl(&pidl, cida);
552 if (!apidl)
553 {
554 return E_OUTOFMEMORY;
555 }
556
557 *ppidlfolder = pidl;
558 *apidlItems = apidl;
559 *pcidl = cida->cidl;
560
561 return S_OK;
562}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define S_OK
Definition: intsafe.h:52
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST *pidl, const CIDA *cida)
Definition: pidl.c:2654
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

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

◆ SHCreateLinks()

HRESULT WINAPI SHCreateLinks ( HWND  hWnd,
LPCSTR  lpszDir,
IDataObject lpDataObject,
UINT  uFlags,
LPITEMIDLIST lppidlLinks 
)

Definition at line 569 of file shlfolder.cpp.

571{
572 FIXME("%p %s %p %08x %p\n", hWnd, lpszDir, lpDataObject, uFlags, lppidlLinks);
573 return E_NOTIMPL;
574}
HWND hWnd
Definition: settings.c:17
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99
UINT uFlags
Definition: api.c:59

◆ SHELL32_BindToSF()

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

Definition at line 325 of file shlfolder.cpp.

327{
328 PITEMID_CHILD pidlChild = ILCloneFirst (pidl);
329 if (!pidlChild)
330 return E_FAIL;
331
334 ppfti,
335 pidlChild,
336 clsid,
338 ILFree(pidlChild);
339
341 return hr;
342
343 if (_ILIsPidlSimple (pidl))
344 return psf->QueryInterface(riid, ppvOut);
345 else
346 return psf->BindToObject(ILGetNext (pidl), NULL, riid, ppvOut);
347}
#define E_FAIL
Definition: ddrawi.h:102
REFIID riid
Definition: atlbase.h:39
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:263
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:977
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:287
#define IID_PPV_ARG(Itype, ppType)

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

◆ SHELL32_CoCreateInitSF() [1/2]

HRESULT SHELL32_CoCreateInitSF ( LPCITEMIDLIST  pidlRoot,
const GUID clsid,
int  csidl,
REFIID  riid,
LPVOID ppvOut 
)

Definition at line 314 of file shlfolder.cpp.

316{
317 /* fill the PERSIST_FOLDER_TARGET_INFO */
318 PERSIST_FOLDER_TARGET_INFO pfti = {0};
319 pfti.dwAttributes = -1;
320 pfti.csidl = csidl;
321
322 return SHELL32_CoCreateInitSF(pidlRoot, &pfti, NULL, clsid, riid, ppvOut);
323}

◆ SHELL32_CoCreateInitSF() [2/2]

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

Definition at line 287 of file shlfolder.cpp.

289{
290 HRESULT hr;
291 CComPtr<IShellFolder> pShellFolder;
292
294 if (FAILED(hr))
295 return hr;
296
297 LPITEMIDLIST pidlAbsolute = ILCombine (pidlRoot, pidlChild);
300
301 if (ppfti && SUCCEEDED(pShellFolder->QueryInterface(IID_PPV_ARG(IPersistFolder3, &ppf3))))
302 {
303 ppf3->InitializeEx(NULL, pidlAbsolute, ppfti);
304 }
305 else if (SUCCEEDED(pShellFolder->QueryInterface(IID_PPV_ARG(IPersistFolder, &ppf))))
306 {
307 ppf->Initialize(pidlAbsolute);
308 }
309 ILFree (pidlAbsolute);
310
311 return pShellFolder->QueryInterface(riid, ppvOut);
312}
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppv)
Definition: shellole.c:197
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817

Referenced by SHELL32_BindToSF(), and SHELL32_CoCreateInitSF().

◆ SHELL32_CompareChildren()

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

Definition at line 381 of file shlfolder.cpp.

382{
383 PUIDLIST_RELATIVE nextpidl1 = ILGetNext (pidl1);
384 PUIDLIST_RELATIVE nextpidl2 = ILGetNext (pidl2);
385
386 bool isEmpty1 = _ILIsDesktop(nextpidl1);
387 bool isEmpty2 = _ILIsDesktop(nextpidl2);
388 if (isEmpty1 || isEmpty2)
389 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
390
391 PITEMID_CHILD firstpidl = ILCloneFirst (pidl1);
392 if (!firstpidl)
393 return E_OUTOFMEMORY;
394
396 HRESULT hr = psf->BindToObject(firstpidl, 0, IID_PPV_ARG(IShellFolder, &psf2));
397 ILFree(firstpidl);
398 if (FAILED(hr))
399 return MAKE_COMPARE_HRESULT(0);
400
401 return psf2->CompareIDs(lParam, nextpidl1, nextpidl2);
402}
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 MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:686
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 404 of file shlfolder.cpp.

405{
407 WCHAR wszItem1[MAX_PATH], wszItem2[MAX_PATH];
409 UINT col = LOWORD(lParam); // Column index without SHCIDS_* flags
410
411 hres = isf->GetDetailsOf(pidl1, col, &sd);
412 if (FAILED(hres))
413 return MAKE_COMPARE_HRESULT(1);
414
415 hres = StrRetToBufW(&sd.str, pidl1, wszItem1, MAX_PATH);
416 if (FAILED(hres))
417 return MAKE_COMPARE_HRESULT(1);
418
419 hres = isf->GetDetailsOf(pidl2, col, &sd);
420 if (FAILED(hres))
421 return MAKE_COMPARE_HRESULT(1);
422
423 hres = StrRetToBufW(&sd.str, pidl2, wszItem2, MAX_PATH);
424 if (FAILED(hres))
425 return MAKE_COMPARE_HRESULT(1);
426
427 int ret = CFSFolder::CompareUiStrings(wszItem1, wszItem2, lParam);
428 if (ret == 0)
429 return SHELL32_CompareChildren(isf, lParam, pidl1, pidl2);
430
432}
static int CompareUiStrings(LPCWSTR a, LPCWSTR b, LPARAM lParam=0)
Definition: CFSFolder.h:132
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:248
return ret
Definition: mutex.c:146
HRESULT GetDetailsOf([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
HRESULT hres
Definition: protocol.c:465
#define LOWORD(l)
Definition: pedump.c:82
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:381

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

◆ SHELL32_DefaultContextMenuCallBack()

HRESULT SHELL32_DefaultContextMenuCallBack ( IShellFolder psf,
IDataObject pdo,
UINT  msg 
)

Definition at line 656 of file shlfolder.cpp.

657{
658 switch (msg)
659 {
661 return S_OK; // Yes, I want verbs
663 return S_FALSE; // Do it for me please
665 return S_FALSE; // Supposedly "required for Windows 7 to pick a default"
666 }
667 return E_NOTIMPL;
668}
#define msg(x)
Definition: auth_time.c:54
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#define S_FALSE
Definition: winerror.h:3451

Referenced by CDesktopFolder::CallBack(), CDrivesFolder::CallBack(), CFSFolder::CallBack(), CNetFolderBackgroundMenuCB(), DrivesContextMenuCallback(), NetFolderMenuCallback(), and RegFolderContextMenuCallback().

◆ SHELL32_GetDisplayNameOfChild()

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

Definition at line 363 of file shlfolder.cpp.

365{
366 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
367 if (!pidlFirst)
368 return E_OUTOFMEMORY;
369
370 CComPtr<IShellFolder> psfChild;
371 HRESULT hr = psf->BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
372 if (SUCCEEDED (hr))
373 {
374 hr = psfChild->GetDisplayNameOf(ILGetNext (pidl), dwFlags, strRet);
375 }
376 ILFree (pidlFirst);
377
378 return hr;
379}
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

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

◆ SHELL32_ParseNextElement()

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

Definition at line 236 of file shlfolder.cpp.

238{
240 LPITEMIDLIST pidlIn = pidlInOut ? *pidlInOut : NULL;
241 LPITEMIDLIST pidlOut = NULL;
242 LPITEMIDLIST pidlTemp = NULL;
243 CComPtr<IShellFolder> psfChild;
244
245 TRACE ("(%p, %p, %p, %s)\n", psf, pbc, pidlIn, debugstr_w (szNext));
246
247 /* get the shellfolder for the child pidl and let it analyse further */
248 hr = psf->BindToObject(pidlIn, pbc, IID_PPV_ARG(IShellFolder, &psfChild));
249 if (FAILED(hr))
250 return hr;
251
252 hr = psfChild->ParseDisplayName(hwndOwner, pbc, szNext, pEaten, &pidlOut, pdwAttributes);
253 if (FAILED(hr))
254 return hr;
255
256 pidlTemp = ILCombine (pidlIn, pidlOut);
257 if (!pidlTemp)
258 {
260 if (pidlOut)
261 ILFree(pidlOut);
262 return hr;
263 }
264
265 if (pidlOut)
266 ILFree (pidlOut);
267
268 if (pidlIn)
269 ILFree (pidlIn);
270
271 *pidlInOut = pidlTemp;
272
273 TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr);
274 return S_OK;
275}
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by CRegFolder::ParseDisplayName().

◆ SHELL32_ShowPropertiesDialog()

HRESULT SHELL32_ShowPropertiesDialog ( IDataObject pdtobj)

Definition at line 648 of file shlfolder.cpp.

649{
650 if (!pdtobj)
651 return E_INVALIDARG;
653}
HRESULT SHELL32_ShowFilesystemItemsPropertiesDialogAsync(HWND hOwner, IDataObject *pDO)
Definition: item_prop.cpp:183

Referenced by CDesktopFolder::CallBack(), and CDefaultContextMenu::DoProperties().

◆ SHELL_CreateAbsolutePidl()

HRESULT SHELL_CreateAbsolutePidl ( IShellFolder pSF,
PCUIDLIST_RELATIVE  pidlChild,
PIDLIST_ABSOLUTE ppPidl 
)

Definition at line 174 of file shlfolder.cpp.

175{
176 PIDLIST_ABSOLUTE pidlFolder;
177 HRESULT hr = SHGetIDListFromObject(pSF, &pidlFolder);
178 if (SUCCEEDED(hr))
179 {
180 hr = SHILCombine(pidlFolder, pidlChild, ppPidl);
181 ILFree(pidlFolder);
182 }
183 return hr;
184}
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1680

Referenced by CRegFolder::SetNameOf().

◆ SHELL_GetDefaultFolderEnumSHCONTF()

SHCONTF SHELL_GetDefaultFolderEnumSHCONTF ( )

Definition at line 29 of file shlfolder.cpp.

30{
31 SHCONTF Flags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS;
34 if (ss.fShowAllObjects)
35 Flags |= SHCONTF_INCLUDEHIDDEN;
36 if (ss.fShowSuperHidden)
37 Flags |= SHCONTF_INCLUDESUPERHIDDEN;
38 return Flags;
39}
#define FALSE
Definition: types.h:117
#define ss
Definition: i386-dis.c:441
static SHCONTF
Definition: ordinal.c:61
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1637
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1621
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by SHELL32_GetFSItemAttributes().

◆ SHELL_GetDetailsOfAsStringVariant() [1/2]

HRESULT SHELL_GetDetailsOfAsStringVariant ( IShellFolder pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARIANT pVar 
)

Definition at line 116 of file shlfolder.cpp.

117{
118 HRESULT hr;
121 return SHELL_GetDetailsOfAsStringVariant(pSF2, pidl, Column, pVar);
123 if (SUCCEEDED(hr = pSF->CreateViewObject(NULL, IID_PPV_ARG(IShellDetails, &pSD))))
124 return GetDetailsOfAsStringVariant(pSD, pidl, Column, pVar);
125 return hr;
126}
HRESULT CreateViewObject([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
HRESULT SHELL_GetDetailsOfAsStringVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:110
static HRESULT GetDetailsOfAsStringVariant(T &pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:95

Referenced by CFSFolder::GetDetailsEx(), and CFolder::GetDetailsOf().

◆ SHELL_GetDetailsOfAsStringVariant() [2/2]

HRESULT SHELL_GetDetailsOfAsStringVariant ( IShellFolder2 pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARIANT pVar 
)

Definition at line 110 of file shlfolder.cpp.

111{
112 return GetDetailsOfAsStringVariant(pSF, pidl, Column, pVar);
113}

Referenced by SHELL_GetDetailsOfAsStringVariant(), and SHELL_GetDetailsOfColumnAsVariant().

◆ SHELL_GetDetailsOfColumnAsVariant()

HRESULT SHELL_GetDetailsOfColumnAsVariant ( IShellFolder2 pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARTYPE  vt,
VARIANT pVar 
)

Definition at line 129 of file shlfolder.cpp.

130{
131 HRESULT hr = SHELL_GetDetailsOfAsStringVariant(pSF, pidl, Column, pVar);
132 if (FAILED(hr))
133 return hr;
134 if (vt == VT_EMPTY)
135 {
137 if (FAILED(pSF->GetDefaultColumnState(Column, &state)))
140 vt = VT_I8;
142 vt = VT_DATE;
143 else
144 vt = VT_BSTR;
145 }
146 if (vt != VT_BSTR)
147 VariantChangeType(pVar, pVar, 0, vt);
148 return hr;
149}
static int state
Definition: maze.c:121
@ VT_I8
Definition: compat.h:2314
HRESULT GetDefaultColumnState([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
@ SHCOLSTATE_TYPE_INT
Definition: shtypes.idl:122
@ SHCOLSTATE_TYPEMASK
Definition: shtypes.idl:124
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:962

Referenced by SH32_GetDetailsOfPKeyAsVariant().

◆ SHELL_IncludeItemInFolderEnum()

BOOL SHELL_IncludeItemInFolderEnum ( IShellFolder pSF,
PCUITEMID_CHILD  pidl,
SFGAOF  Query,
SHCONTF  Flags 
)

Definition at line 41 of file shlfolder.cpp.

42{
43 if (SUCCEEDED(pSF->GetAttributesOf(1, &pidl, &Query)))
44 {
45 if (Query & SFGAO_NONENUMERATED)
46 return FALSE;
47 if ((Query & SFGAO_HIDDEN) && !(Flags & SHCONTF_INCLUDEHIDDEN))
48 return FALSE;
49 if ((Query & (SFGAO_HIDDEN | SFGAO_SYSTEM)) == (SFGAO_HIDDEN | SFGAO_SYSTEM) && !(Flags & SHCONTF_INCLUDESUPERHIDDEN))
50 return FALSE;
51 if ((Flags & (SHCONTF_FOLDERS | SHCONTF_NONFOLDERS)) != (SHCONTF_FOLDERS | SHCONTF_NONFOLDERS))
52 return (Flags & SHCONTF_FOLDERS) ? (Query & SFGAO_FOLDER) : !(Query & SFGAO_FOLDER);
53 }
54 return TRUE;
55}
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
#define TRUE
Definition: types.h:120
#define SFGAO_SYSTEM
Definition: shobjidl.idl:198
HRESULT GetAttributesOf([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)

Referenced by CRegFolderEnum::AddItemsFromKey(), and CRegFolderEnum::Initialize().

◆ SHELL_MapSCIDToColumn()

HRESULT SHELL_MapSCIDToColumn ( IShellFolder2 pSF,
const SHCOLUMNID *  pscid 
)

Definition at line 80 of file shlfolder.cpp.

81{
82 for (UINT i = 0; i <= SHCIDS_COLUMNMASK; ++i)
83 {
84 SHCOLUMNID scid;
85 HRESULT hr = pSF->MapColumnToSCID(i, &scid);
86 if (FAILED(hr))
87 break;
88 if (IsEqualPropertyKey(scid, *pscid))
89 return i;
90 }
91 return E_FAIL;
92}
HRESULT MapColumnToSCID([in] UINT iColumn, [in] SHCOLUMNID *pscid)
#define IsEqualPropertyKey(a, b)
Definition: propkeydef.h:52

Referenced by SH32_GetDetailsOfPKeyAsVariant().

◆ Shell_NextElement()

HRESULT Shell_NextElement ( _Inout_ LPWSTR ppch,
_Out_ LPWSTR  pszOut,
_In_ INT  cchOut,
_In_ BOOL  bValidate 
)

Definition at line 187 of file shlfolder.cpp.

192{
193 *pszOut = UNICODE_NULL;
194
195 if (!*ppch)
196 return S_FALSE;
197
198 HRESULT hr;
199 LPWSTR pchNext = wcschr(*ppch, L'\\');
200 if (pchNext)
201 {
202 if (*ppch < pchNext)
203 {
204 /* Get an element */
205 StringCchCopyNW(pszOut, cchOut, *ppch, pchNext - *ppch);
206 ++pchNext;
207
208 if (!*pchNext)
209 pchNext = NULL; /* No next */
210
211 hr = S_OK;
212 }
213 else /* Double backslashes found? */
214 {
215 pchNext = NULL;
217 }
218 }
219 else /* No more next */
220 {
221 StringCchCopyW(pszOut, cchOut, *ppch);
222 hr = S_OK;
223 }
224
225 *ppch = pchNext; /* Go next */
226
227 if (hr == S_OK && bValidate && !PathIsValidElement(pszOut))
228 {
229 *pszOut = UNICODE_NULL;
231 }
232
233 return hr;
234}
#define wcschr
Definition: compat.h:17
BOOL PathIsValidElement(_In_ LPCWSTR pszPath)
Definition: utils.cpp:240
#define UNICODE_NULL
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
Definition: strsafe.h:236
uint16_t * LPWSTR
Definition: typedefs.h:56

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

◆ SHELL_QueryInfoTipAlloc()

HRESULT SHELL_QueryInfoTipAlloc ( _In_ IShellFolder pSF,
_In_ DWORD  dwFlags,
_In_ LPCITEMIDLIST  pidl,
_Out_ PWSTR ppTip 
)

Definition at line 162 of file shlfolder.cpp.

163{
164 if (!pidl)
165 return E_INVALIDARG;
167 HRESULT hr = pSF->GetUIObjectOf(NULL, 1, &pidl, IID_NULL_PPV_ARG(IQueryInfo, &pQI));
168 if (FAILED(hr))
169 return hr;
170 hr = pQI->GetInfoTip(dwFlags, ppTip); // Note: *ppTip can be NULL if there is no tip
171 return SUCCEEDED(hr) && !*ppTip ? S_FALSE : hr;
172}
#define IID_NULL_PPV_ARG(Itype, ppType)

Referenced by CFolder::GetDetailsOf().

◆ SHOpenFolderAndSelectItems()

EXTERN_C HRESULT WINAPI SHOpenFolderAndSelectItems ( PCIDLIST_ABSOLUTE  pidlFolder,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
DWORD  dwFlags 
)

Definition at line 583 of file shlfolder.cpp.

587{
588 ERR("SHOpenFolderAndSelectItems() is hackplemented\n");
590 PCIDLIST_ABSOLUTE pidlItem;
591 if (cidl)
592 {
593 /* Firefox sends a full pidl here dispite the fact it is a PCUITEMID_CHILD_ARRAY -_- */
594 if (!ILIsSingle(apidl[0]))
595 {
596 pidlItem = apidl[0];
597 }
598 else
599 {
600 HRESULT hr = SHILCombine(pidlFolder, apidl[0], &pidlItem);
602 return hr;
603 freeItem.Attach(const_cast<PIDLIST_ABSOLUTE>(pidlItem));
604 }
605 }
606 else
607 {
608 pidlItem = pidlFolder;
609 }
610
611 CComPtr<IShellFolder> psfDesktop;
612
613 HRESULT hr = SHGetDesktopFolder(&psfDesktop);
615 return hr;
616
617 STRRET strret;
618 hr = psfDesktop->GetDisplayNameOf(pidlItem, SHGDN_FORPARSING, &strret);
620 return hr;
621
622 WCHAR wszBuf[MAX_PATH];
623 hr = StrRetToBufW(&strret, pidlItem, wszBuf, _countof(wszBuf));
625 return hr;
626
627 WCHAR wszParams[MAX_PATH];
628 wcscpy(wszParams, L"/select,");
629 wcscat(wszParams, wszBuf);
630
632 memset(&sei, 0, sizeof sei);
633 sei.cbSize = sizeof sei;
635 sei.lpFile = L"explorer.exe";
636 sei.lpParameters = wszParams;
637
638 if (ShellExecuteExW(&sei))
639 return S_OK;
640 else
641 return E_FAIL;
642}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
void Attach(T *lp)
Definition: atlalloc.h:162
wcscat
wcscpy
#define memset(x, y, z)
Definition: compat.h:39
#define SEE_MASK_WAITFORINPUTIDLE
Definition: shellapi.h:52
static BOOL ILIsSingle(LPCITEMIDLIST pidl)
Definition: shellutils.h:711
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2723
LPCWSTR lpParameters
Definition: shellapi.h:339

Referenced by CFindFolderContextMenu::InvokeCommand(), and CShellLink::OnCommand().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )