ReactOS 0.4.15-dev-7788-g1ad9096
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 int nkeys = _countof(keys);
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 = RegOpenKey(HKEY_CLASSES_ROOT, L"Folder", keys + 0);
456 if (!NT_SUCCESS(res))
457 return HRESULT_FROM_NT(res);
458 }
459 else
460 {
461 nkeys = 0;
462 }
463
464 HRESULT hr = CDefFolderMenu_Create2(parent, hwndOwner, cidl, apidl, psfParent, DefCtxMenuCallback, nkeys, keys, &pcm);
466 return hr;
467
468 return pcm->QueryInterface(riid, ppvOut);
469 }
470
471 if (IsEqualIID(riid, IID_IExtractIconW))
472 {
473 return ShellObjectCreatorInit<TExtractIcon>(m_NtPath, m_shellPidl, cidl, apidl, riid, ppvOut);
474 }
475
477 {
478 return CIDLData_CreateFromIDArray(m_shellPidl, cidl, apidl, (IDataObject**)ppvOut);
479 }
480
481 if (IsEqualIID(riid, IID_IQueryAssociations))
482 {
483 if (cidl == 1 && IsFolder(apidl[0]))
484 {
485 CComPtr<IQueryAssociations> pqa;
486 HRESULT hr = AssocCreate(CLSID_QueryAssociations, IID_PPV_ARG(IQueryAssociations, &pqa));
488 return hr;
489
490 hr = pqa->Init(ASSOCF_INIT_DEFAULTTOFOLDER, L"NTObjShEx.NTDirectory", NULL, hwndOwner);
492 return hr;
493
494 return pqa->QueryInterface(riid, ppvOut);
495 }
496 }
497
498 return E_NOTIMPL;
499 }
500
502 LPCITEMIDLIST pidl,
504 STRRET *lpName) override
505 {
506 const TItemId * info;
507
508 TRACE("GetDisplayNameOf %p\n", pidl);
509
510 HRESULT hr = GetInfoFromPidl(pidl, &info);
512 return hr;
513
514 if (GET_SHGDN_FOR(uFlags) & SHGDN_FOREDITING)
515 {
516 hr = MakeStrRetFromString(info->entryName, info->entryNameLength, lpName);
518 return hr;
519 }
520
521 WCHAR path[MAX_PATH] = { 0 };
522
523 if (GET_SHGDN_FOR(uFlags) & SHGDN_FORPARSING)
524 {
525 if (GET_SHGDN_RELATION(uFlags) != SHGDN_INFOLDER)
526 {
527 hr = GetFullName(m_shellPidl, uFlags, path, _countof(path));
529 return hr;
530 }
531 }
532
533 PathAppendW(path, info->entryName);
534
535 LPCITEMIDLIST pidlNext = ILGetNext(pidl);
536 if (pidlNext && pidlNext->mkid.cb > 0)
537 {
538 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
539
540 CComPtr<IShellFolder> psfChild;
541 hr = BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
543 return hr;
544
546 STRRET childName;
547
548 hr = psfChild->GetDisplayNameOf(pidlNext, uFlags | SHGDN_INFOLDER, &childName);
550 return hr;
551
552 hr = StrRetToBufW(&childName, pidlNext, temp, _countof(temp));
554 return hr;
555
557
558 ILFree(pidlFirst);
559 }
560
563 return hr;
564
565 return S_OK;
566 }
567
569 HWND hwnd,
570 LPCITEMIDLIST pidl,
571 LPCOLESTR lpszName,
573 LPITEMIDLIST *ppidlOut) override
574 {
576 return E_NOTIMPL;
577 }
578
579 // IShellFolder2
581 {
583 return E_NOTIMPL;
584 }
585
587 {
589 return E_NOTIMPL;
590 }
591
594 ULONG *pSort,
595 ULONG *pDisplay) override
596 {
597 if (pSort)
598 *pSort = 0;
599 if (pDisplay)
600 *pDisplay = 0;
601 return S_OK;
602 }
603
604 STDMETHOD(GetDefaultColumnState)(
605 UINT iColumn,
606 SHCOLSTATEF *pcsFlags) PURE;
607
608 STDMETHOD(GetDetailsEx)(
609 LPCITEMIDLIST pidl,
610 const SHCOLUMNID *pscid,
611 VARIANT *pv) PURE;
612
613 STDMETHOD(GetDetailsOf)(
614 LPCITEMIDLIST pidl,
615 UINT iColumn,
616 SHELLDETAILS *psd) PURE;
617
618 STDMETHOD(MapColumnToSCID)(
619 UINT iColumn,
620 SHCOLUMNID *pscid) PURE;
621
622 // IPersist
623 STDMETHODIMP GetClassID(CLSID *lpClassId) override
624 {
625 if (!lpClassId)
626 return E_POINTER;
627
628 *lpClassId = CLSID_NtObjectFolder;
629 return S_OK;
630 }
631
632 // IPersistFolder
634 {
635 m_shellPidl = ILClone(pidl);
636
637 StringCbCopyW(m_NtPath, sizeof(m_NtPath), L"\\");
638
639 return S_OK;
640 }
641
642 // IPersistFolder2
644 {
645 if (pidl)
646 *pidl = ILClone(m_shellPidl);
647 if (!m_shellPidl)
648 return S_FALSE;
649 return S_OK;
650 }
651
652 // Internal
653protected:
654 STDMETHOD(CompareIDs)(
656 const TItemId * first,
657 const TItemId * second) PURE;
658
659 STDMETHOD_(ULONG, ConvertAttributes)(
660 const TItemId * entry,
661 PULONG inMask) PURE;
662
663 STDMETHOD_(BOOL, IsFolder)(LPCITEMIDLIST pcidl)
664 {
665 const TItemId * info;
666
667 HRESULT hr = GetInfoFromPidl(pcidl, &info);
668 if (FAILED(hr))
669 return hr;
670
671 return IsFolder(info);
672 }
673
674 STDMETHOD_(BOOL, IsFolder)(const TItemId * info) PURE;
675
677 {
678 const TItemId * info;
679
680 HRESULT hr = GetInfoFromPidl(pcidl, &info);
681 if (FAILED(hr))
682 return hr;
683
684 return IsSymLink(info);
685 }
686
687 STDMETHOD_(BOOL, IsSymLink)(const TItemId * info)
688 {
689 return FALSE;
690 }
691
692 virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId ** pentry) PURE;
693
694public:
695 static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder * /*psf*/, HWND /*hwnd*/, IDataObject * /*pdtobj*/, UINT uMsg, WPARAM /*wParam*/, LPARAM /*lParam*/)
696 {
697 switch (uMsg)
698 {
700 return S_OK;
701
704 case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default
705 return S_FALSE;
706 }
707 return E_NOTIMPL;
708 }
709
712
713 BEGIN_COM_MAP(TSelf)
714 COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
715 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
717 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
718 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
720
721};
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:3855
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
static BOOL CompareName(LPCWSTR pszName1, LPCWSTR pszName2)
Definition: find.c:72
#define PURE
Definition: basetyps.h:64
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHOD(m)
Definition: basetyps.h:62
#define UNIMPLEMENTED
Definition: debug.h:115
virtual ~CCommonFolder()
Definition: foldercommon.h:77
STDMETHODIMP GetDisplayNameOf(LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *lpName) override
Definition: foldercommon.h:501
LPITEMIDLIST m_shellPidl
Definition: foldercommon.h:68
STDMETHODIMP SetNameOf(HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST *ppidlOut) override
Definition: foldercommon.h:568
STDMETHOD_(BOOL, IsSymLink)(const TItemId *info)
Definition: foldercommon.h:687
STDMETHODIMP GetDefaultColumn(DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) override
Definition: foldercommon.h:592
STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, void **ppvOut) override
Definition: foldercommon.h:333
STDMETHODIMP GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
Definition: foldercommon.h:643
STDMETHODIMP CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
Definition: foldercommon.h:243
STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidl) override
Definition: foldercommon.h:633
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:580
static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
Definition: foldercommon.h:695
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:586
STDMETHOD_(ULONG, ConvertAttributes)(const TItemId *entry
STDMETHODIMP GetClassID(CLSID *lpClassId) override
Definition: foldercommon.h:623
STDMETHOD_(BOOL, IsFolder)(LPCITEMIDLIST pcidl)
Definition: foldercommon.h:663
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:676
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: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:2206
#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
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180