ReactOS 0.4.16-dev-1571-gdfc05a6
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) override
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) override
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:
216 STDMETHOD(InternalBindToObject)(
217 PWSTR path,
218 const TItemId * info,
220 LPCITEMIDLIST rest,
221 LPITEMIDLIST fullPidl,
222 LPBC pbcReserved,
223 IShellFolder** ppsfChild) PURE;
224
225 STDMETHOD(ResolveSymLink)(
226 const TItemId * info,
227 LPITEMIDLIST * fullPidl)
228 {
229 return E_NOTIMPL;
230 }
231
232public:
234 LPCITEMIDLIST pidl,
235 LPBC pbcReserved,
236 REFIID riid,
237 void **ppvObj) override
238 {
240 return E_NOTIMPL;
241 }
242
245 LPCITEMIDLIST pidl1,
246 LPCITEMIDLIST pidl2) override
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 }
288
289protected:
292 const TItemId * first,
293 const TItemId * second)
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 }
331
332public:
334 HWND hwndOwner,
335 REFIID riid,
336 void **ppvOut) override
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 }
369
371 UINT cidl,
373 SFGAOF *rgfInOut) override
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 }
399
401 HWND hwndOwner,
402 UINT cidl,
404 REFIID riid,
405 UINT *prgfInOut,
406 void **ppvOut) override
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
419 LPITEMIDLIST parent = m_shellPidl;
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
434 hr = ResolveSymLink(info, &target);
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 }
499
501 LPCITEMIDLIST pidl,
503 STRRET *lpName) override
504 {
505 const TItemId * info;
506
507 TRACE("GetDisplayNameOf %p\n", pidl);
508
509 HRESULT hr = GetInfoFromPidl(pidl, &info);
511 return hr;
512
513 if (GET_SHGDN_FOR(uFlags) & SHGDN_FOREDITING)
514 {
515 hr = MakeStrRetFromString(info->entryName, info->entryNameLength, lpName);
517 return hr;
518 }
519
520 WCHAR path[MAX_PATH] = { 0 };
521
522 if (GET_SHGDN_FOR(uFlags) & SHGDN_FORPARSING)
523 {
524 if (GET_SHGDN_RELATION(uFlags) != SHGDN_INFOLDER)
525 {
526 hr = GetFullName(m_shellPidl, uFlags, path, _countof(path));
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 }
566
568 HWND hwnd,
569 LPCITEMIDLIST pidl,
570 LPCOLESTR lpszName,
572 LPITEMIDLIST *ppidlOut) override
573 {
575 return E_NOTIMPL;
576 }
577
578 // IShellFolder2
580 {
582 return E_NOTIMPL;
583 }
584
586 {
588 return E_NOTIMPL;
589 }
590
593 ULONG *pSort,
594 ULONG *pDisplay) override
595 {
596 if (pSort)
597 *pSort = 0;
598 if (pDisplay)
599 *pDisplay = 0;
600 return S_OK;
601 }
602
603 STDMETHOD(GetDefaultColumnState)(
604 UINT iColumn,
605 SHCOLSTATEF *pcsFlags) PURE;
606
607 STDMETHOD(GetDetailsEx)(
608 LPCITEMIDLIST pidl,
609 const SHCOLUMNID *pscid,
610 VARIANT *pv) PURE;
611
613 LPCITEMIDLIST pidl,
614 UINT iColumn,
615 SHELLDETAILS *psd) PURE;
616
617 STDMETHOD(MapColumnToSCID)(
618 UINT iColumn,
619 SHCOLUMNID *pscid) PURE;
620
621 // IPersist
622 STDMETHODIMP GetClassID(CLSID *lpClassId) override
623 {
624 if (!lpClassId)
625 return E_POINTER;
626
627 *lpClassId = CLSID_NtObjectFolder;
628 return S_OK;
629 }
630
631 // IPersistFolder
633 {
634 m_shellPidl = ILClone(pidl);
635
636 StringCbCopyW(m_NtPath, sizeof(m_NtPath), L"\\");
637
638 return S_OK;
639 }
640
641 // IPersistFolder2
643 {
644 if (pidl)
645 *pidl = ILClone(m_shellPidl);
646 if (!m_shellPidl)
647 return S_FALSE;
648 return S_OK;
649 }
650
651 // Internal
652protected:
655 const TItemId * first,
656 const TItemId * second) PURE;
657
658 STDMETHOD_(ULONG, ConvertAttributes)(
659 const TItemId * entry,
660 PULONG inMask) PURE;
661
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 }
672
673 STDMETHOD_(BOOL, IsFolder)(const TItemId * info) PURE;
674
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 }
685
686 STDMETHOD_(BOOL, IsSymLink)(const TItemId * info)
687 {
688 return FALSE;
689 }
690
691 virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId ** pentry) PURE;
692
693public:
694 static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder * /*psf*/, HWND /*hwnd*/, IDataObject * /*pdtobj*/, UINT uMsg, WPARAM /*wParam*/, LPARAM /*lParam*/)
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 }
708
711
712 BEGIN_COM_MAP(TSelf)
713 COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
714 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
716 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
717 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
719
720};
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4820
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)
static BOOL IsFolder(LPCITEMIDLIST pidl)
Definition: CRecycleBin.cpp:84
static HRESULT BindToObject(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv)
Definition: CSearchBar.cpp:77
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
const WCHAR * class
Definition: main.c:68
static BOOL CompareName(LPCWSTR pszName1, LPCWSTR pszName2)
Definition: find.c:60
#define PURE
Definition: basetyps.h:64
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHOD(m)
Definition: basetyps.h:62
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
#define RegCloseKey(hKey)
Definition: registry.h:49
virtual ~CCommonFolder()
Definition: foldercommon.h:77
STDMETHODIMP GetDisplayNameOf(LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *lpName) override
Definition: foldercommon.h:500
LPITEMIDLIST m_shellPidl
Definition: foldercommon.h:68
STDMETHODIMP SetNameOf(HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST *ppidlOut) override
Definition: foldercommon.h:567
STDMETHOD_(BOOL, IsSymLink)(const TItemId *info)
Definition: foldercommon.h:686
STDMETHODIMP GetDefaultColumn(DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) override
Definition: foldercommon.h:591
STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, void **ppvOut) override
Definition: foldercommon.h:333
STDMETHODIMP GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
Definition: foldercommon.h:642
STDMETHODIMP CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
Definition: foldercommon.h:243
STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidl) override
Definition: foldercommon.h:632
STDMETHODIMP BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvObj) override
Definition: foldercommon.h:233
STDMETHOD_(BOOL, IsFolder)(const TItemId *info) PURE
STDMETHODIMP GetDefaultSearchGUID(GUID *lpguid) override
Definition: foldercommon.h:579
static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
Definition: foldercommon.h:694
STDMETHODIMP ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, ULONG *pdwAttributes) override
Definition: foldercommon.h:84
STDMETHODIMP EnumSearches(IEnumExtraSearch **ppenum) override
Definition: foldercommon.h:585
STDMETHOD_(ULONG, ConvertAttributes)(const TItemId *entry
STDMETHODIMP GetClassID(CLSID *lpClassId) override
Definition: foldercommon.h:622
STDMETHOD_(BOOL, IsFolder)(LPCITEMIDLIST pcidl)
Definition: foldercommon.h:662
STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, void **ppvOut) override
Definition: foldercommon.h:400
STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, SFGAOF *rgfInOut) override
Definition: foldercommon.h:370
virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId **pentry) PURE
STDMETHODIMP BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvOut) override
Definition: foldercommon.h:168
STDMETHOD_(BOOL, IsSymLink)(LPCITEMIDLIST pcidl)
Definition: foldercommon.h:675
virtual ~CFolderViewCB()
Definition: foldercommon.h:21
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override
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:33
HRESULT GetDetailsOf(IShellFolder2 &Folder, PCUITEMID_CHILD pidl, UINT Column, PWSTR &String)
Definition: util.h:88
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
#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
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
UINT uFlags
Definition: api.c:59
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:464
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:500
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
const UINT * keys
Definition: locale.c:416
const UINT template
Definition: action.c:7511
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
Definition: assoc.c:99
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define L(x)
Definition: resources.c:13
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
static HRESULT WINAPI CompareIDs(IShellFolder *This, LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
Definition: inetfolder.c:198
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
LONG_PTR LPARAM
Definition: minwindef.h:182
UINT_PTR WPARAM
Definition: minwindef.h:181
#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 KEY_READ
Definition: nt_native.h:1023
interface IBindCtx * LPBC
Definition: objfwd.h:18
const GUID IID_IDataObject
#define PathAppendW
Definition: pathcch.h:310
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:263
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1498
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:971
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:2419
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:678
#define S_EQUAL
Definition: shellutils.h:676
HRESULT hr
Definition: shlfolder.c:183
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1323
#define SFVM_BACKGROUNDENUM
Definition: shlobj.h:1328
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1320
@ ASSOCF_INIT_DEFAULTTOFOLDER
Definition: shlwapi.h:595
FOLDERVIEWMODE
Definition: shobjidl.idl:677
@ FVM_DETAILS
Definition: shobjidl.idl:683
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:70
#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:1365
IShellView * psvOuter
Definition: shlobj.h:1364
UINT cbSize
Definition: shlobj.h:1362
IShellFolder * pshf
Definition: shlobj.h:1363
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:2524
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480
int WINAPI EnumObjects(_In_ HDC, _In_ int, _In_ GOBJENUMPROC, _In_ LPARAM)
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180