/** * Create a Shell Item from relative name. * Complements the SHCreateItemFromRelativeName() provided by the Shell with an IShellFolder argument. */ HRESULT SHCreateItemFromRelativeName(IShellFolder* pFolder, LPCWSTR pszName, IBindCtx* pbc, REFIID riid, LPVOID* ppRetVal) { ATLASSERT(pFolder); ATLASSERT(ppRetVal!=NULL); ATLASSERT(*ppRetVal==NULL); if( pFolder == NULL || pszName == NULL ) return E_INVALIDARG; CComQIPtr<IPersistFolder2> spPersist = pFolder; if( spPersist == NULL ) return E_FAIL; CPidl pidlFolder; HR( spPersist->GetCurFolder((PIDLIST_ABSOLUTE*) &pidlFolder.m_p) ); CPidl pidlName; HR( pFolder->ParseDisplayName(NULL, pbc, const_cast<LPWSTR>(pszName), NULL, &pidlName, NULL) ); return ::SHCreateItemFromIDList(pidlFolder + pidlName, riid, ppRetVal); }