ReactOS 0.4.15-dev-7659-ga55345b
foldercommon.h
Go to the documentation of this file.
1/*
2 * PROJECT: NT Object Namespace shell extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Folder view class header and implementation
5 * COPYRIGHT: Copyright 2015-2017 David Quintana <gigaherz@gmail.com>
6 */
7
8#pragma once
9
10extern const GUID CLSID_NtObjectFolder;
11
13 public CComObjectRootEx<CComMultiThreadModelNoCS>,
14 public IShellFolderViewCB
15{
17
18public:
19
21 virtual ~CFolderViewCB() {}
22
24 {
25 switch (uMsg)
26 {
28 {
30 *pViewMode = FVM_DETAILS;
31 return S_OK;
32 }
33
35 return S_FALSE;
36
38 return S_OK;
39 }
40
41 DbgPrint("MessageSFVCB unimplemented %d %08x %08x\n", uMsg, wParam, lParam);
42 return E_NOTIMPL;
43 }
44
46 {
47 m_View = psv;
48 return S_OK;
49 }
50
53
55 COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
57};
58
59template<class TSelf, typename TItemId, class TExtractIcon>
61 public CComObjectRootEx<CComMultiThreadModelNoCS>,
62 public IShellFolder2,
63 public IPersistFolder2
64{
65protected:
66 WCHAR m_NtPath[MAX_PATH];
67
69
70public:
71
73 m_shellPidl(NULL)
74 {
75 }
76
78 {
79 if (m_shellPidl)
80 ILFree(m_shellPidl);
81 }
82
83 // IShellFolder
85 HWND hwndOwner,
86 LPBC pbcReserved,
87 LPOLESTR lpszDisplayName,
88 ULONG *pchEaten,
89 LPITEMIDLIST *ppidl,
90 ULONG *pdwAttributes)
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;
105 HRESULT hr = EnumObjects(hwndOwner, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &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 }
162
164 HWND hwndOwner,
165 SHCONTF grfFlags,
166 IEnumIDList **ppenumIDList) PURE;
167
169 LPCITEMIDLIST pidl,
170 LPBC pbcReserved,
171 REFIID riid,
172 void **ppvOut)
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
190 LPITEMIDLIST fullPidl = ILCombine(m_shellPidl, first);
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 }
214
215protected:
217 PWSTR path,
218 const TItemId * info,
220 LPCITEMIDLIST rest,
221 LPITEMIDLIST fullPidl,
222 LPBC pbcReserved,
223 IShellFolder** ppsfChild) PURE;
224
226 const TItemId * info,
227 LPITEMIDLIST * fullPidl)
228 {
229 return E_NOTIMPL;
230 }
231
232public:
233
235 LPCITEMIDLIST pidl,
236 LPBC pbcReserved,
237 REFIID riid,
238 void **ppvObj)
239 {
241 return E_NOTIMPL;
242 }
243
246 LPCITEMIDLIST pidl1,
247 LPCITEMIDLIST pidl2)
248 {
249 HRESULT hr;
250
251 TRACE("CompareIDs %d\n", lParam);
252
253 const TItemId * id1;
254 hr = GetInfoFromPidl(pidl1, &id1);
255 if (FAILED(hr))
256 return E_INVALIDARG;
257
258 const TItemId * id2;
259 hr = GetInfoFromPidl(pidl2, &id2);
260 if (FAILED(hr))
261 return E_INVALIDARG;
262
263 hr = CompareIDs(lParam, id1, id2);
264 if (hr != S_EQUAL)
265 return hr;
266
267 // The wollowing snipped is basically SHELL32_CompareChildren
268
269 PUIDLIST_RELATIVE rest1 = ILGetNext(pidl1);
270 PUIDLIST_RELATIVE rest2 = ILGetNext(pidl2);
271
272 bool isEmpty1 = (rest1->mkid.cb == 0);
273 bool isEmpty2 = (rest2->mkid.cb == 0);
274
275 if (isEmpty1 || isEmpty2)
276 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
277
278 LPCITEMIDLIST first1 = ILCloneFirst(pidl1);
279 if (!first1)
280 return E_OUTOFMEMORY;
281
282 CComPtr<IShellFolder> psfNext;
283 hr = BindToObject(first1, NULL, IID_PPV_ARG(IShellFolder, &psfNext));
285 return hr;
286
287 return psfNext->CompareIDs(lParam, rest1, rest2);
288 }
289
290protected:
293 const TItemId * first,
294 const TItemId * second)
295 {
296 bool f1 = IsFolder(first);
297 bool f2 = IsFolder(second);
298
300 if (hr != S_EQUAL)
301 return hr;
302
303 bool canonical = (lParam & 0xFFFF0000) == SHCIDS_CANONICALONLY;
304 if (canonical)
305 {
306 // Shortcut: avoid comparing contents if not necessary when the results are not for display.
307 hr = MAKE_COMPARE_HRESULT(second->entryNameLength - first->entryNameLength);
308 if (hr != S_EQUAL)
309 return hr;
310
311 int minlength = min(first->entryNameLength, second->entryNameLength);
312 if (minlength > 0)
313 {
314 hr = MAKE_COMPARE_HRESULT(memcmp(first->entryName, second->entryName, minlength));
315 if (hr != S_EQUAL)
316 return hr;
317 }
318
319 return S_EQUAL;
320 }
321
322 int minlength = min(first->entryNameLength, second->entryNameLength);
323 if (minlength > 0)
324 {
325 hr = MAKE_COMPARE_HRESULT(StrCmpNW(first->entryName, second->entryName, minlength / sizeof(WCHAR)));
326 if (hr != S_EQUAL)
327 return hr;
328 }
329
330 return MAKE_COMPARE_HRESULT(second->entryNameLength - first->entryNameLength);
331 }
332
333public:
335 HWND hwndOwner,
336 REFIID riid,
337 void **ppvOut)
338 {
339 if (!IsEqualIID(riid, IID_IShellView))
340 return E_NOINTERFACE;
341
342 _CComObject<CFolderViewCB> *pcb;
343
344 HRESULT hr = _CComObject<CFolderViewCB>::CreateInstance(&pcb);
345 if (FAILED(hr))
346 return hr;
347
348 pcb->AddRef();
349
350 SFV_CREATE sfv;
351 sfv.cbSize = sizeof(sfv);
352 sfv.pshf = this;
353 sfv.psvOuter = NULL;
354 sfv.psfvcb = pcb;
355
357
359 if (FAILED(hr))
360 return hr;
361
362 pcb->Initialize(view);
363
364 pcb->Release();
365
366 *ppvOut = view;
367
368 return S_OK;
369 }
370
372 UINT cidl,
374 SFGAOF *rgfInOut)
375 {
376 const TItemId * info;
377
378 TRACE("GetAttributesOf %d\n", cidl);
379
380 if (cidl == 0)
381 {
382 *rgfInOut &= SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_BROWSABLE;
383 return S_OK;
384 }
385
386 for (int i = 0; i < (int)cidl; i++)
387 {
388 PCUITEMID_CHILD pidl = apidl[i];
389
390 HRESULT hr = GetInfoFromPidl(pidl, &info);
392 return hr;
393
394 // Update attributes.
395 *rgfInOut = ConvertAttributes(info, rgfInOut);
396 }
397
398 return S_OK;
399 }
400
402 HWND hwndOwner,
403 UINT cidl,
405 REFIID riid,
406 UINT *prgfInOut,
407 void **ppvOut)
408 {
409 DWORD res;
410 TRACE("GetUIObjectOf\n");
411
412 if (IsEqualIID(riid, IID_IContextMenu) ||
413 IsEqualIID(riid, IID_IContextMenu2) ||
414 IsEqualIID(riid, IID_IContextMenu3))
415 {
416 CComPtr<IContextMenu> pcm;
417
418 HKEY keys[1];
419
420 LPITEMIDLIST parent = m_shellPidl;
421
422 CComPtr<IShellFolder> psfParent = this;
423
425
426 int nkeys = _countof(keys);
427 if (cidl == 1 && IsSymLink(apidl[0]))
428 {
429 const TItemId * info;
430 HRESULT hr = GetInfoFromPidl(apidl[0], &info);
431 if (FAILED(hr))
432 return hr;
433
435 hr = ResolveSymLink(info, &target);
436 if (FAILED(hr))
437 return hr;
438
439 CComPtr<IShellFolder> psfTarget;
441 if (FAILED(hr))
442 {
443 ILFree(target);
444 return hr;
445 }
446
449 psfParent = psfTarget;
450
451 apidl = &child;
452 }
453
454 if (cidl == 1 && IsFolder(apidl[0]))
455 {
456 res = RegOpenKey(HKEY_CLASSES_ROOT, L"Folder", keys + 0);
457 if (!NT_SUCCESS(res))
458 return HRESULT_FROM_NT(res);
459 }
460 else
461 {
462 nkeys = 0;
463 }
464
465 HRESULT hr = CDefFolderMenu_Create2(parent, hwndOwner, cidl, apidl, psfParent, DefCtxMenuCallback, nkeys, keys, &pcm);
467 return hr;
468
469 return pcm->QueryInterface(riid, ppvOut);
470 }
471
472 if (IsEqualIID(riid, IID_IExtractIconW))
473 {
474 return ShellObjectCreatorInit<TExtractIcon>(m_NtPath, m_shellPidl, cidl, apidl, riid, ppvOut);
475 }
476
478 {
479 return CIDLData_CreateFromIDArray(m_shellPidl, cidl, apidl, (IDataObject**)ppvOut);
480 }
481
482 if (IsEqualIID(riid, IID_IQueryAssociations))
483 {
484 if (cidl == 1 && IsFolder(apidl[0]))
485 {
486 CComPtr<IQueryAssociations> pqa;
487 HRESULT hr = AssocCreate(CLSID_QueryAssociations, IID_PPV_ARG(IQueryAssociations, &pqa));
489 return hr;
490
491 hr = pqa->Init(ASSOCF_INIT_DEFAULTTOFOLDER, L"NTObjShEx.NTDirectory", NULL, hwndOwner);
493 return hr;
494
495 return pqa->QueryInterface(riid, ppvOut);
496 }
497 }
498
499 return E_NOTIMPL;
500 }
501
503 LPCITEMIDLIST pidl,
505 STRRET *lpName)
506 {
507 const TItemId * info;
508
509 TRACE("GetDisplayNameOf %p\n", pidl);
510
511 HRESULT hr = GetInfoFromPidl(pidl, &info);
513 return hr;
514
515 if (GET_SHGDN_FOR(uFlags) & SHGDN_FOREDITING)
516 {
517 hr = MakeStrRetFromString(info->entryName, info->entryNameLength, lpName);
519 return hr;
520 }
521
522 WCHAR path[MAX_PATH] = { 0 };
523
524 if (GET_SHGDN_FOR(uFlags) & SHGDN_FORPARSING)
525 {
526 if (GET_SHGDN_RELATION(uFlags) != SHGDN_INFOLDER)
527 {
528 hr = GetFullName(m_shellPidl, uFlags, path, _countof(path));
530 return hr;
531 }
532 }
533
534 PathAppendW(path, info->entryName);
535
536 LPCITEMIDLIST pidlNext = ILGetNext(pidl);
537 if (pidlNext && pidlNext->mkid.cb > 0)
538 {
539 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
540
541 CComPtr<IShellFolder> psfChild;
542 hr = BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
544 return hr;
545
547 STRRET childName;
548
549 hr = psfChild->GetDisplayNameOf(pidlNext, uFlags | SHGDN_INFOLDER, &childName);
551 return hr;
552
553 hr = StrRetToBufW(&childName, pidlNext, temp, _countof(temp));
555 return hr;
556
558
559 ILFree(pidlFirst);
560 }
561
564 return hr;
565
566 return S_OK;
567 }
568
570 HWND hwnd,
571 LPCITEMIDLIST pidl,
572 LPCOLESTR lpszName,
574 LPITEMIDLIST *ppidlOut)
575 {
577 return E_NOTIMPL;
578 }
579
580 // IShellFolder2
582 GUID *lpguid)
583 {
585 return E_NOTIMPL;
586 }
587
589 IEnumExtraSearch **ppenum)
590 {
592 return E_NOTIMPL;
593 }
594
597 ULONG *pSort,
598 ULONG *pDisplay)
599 {
600 if (pSort)
601 *pSort = 0;
602 if (pDisplay)
603 *pDisplay = 0;
604 return S_OK;
605 }
606
608 UINT iColumn,
609 SHCOLSTATEF *pcsFlags) PURE;
610
612 LPCITEMIDLIST pidl,
613 const SHCOLUMNID *pscid,
614 VARIANT *pv) PURE;
615
617 LPCITEMIDLIST pidl,
618 UINT iColumn,
619 SHELLDETAILS *psd) PURE;
620
622 UINT iColumn,
623 SHCOLUMNID *pscid) PURE;
624
625 // IPersist
627 {
628 if (!lpClassId)
629 return E_POINTER;
630
631 *lpClassId = CLSID_NtObjectFolder;
632 return S_OK;
633 }
634
635 // IPersistFolder
637 {
638 m_shellPidl = ILClone(pidl);
639
640 StringCbCopyW(m_NtPath, sizeof(m_NtPath), L"\\");
641
642 return S_OK;
643 }
644
645 // IPersistFolder2
647 {
648 if (pidl)
649 *pidl = ILClone(m_shellPidl);
650 if (!m_shellPidl)
651 return S_FALSE;
652 return S_OK;
653 }
654
655 // Internal
656protected:
659 const TItemId * first,
660 const TItemId * second) PURE;
661
663 const TItemId * entry,
664 PULONG inMask) PURE;
665
667 {
668 const TItemId * info;
669
670 HRESULT hr = GetInfoFromPidl(pcidl, &info);
671 if (FAILED(hr))
672 return hr;
673
674 return IsFolder(info);
675 }
676
677 virtual BOOL STDMETHODCALLTYPE IsFolder(const TItemId * info) PURE;
678
680 {
681 const TItemId * info;
682
683 HRESULT hr = GetInfoFromPidl(pcidl, &info);
684 if (FAILED(hr))
685 return hr;
686
687 return IsSymLink(info);
688 }
689
690 virtual BOOL STDMETHODCALLTYPE IsSymLink(const TItemId * info)
691 {
692 return FALSE;
693 }
694
695 virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId ** pentry) PURE;
696
697public:
698 static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder * /*psf*/, HWND /*hwnd*/, IDataObject * /*pdtobj*/, UINT uMsg, WPARAM /*wParam*/, LPARAM /*lParam*/)
699 {
700 switch (uMsg)
701 {
703 return S_OK;
704
707 case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default
708 return S_FALSE;
709 }
710 return E_NOTIMPL;
711 }
712
715
716 BEGIN_COM_MAP(TSelf)
717 COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
718 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
720 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
721 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
723
724};
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:3844
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)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
const WCHAR * class
Definition: main.c:68
#define PURE
Definition: basetyps.h:64
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define UNIMPLEMENTED
Definition: debug.h:115
virtual HRESULT STDMETHODCALLTYPE CompareName(LPARAM lParam, const TItemId *first, const TItemId *second)
Definition: foldercommon.h:291
virtual HRESULT STDMETHODCALLTYPE MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid) PURE
virtual HRESULT STDMETHODCALLTYPE GetDefaultColumn(DWORD dwReserved, ULONG *pSort, ULONG *pDisplay)
Definition: foldercommon.h:595
virtual HRESULT STDMETHODCALLTYPE BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvOut)
Definition: foldercommon.h:168
virtual ~CCommonFolder()
Definition: foldercommon.h:77
LPITEMIDLIST m_shellPidl
Definition: foldercommon.h:68
virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) PURE
virtual HRESULT STDMETHODCALLTYPE GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, SFGAOF *rgfInOut)
Definition: foldercommon.h:371
virtual HRESULT STDMETHODCALLTYPE ResolveSymLink(const TItemId *info, LPITEMIDLIST *fullPidl)
Definition: foldercommon.h:225
virtual BOOL STDMETHODCALLTYPE IsFolder(const TItemId *info) PURE
virtual HRESULT STDMETHODCALLTYPE CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: foldercommon.h:244
virtual HRESULT STDMETHODCALLTYPE EnumObjects(HWND hwndOwner, SHCONTF grfFlags, IEnumIDList **ppenumIDList) PURE
virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *lpClassId)
Definition: foldercommon.h:626
virtual BOOL STDMETHODCALLTYPE IsFolder(LPCITEMIDLIST pcidl)
Definition: foldercommon.h:666
virtual HRESULT STDMETHODCALLTYPE GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) PURE
virtual ULONG STDMETHODCALLTYPE ConvertAttributes(const TItemId *entry, PULONG inMask) PURE
virtual HRESULT STDMETHODCALLTYPE GetDefaultSearchGUID(GUID *lpguid)
Definition: foldercommon.h:581
virtual HRESULT STDMETHODCALLTYPE Initialize(PCIDLIST_ABSOLUTE pidl)
Definition: foldercommon.h:636
virtual HRESULT STDMETHODCALLTYPE BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvObj)
Definition: foldercommon.h:234
virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, ULONG *pdwAttributes)
Definition: foldercommon.h:84
virtual HRESULT STDMETHODCALLTYPE GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) PURE
virtual HRESULT STDMETHODCALLTYPE CompareIDs(LPARAM lParam, const TItemId *first, const TItemId *second) PURE
virtual HRESULT STDMETHODCALLTYPE SetNameOf(HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST *ppidlOut)
Definition: foldercommon.h:569
static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
Definition: foldercommon.h:698
virtual HRESULT STDMETHODCALLTYPE GetDisplayNameOf(LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *lpName)
Definition: foldercommon.h:502
virtual HRESULT STDMETHODCALLTYPE GetCurFolder(PIDLIST_ABSOLUTE *pidl)
Definition: foldercommon.h:646
virtual HRESULT STDMETHODCALLTYPE InternalBindToObject(PWSTR path, const TItemId *info, LPITEMIDLIST first, LPCITEMIDLIST rest, LPITEMIDLIST fullPidl, LPBC pbcReserved, IShellFolder **ppsfChild) PURE
virtual BOOL STDMETHODCALLTYPE IsSymLink(LPCITEMIDLIST pcidl)
Definition: foldercommon.h:679
virtual HRESULT STDMETHODCALLTYPE CreateViewObject(HWND hwndOwner, REFIID riid, void **ppvOut)
Definition: foldercommon.h:334
virtual HRESULT STDMETHODCALLTYPE EnumSearches(IEnumExtraSearch **ppenum)
Definition: foldercommon.h:588
virtual BOOL STDMETHODCALLTYPE IsSymLink(const TItemId *info)
Definition: foldercommon.h:690
virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId **pentry) PURE
virtual HRESULT STDMETHODCALLTYPE GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, void **ppvOut)
Definition: foldercommon.h:401
virtual HRESULT STDMETHODCALLTYPE Initialize(IShellView *psv)
Definition: foldercommon.h:45
virtual ~CFolderViewCB()
Definition: foldercommon.h:21
virtual HRESULT STDMETHODCALLTYPE MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: foldercommon.h:23
IShellView * m_View
Definition: foldercommon.h:16
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define SHCIDS_CANONICALONLY
Definition: precomp.h:50
#define GET_SHGDN_RELATION(dwFlags)
Definition: precomp.h:53
#define DFM_INVOKECOMMANDEX
Definition: precomp.h:46
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#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
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:468
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:504
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
const UINT template
Definition: action.c:7481
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
Definition: assoc.c:93
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1522
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
r parent
Definition: btrfs.c:3010
#define IsSymLink(Fcb)
Definition: ext2fs.h:285
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GUID CLSID_NtObjectFolder
Definition: ntobjfolder.cpp:13
char typename[32]
Definition: main.c:84
GLuint GLuint end
Definition: gl.h:1545
GLuint res
Definition: glext.h:9613
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
const GLint * first
Definition: glext.h:5794
GLenum target
Definition: glext.h:7315
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
#define DbgPrint
Definition: hal.h:12
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
REFIID riid
Definition: atlbase.h:39
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] PITEMID_CHILD *rgelt, [out] ULONG *pceltFetched)
ULONG SFGAOF
Definition: shobjidl.idl:222
DWORD SHGDNF
Definition: shobjidl.idl:169
DWORD SHCONTF
Definition: shobjidl.idl:187
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:679
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define END_COM_MAP()
Definition: atlcom.h:592
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static LPOLESTR
Definition: stg_prop.c:27
static HWND child
Definition: cursoricon.c:298
#define min(a, b)
Definition: monoChain.cc:55
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
interface IBindCtx * LPBC
Definition: objfwd.h:18
const GUID IID_IDataObject
#define PathAppendW
Definition: pathcch.h:309
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:929
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:703
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:253
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:212
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1352
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:855
const GUID IID_IPersist
Definition: proxy.cpp:14
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static calc_node_t temp
Definition: rpn_ieee.c:38
#define f2(x, y, z)
Definition: sha1.c:31
#define f1(x, y, z)
Definition: sha1.c:30
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2218
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:573
#define S_EQUAL
Definition: shellutils.h:571
HRESULT hr
Definition: shlfolder.c:183
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1311
#define SFVM_BACKGROUNDENUM
Definition: shlobj.h:1316
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1308
@ ASSOCF_INIT_DEFAULTTOFOLDER
Definition: shlwapi.h:586
FOLDERVIEWMODE
Definition: shobjidl.idl:666
@ FVM_DETAILS
Definition: shobjidl.idl:672
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55
#define _countof(array)
Definition: sndvol32.h:68
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1351
IShellView * psvOuter
Definition: shlobj.h:1350
UINT cbSize
Definition: shlobj.h:1348
IShellFolder * pshf
Definition: shlobj.h:1349
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
_In_ LPCSTR lpName
Definition: winbase.h:2789
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define HRESULT_FROM_NT(x)
Definition: winerror.h:94
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_POINTER
Definition: winerror.h:2365
int WINAPI EnumObjects(_In_ HDC, _In_ int, _In_ GOBJENUMPROC, _In_ LPARAM)
#define RegOpenKey
Definition: winreg.h:519
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180