//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: idlhelp.cpp // //-------------------------------------------------------------------------- #include "pch.h" #pragma hdrstop #include // ILFree(), etc #include "idlhelp.h" #include "folder.h" HRESULT IsOfflineFilesFolderID( LPCITEMIDLIST pidl ) { LPITEMIDLIST pidlOfflineFilesFolder; HRESULT hr = COfflineFilesFolder::CreateIDList(&pidlOfflineFilesFolder); if (SUCCEEDED(hr)) { if (ILIsEqual(pidlOfflineFilesFolder, pidl)) hr = S_OK; else hr = S_FALSE; ILFree(pidlOfflineFilesFolder); } return hr; } HRESULT BindToObject( IShellFolder *psf, REFIID riid, LPCITEMIDLIST pidl, void **ppvOut ) { HRESULT hr = NOERROR; IShellFolder *psfRelease = NULL; if (!psf) { hr = SHGetDesktopFolder(&psf); if (SUCCEEDED(hr)) { psfRelease = psf; } } if (SUCCEEDED(hr)) { if (!pidl || ILIsEmpty(pidl)) hr = psf->QueryInterface(riid, ppvOut); else hr = psf->BindToObject(pidl, NULL, riid, ppvOut); } if (psfRelease) psfRelease->Release(); return hr; } HRESULT BindToIDListParent( LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *ppidlLast ) { HRESULT hr; LPITEMIDLIST pidlParent = ILClone(pidl); if (pidlParent) { ILRemoveLastID(pidlParent); hr = ::BindToObject(NULL, riid, (LPCITEMIDLIST)pidlParent, ppv); if (SUCCEEDED(hr)) { if (ppidlLast) *ppidlLast = ILFindLastID(pidl); } ILFree(pidlParent); } else hr = E_OUTOFMEMORY; return hr; }