ReactOS 0.4.16-dev-1515-g853b446
CCommonFolder< TSelf, TItemId, TExtractIcon > Class Template Reference

#include <foldercommon.h>

Inheritance diagram for CCommonFolder< TSelf, TItemId, TExtractIcon >:
Collaboration diagram for CCommonFolder< TSelf, TItemId, TExtractIcon >:

Public Member Functions

 CCommonFolder ()
 
virtual ~CCommonFolder ()
 
STDMETHODIMP ParseDisplayName (HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, ULONG *pdwAttributes) override
 
STDMETHOD() EnumObjects (HWND hwndOwner, SHCONTF grfFlags, IEnumIDList **ppenumIDList) PURE
 
STDMETHODIMP BindToObject (LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvOut) override
 
STDMETHODIMP BindToStorage (LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvObj) override
 
STDMETHODIMP CompareIDs (LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
 
STDMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, void **ppvOut) override
 
STDMETHODIMP GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, SFGAOF *rgfInOut) override
 
STDMETHODIMP GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, void **ppvOut) override
 
STDMETHODIMP GetDisplayNameOf (LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *lpName) override
 
STDMETHODIMP SetNameOf (HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST *ppidlOut) override
 
STDMETHODIMP GetDefaultSearchGUID (GUID *lpguid) override
 
STDMETHODIMP EnumSearches (IEnumExtraSearch **ppenum) override
 
STDMETHODIMP GetDefaultColumn (DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) override
 
STDMETHOD() GetDefaultColumnState (UINT iColumn, SHCOLSTATEF *pcsFlags) PURE
 
STDMETHOD() GetDetailsEx (LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) PURE
 
STDMETHOD() GetDetailsOf (LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) PURE
 
STDMETHOD() MapColumnToSCID (UINT iColumn, SHCOLUMNID *pscid) PURE
 
STDMETHODIMP GetClassID (CLSID *lpClassId) override
 
STDMETHODIMP Initialize (PCIDLIST_ABSOLUTE pidl) override
 
STDMETHODIMP GetCurFolder (PIDLIST_ABSOLUTE *pidl) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from IShellFolder2
HRESULT GetDefaultSearchGUID ([out] GUID *lpguid)
 
HRESULT EnumSearches ([out] IEnumExtraSearch **ppenum)
 
HRESULT GetDefaultColumn ([in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay)
 
HRESULT GetDefaultColumnState ([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
 
HRESULT GetDetailsEx ([in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv)
 
HRESULT GetDetailsOf ([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
 
HRESULT MapColumnToSCID ([in] UINT iColumn, [in] SHCOLUMNID *pscid)
 
- Public Member Functions inherited from IShellFolder
HRESULT ParseDisplayName ([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
 
HRESULT EnumObjects ([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
 
HRESULT BindToObject ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT BindToStorage ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj)
 
HRESULT CompareIDs ([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
 
HRESULT CreateViewObject ([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetAttributesOf ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
 
HRESULT GetUIObjectOf ([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetDisplayNameOf ([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
 
HRESULT SetNameOf ([in] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT GetCurFolder ([out] PIDLIST_ABSOLUTE *ppidl)
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidl)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 

Static Public Member Functions

static HRESULT CALLBACK DefCtxMenuCallback (IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Protected Member Functions

STDMETHOD() InternalBindToObject (PWSTR path, const TItemId *info, LPITEMIDLIST first, LPCITEMIDLIST rest, LPITEMIDLIST fullPidl, LPBC pbcReserved, IShellFolder **ppsfChild) PURE
 
STDMETHOD() ResolveSymLink (const TItemId *info, LPITEMIDLIST *fullPidl)
 
STDMETHOD() CompareName (LPARAM lParam, const TItemId *first, const TItemId *second)
 
STDMETHOD() CompareIDs (LPARAM lParam, const TItemId *first, const TItemId *second) PURE
 
 STDMETHOD_ (ULONG, ConvertAttributes)(const TItemId *entry
 
 STDMETHOD_ (BOOL, IsFolder)(LPCITEMIDLIST pcidl)
 
 STDMETHOD_ (BOOL, IsFolder)(const TItemId *info) PURE
 
 STDMETHOD_ (BOOL, IsSymLink)(LPCITEMIDLIST pcidl)
 
 STDMETHOD_ (BOOL, IsSymLink)(const TItemId *info)
 
virtual HRESULT GetInfoFromPidl (LPCITEMIDLIST pcidl, const TItemId **pentry) PURE
 

Protected Attributes

WCHAR m_NtPath [MAX_PATH]
 
LPITEMIDLIST m_shellPidl
 
PULONG inMask PURE
 

Additional Inherited Members

- Public Types inherited from IShellFolder2
typedef struct IShellFolder2::SHCOLUMNIDLPSHCOLUMNID
 
typedef const SHCOLUMNIDLPCSHCOLUMNID
 
- Public Types inherited from IShellFolder
enum  tagSHGDN {
  SHGDN_NORMAL = 0 , SHGDN_INFOLDER = 1 , SHGDN_FOREDITING = 0x1000 , SHGDN_INCLUDE_NONFILESYS = 0x2000 ,
  SHGDN_FORADDRESSBAR = 0x4000 , SHGDN_FORPARSING = 0x8000
}
 
enum  tagSHCONTF {
  SHCONTF_FOLDERS = 32 , SHCONTF_NONFOLDERS = 64 , SHCONTF_INCLUDEHIDDEN = 128 , SHCONTF_INIT_ON_FIRST_NEXT = 256 ,
  SHCONTF_NETPRINTERSRCH = 512 , SHCONTF_SHAREABLE = 1024 , SHCONTF_STORAGE = 2048 , SHCONTF_NAVIGATION_ENUM = 0x01000 ,
  SHCONTF_FASTITEMS = 0x02000 , SHCONTF_FLATLIST = 0x04000 , SHCONTF_ENABLE_ASYNC = 0x08000 , SHCONTF_INCLUDESUPERHIDDEN = 0x10000
}
 
typedef IShellFolderLPSHELLFOLDER
 
typedef enum IShellFolder::tagSHGDN SHGNO
 
typedef DWORD SHGDNF
 
typedef DWORD SHCONTF
 
typedef ULONG SFGAOF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IPersistFolder2
typedef IPersistFolder2LPPERSISTFOLDER2
 
- Public Types inherited from IPersistFolder
typedef IPersistFolderLPPERSISTFOLDER
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

template<class TSelf, typename TItemId, class TExtractIcon>
class CCommonFolder< TSelf, TItemId, TExtractIcon >

Definition at line 60 of file foldercommon.h.

Constructor & Destructor Documentation

◆ CCommonFolder()

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::CCommonFolder ( )
inline

Definition at line 72 of file foldercommon.h.

72 :
74 {
75 }
LPITEMIDLIST m_shellPidl
Definition: foldercommon.h:68
#define NULL
Definition: types.h:112

◆ ~CCommonFolder()

template<class TSelf , typename TItemId , class TExtractIcon >
virtual CCommonFolder< TSelf, TItemId, TExtractIcon >::~CCommonFolder ( )
inlinevirtual

Definition at line 77 of file foldercommon.h.

78 {
79 if (m_shellPidl)
81 }
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045

Member Function Documentation

◆ BindToObject()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject ( LPCITEMIDLIST  pidl,
LPBC  pbcReserved,
REFIID  riid,
void **  ppvOut 
)
inlineoverride

Definition at line 168 of file foldercommon.h.

173 {
174 const TItemId * info;
175
176 if (IsEqualIID(riid, IID_IShellFolder))
177 {
178 HRESULT hr = GetInfoFromPidl(pidl, &info);
180 return hr;
181
183
184 StringCbCopyW(path, sizeof(path), m_NtPath);
185 PathAppendW(path, info->entryName);
186
188 LPCITEMIDLIST rest = ILGetNext(pidl);
189
191
192 CComPtr<IShellFolder> psfChild;
193 hr = InternalBindToObject(path, info, first, rest, fullPidl, pbcReserved, &psfChild);
194
195 ILFree(fullPidl);
196 ILFree(first);
197
198 if (FAILED(hr))
199 return hr;
200
201 if (hr == S_FALSE)
202 return S_OK;
203
204 if (rest->mkid.cb > 0)
205 {
206 return psfChild->BindToObject(rest, pbcReserved, riid, ppvOut);
207 }
208
209 return psfChild->QueryInterface(riid, ppvOut);
210 }
211
212 return E_NOTIMPL;
213 }
STDMETHOD() InternalBindToObject(PWSTR path, const TItemId *info, LPITEMIDLIST first, LPCITEMIDLIST rest, LPITEMIDLIST fullPidl, LPBC pbcReserved, IShellFolder **ppsfChild) PURE
virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId **pentry) PURE
WCHAR m_NtPath[MAX_PATH]
Definition: foldercommon.h:66
#define E_NOTIMPL
Definition: ddrawi.h:99
#define MAX_PATH
Definition: compat.h:34
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
const GLint * first
Definition: glext.h:5794
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define PathAppendW
Definition: pathcch.h:310
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:263
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:971
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT hr
Definition: shlfolder.c:183
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
#define S_FALSE
Definition: winerror.h:3452
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ BindToStorage()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToStorage ( LPCITEMIDLIST  pidl,
LPBC  pbcReserved,
REFIID  riid,
void **  ppvObj 
)
inlineoverride

Definition at line 233 of file foldercommon.h.

238 {
240 return E_NOTIMPL;
241 }
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15

◆ CompareIDs() [1/2]

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareIDs ( LPARAM  lParam,
const TItemId *  first,
const TItemId *  second 
)
protected

◆ CompareIDs() [2/2]

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareIDs ( LPARAM  lParam,
LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)
inlineoverride

Definition at line 243 of file foldercommon.h.

247 {
248 HRESULT hr;
249
250 TRACE("CompareIDs %d\n", lParam);
251
252 const TItemId * id1;
253 hr = GetInfoFromPidl(pidl1, &id1);
254 if (FAILED(hr))
255 return E_INVALIDARG;
256
257 const TItemId * id2;
258 hr = GetInfoFromPidl(pidl2, &id2);
259 if (FAILED(hr))
260 return E_INVALIDARG;
261
262 hr = CompareIDs(lParam, id1, id2);
263 if (hr != S_EQUAL)
264 return hr;
265
266 // The wollowing snipped is basically SHELL32_CompareChildren
267
268 PUIDLIST_RELATIVE rest1 = ILGetNext(pidl1);
269 PUIDLIST_RELATIVE rest2 = ILGetNext(pidl2);
270
271 bool isEmpty1 = (rest1->mkid.cb == 0);
272 bool isEmpty2 = (rest2->mkid.cb == 0);
273
274 if (isEmpty1 || isEmpty2)
275 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
276
277 LPCITEMIDLIST first1 = ILCloneFirst(pidl1);
278 if (!first1)
279 return E_OUTOFMEMORY;
280
281 CComPtr<IShellFolder> psfNext;
282 hr = BindToObject(first1, NULL, IID_PPV_ARG(IShellFolder, &psfNext));
284 return hr;
285
286 return psfNext->CompareIDs(lParam, rest1, rest2);
287 }
STDMETHODIMP CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
Definition: foldercommon.h:243
STDMETHODIMP BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvOut) override
Definition: foldercommon.h:168
LPARAM lParam
Definition: combotst.c:139
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:678
#define S_EQUAL
Definition: shellutils.h:676
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55
#define TRACE(s)
Definition: solgame.cpp:4
#define IID_PPV_ARG(Itype, ppType)

◆ CompareName()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareName ( LPARAM  lParam,
const TItemId *  first,
const TItemId *  second 
)
inlineprotected

Definition at line 290 of file foldercommon.h.

294 {
295 bool f1 = IsFolder(first);
296 bool f2 = IsFolder(second);
297
299 if (hr != S_EQUAL)
300 return hr;
301
302 bool canonical = (lParam & 0xFFFF0000) == SHCIDS_CANONICALONLY;
303 if (canonical)
304 {
305 // Shortcut: avoid comparing contents if not necessary when the results are not for display.
306 hr = MAKE_COMPARE_HRESULT(second->entryNameLength - first->entryNameLength);
307 if (hr != S_EQUAL)
308 return hr;
309
310 int minlength = min(first->entryNameLength, second->entryNameLength);
311 if (minlength > 0)
312 {
313 hr = MAKE_COMPARE_HRESULT(memcmp(first->entryName, second->entryName, minlength));
314 if (hr != S_EQUAL)
315 return hr;
316 }
317
318 return S_EQUAL;
319 }
320
321 int minlength = min(first->entryNameLength, second->entryNameLength);
322 if (minlength > 0)
323 {
324 hr = MAKE_COMPARE_HRESULT(StrCmpNW(first->entryName, second->entryName, minlength / sizeof(WCHAR)));
325 if (hr != S_EQUAL)
326 return hr;
327 }
328
329 return MAKE_COMPARE_HRESULT(second->entryNameLength - first->entryNameLength);
330 }
static BOOL IsFolder(LPCITEMIDLIST pidl)
Definition: CRecycleBin.cpp:84
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:500
#define min(a, b)
Definition: monoChain.cc:55
#define f2(x, y, z)
Definition: sha1.c:31
#define f1(x, y, z)
Definition: sha1.c:30

◆ CreateViewObject()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
void **  ppvOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 333 of file foldercommon.h.

337 {
338 if (!IsEqualIID(riid, IID_IShellView))
339 return E_NOINTERFACE;
340
341 _CComObject<CFolderViewCB> *pcb;
342
343 HRESULT hr = _CComObject<CFolderViewCB>::CreateInstance(&pcb);
344 if (FAILED(hr))
345 return hr;
346
347 pcb->AddRef();
348
349 SFV_CREATE sfv;
350 sfv.cbSize = sizeof(sfv);
351 sfv.pshf = this;
352 sfv.psvOuter = NULL;
353 sfv.psfvcb = pcb;
354
356
358 if (FAILED(hr))
359 return hr;
360
361 pcb->Initialize(view);
362
363 pcb->Release();
364
365 *ppvOut = view;
366
367 return S_OK;
368 }
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4814
ULONG AddRef()
ULONG Release()
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1365
IShellView * psvOuter
Definition: shlobj.h:1364
UINT cbSize
Definition: shlobj.h:1362
IShellFolder * pshf
Definition: shlobj.h:1363
#define E_NOINTERFACE
Definition: winerror.h:3480

◆ DefCtxMenuCallback()

template<class TSelf , typename TItemId , class TExtractIcon >
static HRESULT CALLBACK CCommonFolder< TSelf, TItemId, TExtractIcon >::DefCtxMenuCallback ( IShellFolder ,
HWND  ,
IDataObject ,
UINT  uMsg,
WPARAM  ,
LPARAM   
)
inlinestatic

Definition at line 694 of file foldercommon.h.

695 {
696 switch (uMsg)
697 {
699 return S_OK;
700
703 case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default
704 return S_FALSE;
705 }
706 return E_NOTIMPL;
707 }
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_INVOKECOMMANDEX
Definition: precomp.h:46
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45

◆ EnumObjects()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::EnumObjects ( HWND  hwndOwner,
SHCONTF  grfFlags,
IEnumIDList **  ppenumIDList 
)

Implements IShellFolder.

◆ EnumSearches()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::EnumSearches ( IEnumExtraSearch **  ppenum)
inlineoverride

Implements IShellFolder2.

Definition at line 585 of file foldercommon.h.

586 {
588 return E_NOTIMPL;
589 }

◆ GetAttributesOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
SFGAOF rgfInOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 370 of file foldercommon.h.

374 {
375 const TItemId * info;
376
377 TRACE("GetAttributesOf %d\n", cidl);
378
379 if (cidl == 0)
380 {
381 *rgfInOut &= SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_BROWSABLE;
382 return S_OK;
383 }
384
385 for (int i = 0; i < (int)cidl; i++)
386 {
387 PCUITEMID_CHILD pidl = apidl[i];
388
389 HRESULT hr = GetInfoFromPidl(pidl, &info);
391 return hr;
392
393 // Update attributes.
394 *rgfInOut = ConvertAttributes(info, rgfInOut);
395 }
396
397 return S_OK;
398 }
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
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
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70

◆ GetClassID()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetClassID ( CLSID lpClassId)
inlineoverride

Implements IPersist.

Definition at line 622 of file foldercommon.h.

623 {
624 if (!lpClassId)
625 return E_POINTER;
626
627 *lpClassId = CLSID_NtObjectFolder;
628 return S_OK;
629 }
const GUID CLSID_NtObjectFolder
Definition: ntobjfolder.cpp:13
#define E_POINTER
Definition: winerror.h:3481

◆ GetCurFolder()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetCurFolder ( PIDLIST_ABSOLUTE pidl)
inlineoverride

Implements IPersistFolder2.

Definition at line 642 of file foldercommon.h.

643 {
644 if (pidl)
645 *pidl = ILClone(m_shellPidl);
646 if (!m_shellPidl)
647 return S_FALSE;
648 return S_OK;
649 }
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238

◆ GetDefaultColumn()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDefaultColumn ( DWORD  dwReserved,
ULONG pSort,
ULONG pDisplay 
)
inlineoverride

Implements IShellFolder2.

Definition at line 591 of file foldercommon.h.

595 {
596 if (pSort)
597 *pSort = 0;
598 if (pDisplay)
599 *pDisplay = 0;
600 return S_OK;
601 }

◆ GetDefaultColumnState()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDefaultColumnState ( UINT  iColumn,
SHCOLSTATEF pcsFlags 
)

Implements IShellFolder2.

◆ GetDefaultSearchGUID()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDefaultSearchGUID ( GUID lpguid)
inlineoverride

Implements IShellFolder2.

Definition at line 579 of file foldercommon.h.

580 {
582 return E_NOTIMPL;
583 }

◆ GetDetailsEx()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDetailsEx ( LPCITEMIDLIST  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)

◆ GetDetailsOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDetailsOf ( LPCITEMIDLIST  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)

◆ GetDisplayNameOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDisplayNameOf ( LPCITEMIDLIST  pidl,
SHGDNF  uFlags,
STRRET lpName 
)
inlineoverride

Definition at line 500 of file foldercommon.h.

504 {
505 const TItemId * info;
506
507 TRACE("GetDisplayNameOf %p\n", pidl);
508
509 HRESULT hr = GetInfoFromPidl(pidl, &info);
511 return hr;
512
514 {
515 hr = MakeStrRetFromString(info->entryName, info->entryNameLength, lpName);
517 return hr;
518 }
519
520 WCHAR path[MAX_PATH] = { 0 };
521
523 {
525 {
528 return hr;
529 }
530 }
531
532 PathAppendW(path, info->entryName);
533
534 LPCITEMIDLIST pidlNext = ILGetNext(pidl);
535 if (pidlNext && pidlNext->mkid.cb > 0)
536 {
537 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
538
539 CComPtr<IShellFolder> psfChild;
540 hr = BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
542 return hr;
543
545 STRRET childName;
546
547 hr = psfChild->GetDisplayNameOf(pidlNext, uFlags | SHGDN_INFOLDER, &childName);
549 return hr;
550
551 hr = StrRetToBufW(&childName, pidlNext, temp, _countof(temp));
553 return hr;
554
556
557 ILFree(pidlFirst);
558 }
559
562 return hr;
563
564 return S_OK;
565 }
#define GET_SHGDN_RELATION(dwFlags)
Definition: precomp.h:53
#define GET_SHGDN_FOR(dwFlags)
Definition: precomp.h:52
HRESULT INLINE GetFullName(PCIDLIST_ABSOLUTE pidl, DWORD uFlags, PWSTR strName, DWORD cchName)
Definition: util.h:29
HRESULT INLINE MakeStrRetFromString(LPCWSTR string, DWORD cbLength, STRRET *str)
Definition: util.h:7
UINT uFlags
Definition: api.c:59
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
static calc_node_t temp
Definition: rpn_ieee.c:38
#define _countof(array)
Definition: sndvol32.h:70
_In_ LPCSTR lpName
Definition: winbase.h:2830

◆ GetInfoFromPidl()

template<class TSelf , typename TItemId , class TExtractIcon >
virtual HRESULT CCommonFolder< TSelf, TItemId, TExtractIcon >::GetInfoFromPidl ( LPCITEMIDLIST  pcidl,
const TItemId **  pentry 
)
protectedvirtual

Reimplemented in CNtObjectFolder, and CRegistryFolder.

◆ GetUIObjectOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
REFIID  riid,
UINT prgfInOut,
void **  ppvOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 400 of file foldercommon.h.

407 {
408 DWORD res;
409 TRACE("GetUIObjectOf\n");
410
411 if (IsEqualIID(riid, IID_IContextMenu) ||
412 IsEqualIID(riid, IID_IContextMenu2) ||
413 IsEqualIID(riid, IID_IContextMenu3))
414 {
415 CComPtr<IContextMenu> pcm;
416
417 HKEY keys[1];
418
420
421 CComPtr<IShellFolder> psfParent = this;
422
424
425 UINT nkeys = 0;
426 if (cidl == 1 && IsSymLink(apidl[0]))
427 {
428 const TItemId * info;
429 HRESULT hr = GetInfoFromPidl(apidl[0], &info);
430 if (FAILED(hr))
431 return hr;
432
435 if (FAILED(hr))
436 return hr;
437
438 CComPtr<IShellFolder> psfTarget;
440 if (FAILED(hr))
441 {
442 ILFree(target);
443 return hr;
444 }
445
448 psfParent = psfTarget;
449
450 apidl = &child;
451 }
452
453 if (cidl == 1 && IsFolder(apidl[0]))
454 {
455 res = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Folder", 0, KEY_READ, &keys[0]);
456 if (!NT_SUCCESS(res))
457 return HRESULT_FROM_WIN32(res);
458 nkeys++;
459 }
460
461 HRESULT hr = CDefFolderMenu_Create2(parent, hwndOwner, cidl, apidl, psfParent, DefCtxMenuCallback, nkeys, keys, &pcm);
462 for (UINT i = 0; i < nkeys; ++i)
465 return hr;
466
467 return pcm->QueryInterface(riid, ppvOut);
468 }
469
470 if (IsEqualIID(riid, IID_IExtractIconW))
471 {
472 return ShellObjectCreatorInit<TExtractIcon>(m_NtPath, m_shellPidl, cidl, apidl, riid, ppvOut);
473 }
474
476 {
477 return CIDLData_CreateFromIDArray(m_shellPidl, cidl, apidl, (IDataObject**)ppvOut);
478 }
479
480 if (IsEqualIID(riid, IID_IQueryAssociations))
481 {
482 if (cidl == 1 && IsFolder(apidl[0]))
483 {
484 CComPtr<IQueryAssociations> pqa;
485 HRESULT hr = AssocCreate(CLSID_QueryAssociations, IID_PPV_ARG(IQueryAssociations, &pqa));
487 return hr;
488
489 hr = pqa->Init(ASSOCF_INIT_DEFAULTTOFOLDER, L"NTObjShEx.NTDirectory", NULL, hwndOwner);
491 return hr;
492
493 return pqa->QueryInterface(riid, ppvOut);
494 }
495 }
496
497 return E_NOTIMPL;
498 }
HRESULT WINAPI CDefFolderMenu_Create2(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
#define RegCloseKey(hKey)
Definition: registry.h:49
STDMETHOD() ResolveSymLink(const TItemId *info, LPITEMIDLIST *fullPidl)
Definition: foldercommon.h:225
static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
Definition: foldercommon.h:694
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
const UINT * keys
Definition: locale.c:416
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
Definition: assoc.c:99
#define L(x)
Definition: resources.c:13
r parent
Definition: btrfs.c:3010
#define IsSymLink(Fcb)
Definition: ext2fs.h:285
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
GLenum target
Definition: glext.h:7315
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
static HWND child
Definition: cursoricon.c:298
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
const GUID IID_IDataObject
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1498
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2419
@ ASSOCF_INIT_DEFAULTTOFOLDER
Definition: shlwapi.h:595
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:211
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

◆ Initialize()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::Initialize ( PCIDLIST_ABSOLUTE  pidl)
inlineoverride

Implements IPersistFolder.

Definition at line 632 of file foldercommon.h.

633 {
634 m_shellPidl = ILClone(pidl);
635
636 StringCbCopyW(m_NtPath, sizeof(m_NtPath), L"\\");
637
638 return S_OK;
639 }

◆ InternalBindToObject()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::InternalBindToObject ( PWSTR  path,
const TItemId *  info,
LPITEMIDLIST  first,
LPCITEMIDLIST  rest,
LPITEMIDLIST  fullPidl,
LPBC  pbcReserved,
IShellFolder **  ppsfChild 
)
protected

◆ MapColumnToSCID()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::MapColumnToSCID ( UINT  iColumn,
SHCOLUMNID pscid 
)

Implements IShellFolder2.

◆ ParseDisplayName()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbcReserved,
LPOLESTR  lpszDisplayName,
ULONG pchEaten,
LPITEMIDLIST ppidl,
ULONG pdwAttributes 
)
inlineoverride

Definition at line 84 of file foldercommon.h.

91 {
92 if (!ppidl)
93 return E_POINTER;
94
95 if (pchEaten)
96 *pchEaten = 0;
97
98 if (pdwAttributes)
99 *pdwAttributes = 0;
100
101 TRACE("CCommonFolder::ParseDisplayName name=%S (ntPath=%S)\n", lpszDisplayName, m_NtPath);
102
103 const TItemId * info;
104 IEnumIDList * it;
106 if (FAILED(hr))
107 return hr;
108
109 PWSTR end = StrChrW(lpszDisplayName, '\\');
110 int length = end ? end - lpszDisplayName : wcslen(lpszDisplayName);
111
112 while (TRUE)
113 {
114 hr = it->Next(1, ppidl, NULL);
115
116 if (FAILED(hr))
117 return hr;
118
119 if (hr != S_OK)
121
122 hr = GetInfoFromPidl(*ppidl, &info);
124 return hr;
125
126 if (StrCmpNW(info->entryName, lpszDisplayName, length) == 0)
127 break;
128 }
129
130 // if has remaining path to parse (and the path didn't just terminate in a backslash)
131 if (end && wcslen(end) > 1)
132 {
133 CComPtr<IShellFolder> psfChild;
134 hr = BindToObject(*ppidl, pbcReserved, IID_PPV_ARG(IShellFolder, &psfChild));
136 return hr;
137
139 hr = psfChild->ParseDisplayName(hwndOwner, pbcReserved, end + 1, pchEaten, &child, pdwAttributes);
140 if (FAILED(hr))
141 return hr;
142
143 LPITEMIDLIST old = *ppidl;
144 *ppidl = ILCombine(old, child);
145 ILFree(old);
146
147 // Count the path separator
148 if (pchEaten)
149 (*pchEaten) += 1;
150 }
151 else
152 {
153 if (pdwAttributes)
154 *pdwAttributes = ConvertAttributes(info, pdwAttributes);
155 }
156
157 if (pchEaten)
158 *pchEaten += wcslen(info->entryName);
159
160 return S_OK;
161 }
STDMETHOD() EnumObjects(HWND hwndOwner, SHCONTF grfFlags, IEnumIDList **ppenumIDList) PURE
#define TRUE
Definition: types.h:120
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:464
GLuint GLuint end
Definition: gl.h:1545
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] PITEMID_CHILD *rgelt, [out] ULONG *pceltFetched)
@ SHCONTF_NONFOLDERS
Definition: shobjidl.idl:174
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
uint16_t * PWSTR
Definition: typedefs.h:56

◆ ResolveSymLink()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::ResolveSymLink ( const TItemId *  info,
LPITEMIDLIST fullPidl 
)
inlineprotected

Definition at line 225 of file foldercommon.h.

228 {
229 return E_NOTIMPL;
230 }

◆ SetNameOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::SetNameOf ( HWND  hwnd,
LPCITEMIDLIST  pidl,
LPCOLESTR  lpszName,
SHGDNF  uFlags,
LPITEMIDLIST ppidlOut 
)
inlineoverride

Definition at line 567 of file foldercommon.h.

573 {
575 return E_NOTIMPL;
576 }

◆ STDMETHOD_() [1/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsFolder   
) const
protected

◆ STDMETHOD_() [2/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsFolder   
)
inlineprotected

Definition at line 662 of file foldercommon.h.

663 {
664 const TItemId * info;
665
666 HRESULT hr = GetInfoFromPidl(pcidl, &info);
667 if (FAILED(hr))
668 return hr;
669
670 return IsFolder(info);
671 }

◆ STDMETHOD_() [3/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsSymLink   
) const
inlineprotected

Definition at line 686 of file foldercommon.h.

687 {
688 return FALSE;
689 }
#define FALSE
Definition: types.h:117

◆ STDMETHOD_() [4/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsSymLink   
)
inlineprotected

Definition at line 675 of file foldercommon.h.

676 {
677 const TItemId * info;
678
679 HRESULT hr = GetInfoFromPidl(pcidl, &info);
680 if (FAILED(hr))
681 return hr;
682
683 return IsSymLink(info);
684 }

◆ STDMETHOD_() [5/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( ULONG  ,
ConvertAttributes   
) const
protected

Member Data Documentation

◆ m_NtPath

template<class TSelf , typename TItemId , class TExtractIcon >
WCHAR CCommonFolder< TSelf, TItemId, TExtractIcon >::m_NtPath[MAX_PATH]
protected

Definition at line 66 of file foldercommon.h.

◆ m_shellPidl

template<class TSelf , typename TItemId , class TExtractIcon >
LPITEMIDLIST CCommonFolder< TSelf, TItemId, TExtractIcon >::m_shellPidl
protected

Definition at line 68 of file foldercommon.h.

◆ PURE

template<class TSelf , typename TItemId , class TExtractIcon >
PULONG inMask CCommonFolder< TSelf, TItemId, TExtractIcon >::PURE
protected

Definition at line 660 of file foldercommon.h.


The documentation for this class was generated from the following file: