ReactOS 0.4.17-dev-1190-g4c812f4
CShellItem.cpp
Go to the documentation of this file.
1/*
2 * IShellItem implementation
3 *
4 * Copyright 2008 Vincent Povirk for CodeWeavers
5 * Copyright 2009 Andrew Hill
6 * Copyright 2013 Katayama Hirofumi MZ
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#include "precomp.h"
24#include "prop.h"
25
27
29 m_pidl(NULL)
30{
31}
32
34{
36}
37
39{
40 *parent_pidl = ILClone(m_pidl);
41 if (*parent_pidl)
42 {
43 if (ILRemoveLastID(*parent_pidl))
44 return S_OK;
45 else
46 {
47 ILFree(*parent_pidl);
48 *parent_pidl = NULL;
49 return E_INVALIDARG;
50 }
51 }
52 else
53 {
54 *parent_pidl = NULL;
55 return E_OUTOFMEMORY;
56 }
57}
58
60{
61 HRESULT hr;
62 LPITEMIDLIST parent_pidl;
64
65 hr = get_parent_pidl(&parent_pidl);
66 if (SUCCEEDED(hr))
67 {
68 hr = SHGetDesktopFolder(&desktop);
69 if (SUCCEEDED(hr))
70 hr = desktop->BindToObject(parent_pidl, NULL, IID_PPV_ARG(IShellFolder, ppsf));
71 ILFree(parent_pidl);
72 }
73
74 return hr;
75}
76
78{
80 CComPtr<IShellFolder> psfDesktop;
82
83 ret = SHGetDesktopFolder(&psfDesktop);
85 return ret;
86
88 psf = psfDesktop;
89 else
90 {
91 ret = psfDesktop->BindToObject(m_pidl, pbc, IID_PPV_ARG(IShellFolder, &psf));
93 return ret;
94 }
95
96 return psf->QueryInterface(riid, ppvOut);
97}
98
100{
102 PCUITEMID_CHILD pidl;
104 if (SUCCEEDED(hr))
105 return psf->GetDetailsEx(pidl, (const SHCOLUMNID*)&key, pvar);
106 return hr;
107}
108
110{
111 HRESULT ret;
112 TRACE("(%p, %p,%s,%p,%p)\n", this, pbc, shdebugstr_guid(&rbhid), riid, ppvOut);
113
114 *ppvOut = NULL;
115 if (IsEqualGUID(rbhid, BHID_SFObject))
116 {
117 return get_shellfolder(pbc, riid, ppvOut);
118 }
119 else if (IsEqualGUID(rbhid, BHID_SFUIObject))
120 {
121 CComPtr<IShellFolder> psf_parent;
122 if (_ILIsDesktop(m_pidl))
123 ret = SHGetDesktopFolder(&psf_parent);
124 else
125 ret = get_parent_shellfolder(&psf_parent);
127 return ret;
128
130 return psf_parent->GetUIObjectOf(NULL, 1, &pidl, riid, NULL, ppvOut);
131 }
132 else if (IsEqualGUID(rbhid, BHID_DataObject))
133 {
134 return BindToHandler(pbc, BHID_SFUIObject, IID_IDataObject, ppvOut);
135 }
136 else if (IsEqualGUID(rbhid, BHID_SFViewObject))
137 {
141 return ret;
142
143 return psf->CreateViewObject(NULL, riid, ppvOut);
144 }
145
146 FIXME("Unsupported BHID %s.\n", debugstr_guid(&rbhid));
147
148 return MK_E_NOOBJECT;
149}
150
152{
153 HRESULT hr;
154 LPITEMIDLIST parent_pidl;
155
156 TRACE("(%p,%p)\n", this, ppsi);
157
158 hr = get_parent_pidl(&parent_pidl);
159 if (SUCCEEDED(hr))
160 {
161 hr = SHCreateShellItem(NULL, NULL, parent_pidl, ppsi);
162 ILFree(parent_pidl);
163 }
164
165 return hr;
166}
167
169{
171}
172
174{
175 CComPtr<IShellFolder> parent_folder;
176 LPCITEMIDLIST child_pidl;
177 HRESULT hr;
178
179 TRACE("(%p,%x,%p)\n", this, sfgaoMask, psfgaoAttribs);
180
181 if (_ILIsDesktop(m_pidl))
182 hr = SHGetDesktopFolder(&parent_folder);
183 else
184 hr = get_parent_shellfolder(&parent_folder);
186 return hr;
187
188 child_pidl = ILFindLastID(m_pidl);
189 *psfgaoAttribs = sfgaoMask;
190 hr = parent_folder->GetAttributesOf(1, &child_pidl, psfgaoAttribs);
191 *psfgaoAttribs &= sfgaoMask;
192
194 return hr;
195
196 return (sfgaoMask == *psfgaoAttribs) ? S_OK : S_FALSE;
197}
198
200{
201 HRESULT hr;
203 CComPtr<IShellFolder> psfDesktop;
204 LPITEMIDLIST pidl;
205
206 TRACE("(%p,%p,%x,%p)\n", this, oth, hint, piOrder);
207
208 if (piOrder == NULL || oth == NULL)
209 return E_POINTER;
210
211 hr = oth->QueryInterface(IID_PPV_ARG(IPersistIDList, &pIDList));
212 if (SUCCEEDED(hr))
213 {
214 hr = pIDList->GetIDList(&pidl);
215 if (SUCCEEDED(hr))
216 {
217 hr = SHGetDesktopFolder(&psfDesktop);
218 if (SUCCEEDED(hr))
219 {
220 hr = psfDesktop->CompareIDs(hint, m_pidl, pidl);
221 *piOrder = (int)(short)SCODE_CODE(hr);
222 }
223 ILFree(pidl);
224 }
225 }
226
227 if(FAILED(hr))
228 return hr;
229
230 if(*piOrder)
231 return S_FALSE;
232 else
233 return S_OK;
234}
235
237 _In_ REFIID riid, _Out_ void **ppv)
238{
239 if (!ppv)
240 return E_POINTER;
242 *ppv = NULL;
243 return E_NOTIMPL;
244}
245
247 _In_ IUnknown *punkCreateObject,
248 _In_ REFIID riid, _Out_ void **ppv)
249{
250 if (!ppv)
251 return E_POINTER;
252 if (!punkCreateObject)
253 return E_INVALIDARG;
255 *ppv = NULL;
256 return E_NOTIMPL;
257}
258
260 _In_ GETPROPERTYSTOREFLAGS flags,
261 _In_ REFIID riid, _Out_ void **ppv)
262{
263 if (!ppv)
264 return E_POINTER;
266 *ppv = NULL;
267 return E_NOTIMPL;
268}
269
271 _Out_ void **ppv)
272{
273 if (!ppv)
274 return E_POINTER;
275 UNIMPLEMENTED; // TODO: propsys::PSCreatePropertyDescriptionList? IShellItemArray::GetPropertyDescriptionList?
276 *ppv = NULL;
277 return E_NOTIMPL;
278}
279
281{
283 return E_NOTIMPL;
284}
285
287{
288 VARIANT v;
289 HRESULT hr = get_property_from_folder(key, &v); // TODO: BHID_PropertyStore?
290 if (FAILED(hr))
291 {
293 return hr;
295 }
296 return SHELL_VariantToPropVariant(&v, ppropvar);
297}
298
300{
301 PROPVARIANT pv;
302 pv.vt = VT_EMPTY;
303 HRESULT hr = GetProperty(key, &pv);
304 if (FAILED(hr))
305 return hr;
306 hr = SHELL_PropVariantChangeType(ppropvar, pv, vt);
307 PropVariantClear(&pv);
308 return hr;
309}
310
312{
313 if (!pclsid)
314 return E_INVALIDARG;
315
316 PROPVARIANT pv;
317 pv.vt = VT_EMPTY;
319 *pclsid = SUCCEEDED(hr) ? *pv.puuid : GUID_NULL;
320 PropVariantClear(&pv);
321 return hr;
322}
323
325{
326 if (!pft)
327 return E_INVALIDARG;
328
329 const FILETIME failval = {};
330 PROPVARIANT pv;
331 pv.vt = VT_EMPTY;
333 *pft = SUCCEEDED(hr) ? pv.filetime : failval;
334 return hr;
335}
336
338{
339 if (!ppsz)
340 return E_INVALIDARG;
341
342 PROPVARIANT pv;
343 pv.vt = VT_EMPTY;
345 *ppsz = SUCCEEDED(hr) ? pv.pwszVal : NULL; // Transferring ownership, don't call PropVariantClear
346 return hr;
347}
348
350{
351 if (!pi)
352 return E_INVALIDARG;
353
354 PROPVARIANT pv;
355 pv.vt = VT_EMPTY;
357 *pi = SUCCEEDED(hr) ? pv.lVal : 0;
358 return hr;
359}
360
362{
363 if (!pui)
364 return E_INVALIDARG;
365
366 PROPVARIANT pv;
367 pv.vt = VT_EMPTY;
369 *pui = SUCCEEDED(hr) ? pv.ulVal : 0;
370 return hr;
371}
372
374{
375 if (!pull)
376 return E_INVALIDARG;
377
378 PROPVARIANT pv;
379 pv.vt = VT_EMPTY;
381 *pull = SUCCEEDED(hr) ? pv.uhVal.QuadPart : 0;
382 return hr;
383}
384
386{
387 if (!pf)
388 return E_INVALIDARG;
389
390 PROPVARIANT pv;
391 pv.vt = VT_EMPTY;
393 *pf = SUCCEEDED(hr) && V_BOOL((VARIANT*)&pv) != VARIANT_FALSE;
394 return hr;
395}
396
398{
399 TRACE("(%p,%p)\n", this, pClassID);
400
401 *pClassID = CLSID_ShellItem;
402 return S_OK;
403}
404
406{
407 LPITEMIDLIST new_pidl;
408
409 TRACE("(%p,%p)\n", this, pidlx);
410
411 new_pidl = ILClone(pidlx);
412 if (new_pidl)
413 {
414 ILFree(m_pidl);
415 m_pidl = new_pidl;
416 return S_OK;
417 }
418 else
419 return E_OUTOFMEMORY;
420}
421
423{
424 TRACE("(%p,%p)\n", this, ppidl);
425
426 *ppidl = ILClone(m_pidl);
427 if (*ppidl)
428 return S_OK;
429 else
430 return E_OUTOFMEMORY;
431}
432
434 IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi)
435{
436 HRESULT hr;
437 CComPtr<IShellItem> newShellItem;
438 LPITEMIDLIST new_pidl;
439 CComPtr<IPersistIDList> newPersistIDList;
440
441 TRACE("(%p,%p,%p,%p)\n", pidlParent, psfParent, pidl, ppsi);
442
443 *ppsi = NULL;
444
445 if (!pidl)
446 return E_INVALIDARG;
447
448 if (pidlParent || psfParent)
449 {
450 LPITEMIDLIST temp_parent = NULL;
451 if (!pidlParent)
452 {
453 CComPtr<IPersistFolder2> ppf2Parent;
454
455 if (FAILED(psfParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2Parent))))
456 {
457 FIXME("couldn't get IPersistFolder2 interface of parent\n");
458 return E_NOINTERFACE;
459 }
460
461 if (FAILED(ppf2Parent->GetCurFolder(&temp_parent)))
462 {
463 FIXME("couldn't get parent PIDL\n");
464 return E_NOINTERFACE;
465 }
466
467 pidlParent = temp_parent;
468 }
469
470 new_pidl = ILCombine(pidlParent, pidl);
471 ILFree(temp_parent);
472
473 if (!new_pidl)
474 return E_OUTOFMEMORY;
475 }
476 else
477 {
478 new_pidl = ILClone(pidl);
479 if (!new_pidl)
480 return E_OUTOFMEMORY;
481 }
482
483 hr = CShellItem::_CreatorClass::CreateInstance(NULL, IID_PPV_ARG(IShellItem, &newShellItem));
484 if (FAILED(hr))
485 {
486 ILFree(new_pidl);
487 return hr;
488 }
489 hr = newShellItem->QueryInterface(IID_PPV_ARG(IPersistIDList, &newPersistIDList));
490 if (FAILED(hr))
491 {
492 ILFree(new_pidl);
493 return hr;
494 }
495 hr = newPersistIDList->SetIDList(new_pidl);
496 if (FAILED(hr))
497 {
498 ILFree(new_pidl);
499 return hr;
500 }
501 ILFree(new_pidl);
502
503 *ppsi = newShellItem.Detach();
504
505 return hr;
506}
507
508/***********************************************************************
509 * SHCreateItemFromIDList [SHELL32.@]
510 */
513{
515 HRESULT hr;
516
517 TRACE("(%p,%s,%p)\n", pidl, debugstr_guid(&riid), ppv);
518
519 if (!ppv)
520 return E_POINTER;
521 *ppv = NULL;
522
523 if (!pidl)
524 return E_INVALIDARG;
525
526 hr = SHCreateShellItem(NULL, NULL, pidl, &item);
528 return hr;
529
530 return item->QueryInterface(riid, ppv);
531}
532
533/***********************************************************************
534 * SHCreateItemFromParsingName [SHELL32.@]
535 */
538 _In_ PCWSTR pszPath,
539 _In_opt_ IBindCtx *pbc,
541 _Out_ void **ppv)
542{
544 HRESULT hr;
545
546 TRACE("(%s,%p,%s,%p)\n", debugstr_w(pszPath), pbc, debugstr_guid(&riid), ppv);
547
548 if (!ppv)
549 return E_POINTER;
550 *ppv = NULL;
551
552 hr = SHParseDisplayName(pszPath, pbc, &pidl, 0, NULL);
553 if (SUCCEEDED(hr))
555
556 return hr;
557}
558
559/***********************************************************************
560 * SHGetItemFromDataObject [SHELL32.@]
561 */
564 _In_ IDataObject *pdtobj,
567 _Out_ void **ppv)
568{
569 FORMATETC fmt;
570 STGMEDIUM medium = { 0 };
571 HRESULT hr;
572
573 TRACE("(%p,%x,%s,%p)\n", pdtobj, dwFlags, debugstr_guid(&riid), ppv);
574
575 if (!pdtobj)
576 return E_INVALIDARG;
577
578 fmt.cfFormat = (CLIPFORMAT)RegisterClipboardFormatW(CFSTR_SHELLIDLISTW);
579 fmt.ptd = NULL;
580 fmt.dwAspect = DVASPECT_CONTENT;
581 fmt.lindex = -1;
582 fmt.tymed = TYMED_HGLOBAL;
583
584 hr = pdtobj->GetData(&fmt, &medium);
585 if (SUCCEEDED(hr))
586 {
587 LPIDA pida = (LPIDA)GlobalLock(medium.hGlobal);
588 if (pida && pida->cidl >= 1 &&
589 ((pida->cidl > 1 && !(dwFlags & DOGIF_ONLY_IF_ONE)) || pida->cidl == 1))
590 {
592 HIDA_GetPIDLItem(pida, 0));
593 if (pidl)
594 {
596 ILFree(pidl);
597 }
598 else
599 {
601 }
602 }
603 else
604 {
605 TRACE("Failed to create item, cidl=%u, dwFlags=%#x\n", pida ? pida->cidl : 0, dwFlags);
606 hr = E_FAIL;
607 }
608
609 if (medium.hGlobal)
610 {
611 GlobalUnlock(medium.hGlobal);
612 ReleaseStgMedium(&medium);
613 }
614 }
615
616 if (FAILED(hr) && !(dwFlags & DOGIF_NO_HDROP))
617 {
618 TRACE("Attempting to fall back on CF_HDROP.\n");
619
620 fmt.cfFormat = CF_HDROP;
621 fmt.ptd = NULL;
622 fmt.dwAspect = DVASPECT_CONTENT;
623 fmt.lindex = -1;
624 fmt.tymed = TYMED_HGLOBAL;
625 ZeroMemory(&medium, sizeof(medium));
626
627 hr = pdtobj->GetData(&fmt, &medium);
628 if (SUCCEEDED(hr))
629 {
630 DROPFILES *df = (DROPFILES *)GlobalLock(medium.hGlobal);
631 hr = E_FAIL;
632 if (df)
633 {
634 LPBYTE files = (LPBYTE)df + df->pFiles;
635 if (!df->fWide)
636 {
637 PCSTR first = (PCSTR)files;
638 BOOL multi = *(first + lstrlenA(first) + 1) != 0;
639 if (!(multi && (dwFlags & DOGIF_ONLY_IF_ONE)))
640 {
644 }
645 }
646 else
647 {
648 PCWSTR first = (PCWSTR)files;
649 BOOL multi = *(first + lstrlenW(first) + 1) != 0;
650 if (!(multi && (dwFlags & DOGIF_ONLY_IF_ONE)))
652 }
653 GlobalUnlock(medium.hGlobal);
654 }
655 ReleaseStgMedium(&medium);
656 }
657 }
658
659 if (FAILED(hr) && !(dwFlags & DOGIF_NO_URL))
660 FIXME("Failed to create item, should try CF_URL.\n");
661
662 return hr;
663}
664
665#if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA
666
667/***********************************************************************
668 * SHCreateItemFromRelativeName [SHELL32.@]
669 */
673 _In_ PCWSTR pszName,
674 _In_opt_ IBindCtx *pbc,
676 _Out_ void **ppv)
677{
678 CComPtr<IShellFolder> desktop;
680 CComHeapPtr<ITEMIDLIST> pidlFolder;
681 CComHeapPtr<ITEMIDLIST> pidlChild;
682 HRESULT hr;
683
684 TRACE("(%p,%s,%p,%s,%p)\n", parent, debugstr_w(pszName), pbc, debugstr_guid(&riid), ppv);
685
686 if (!ppv)
687 return E_POINTER;
688 *ppv = NULL;
689
690 if (!pszName)
691 return E_INVALIDARG;
692
693 hr = SHGetIDListFromObject(parent, &pidlFolder);
694 if (hr != S_OK)
695 return hr;
696
697 hr = SHGetDesktopFolder(&desktop);
699 return hr;
700
701 if (!_ILIsDesktop(pidlFolder))
702 {
703 hr = desktop->BindToObject(pidlFolder, NULL, IID_PPV_ARG(IShellFolder, &folder));
705 return hr;
706 }
707
708 {
709 IShellFolder *psfBind = folder.p ? folder.p : desktop.p;
710 hr = psfBind->ParseDisplayName(NULL, pbc, const_cast<LPWSTR>(pszName), NULL, &pidlChild, NULL);
711 }
713 return hr;
714
715 return SHCreateItemFromIDList(pidlChild, riid, ppv);
716}
717
718/***********************************************************************
719 * SHCreateItemInKnownFolder [SHELL32.@]
720 */
722 REFKNOWNFOLDERID rfid,
723 DWORD flags,
725 PIDLIST_ABSOLUTE *pidl);
726
733 _Out_ void **ppv)
734{
737 HRESULT hr;
738
739 TRACE("(%s,%lx,%s,%s,%p)\n", debugstr_guid(&kfid), dwFlags, debugstr_w(pszFileName),
741
742 if (!ppv)
743 return E_POINTER;
744 *ppv = NULL;
745
746 hr = SHGetKnownFolderIDList(kfid, dwFlags, NULL, &pidl);
747 if (hr != S_OK)
748 return hr;
749
752 return hr;
753
754 if (pszFileName)
756 else
757 hr = parent->QueryInterface(riid, ppv);
758
759 return hr;
760}
761
762/***********************************************************************
763 * SHGetItemFromObject [SHELL32.@]
764 */
767{
769 HRESULT hr;
770
771 TRACE("(%p,%s,%p)\n", punk, debugstr_guid(&riid), ppv);
772
773 hr = SHGetIDListFromObject(punk, &pidl);
774 if (SUCCEEDED(hr))
776 return hr;
777}
778
779/***********************************************************************
780 * SHGetPropertyStoreFromParsingName [SHELL32.@]
781 */
784 _In_ PCWSTR pszPath,
785 _In_opt_ IBindCtx *pbc,
786 _In_ GETPROPERTYSTOREFLAGS flags,
788 _Out_ void **ppv)
789{
791 HRESULT hr;
792
793 TRACE("(%s,%p,%#x,%s,%p)\n", debugstr_w(pszPath), pbc, flags, debugstr_guid(&riid), ppv);
794
795 if (!ppv)
796 return E_POINTER;
797 *ppv = NULL;
798
800 if (SUCCEEDED(hr))
801 hr = item->GetPropertyStore(flags, riid, ppv);
802
803 return hr;
804}
805
806#endif /* DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA */
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define IID_PPV_ARG(Itype, ppType)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define CF_HDROP
Definition: constants.h:410
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define FIXME(fmt,...)
Definition: precomp.h:53
#define EXTERN_C
Definition: basetyps.h:12
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
T * Detach()
Definition: atlcomcli.h:186
STDMETHOD() BindToHandler(IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut) override
Definition: CShellItem.cpp:109
STDMETHOD() GetPropertyDescriptionList(_In_ REFPROPERTYKEY keyType, _In_ REFIID riid, _Out_ void **ppv) override
Definition: CShellItem.cpp:270
STDMETHOD() Compare(IShellItem *oth, SICHINTF hint, int *piOrder) override
Definition: CShellItem.cpp:199
STDMETHOD() GetAttributes(SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs) override
Definition: CShellItem.cpp:173
STDMETHOD() GetUInt32(_In_ REFPROPERTYKEY key, _Out_ ULONG *pui) override
Definition: CShellItem.cpp:361
STDMETHOD() GetInt32(_In_ REFPROPERTYKEY key, _Out_ int *pi) override
Definition: CShellItem.cpp:349
STDMETHOD() GetString(_In_ REFPROPERTYKEY key, _Out_ LPWSTR *ppsz) override
Definition: CShellItem.cpp:337
STDMETHOD() GetPropertyStoreForKeys(const PROPERTYKEY *rgKeys, _In_ UINT cKeys, _In_ GETPROPERTYSTOREFLAGS flags, _In_ REFIID riid, _Out_ void **ppv) override
Definition: CShellItem.cpp:259
STDMETHOD() GetBool(_In_ REFPROPERTYKEY key, _Out_ BOOL *pf) override
Definition: CShellItem.cpp:385
STDMETHOD() GetProperty(_In_ REFPROPERTYKEY key, _Out_ PROPVARIANT *ppropvar) override
Definition: CShellItem.cpp:286
STDMETHOD() GetClassID(CLSID *pClassID) override
Definition: CShellItem.cpp:397
LPITEMIDLIST m_pidl
Definition: CShellItem.h:32
STDMETHOD() GetDisplayName(SIGDN sigdnName, LPWSTR *ppszName) override
Definition: CShellItem.cpp:168
HRESULT get_parent_shellfolder(IShellFolder **ppsf)
Definition: CShellItem.cpp:59
STDMETHOD() GetPropertyStore(_In_ GETPROPERTYSTOREFLAGS flags, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:236
HRESULT get_property_from_folder(REFPROPERTYKEY key, VARIANT *pvar)
Definition: CShellItem.cpp:99
HRESULT get_shellfolder(IBindCtx *pbc, REFIID riid, void **ppvOut)
Definition: CShellItem.cpp:77
HRESULT get_converted_property(REFPROPERTYKEY key, PROPVARIANT *ppropvar, VARTYPE vt)
Definition: CShellItem.cpp:299
STDMETHOD() GetCLSID(_In_ REFPROPERTYKEY key, _Out_ CLSID *pclsid) override
Definition: CShellItem.cpp:311
STDMETHOD() SetIDList(PCIDLIST_ABSOLUTE pidl) override
Definition: CShellItem.cpp:405
STDMETHOD() GetFileTime(_In_ REFPROPERTYKEY key, _Out_ FILETIME *pft) override
Definition: CShellItem.cpp:324
STDMETHOD() GetIDList(PIDLIST_ABSOLUTE *ppidl) override
Definition: CShellItem.cpp:422
STDMETHOD() Update(_In_ IBindCtx *pbc) override
Definition: CShellItem.cpp:280
STDMETHOD() GetParent(IShellItem **ppsi) override
Definition: CShellItem.cpp:151
STDMETHOD() GetPropertyStoreWithCreateObject(_In_ GETPROPERTYSTOREFLAGS flags, _In_ IUnknown *punkCreateObject, _In_ REFIID riid, _Out_ void **ppv) override
Definition: CShellItem.cpp:246
STDMETHOD() GetUInt64(_In_ REFPROPERTYKEY key, _Out_ ULONGLONG *pull) override
Definition: CShellItem.cpp:373
HRESULT get_parent_pidl(LPITEMIDLIST *parent_pidl)
Definition: CShellItem.cpp:38
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
Definition: combase.c:709
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
unsigned short VARTYPE
Definition: compat.h:2254
#define MultiByteToWideChar
Definition: compat.h:110
@ VT_UI8
Definition: compat.h:2315
@ VT_CLSID
Definition: compat.h:2337
@ VT_LPWSTR
Definition: compat.h:2325
@ VT_I4
Definition: compat.h:2298
@ VT_FILETIME
Definition: compat.h:2329
@ VT_BOOL
Definition: compat.h:2306
@ VT_UI4
Definition: compat.h:2313
@ VT_EMPTY
Definition: compat.h:2295
#define lstrlenW
Definition: compat.h:750
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:90
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2014
EXTERN_C HRESULT WINAPI SHCreateItemFromParsingName(_In_ PCWSTR pszPath, _In_opt_ IBindCtx *pbc, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:537
EXTERN_C HRESULT WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE token, PIDLIST_ABSOLUTE *pidl)
Definition: shellpath.c:5661
EXTERN_C HRESULT WINAPI SHCreateItemFromRelativeName(_In_ IShellItem *parent, _In_ PCWSTR pszName, _In_opt_ IBindCtx *pbc, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:671
EXTERN_C HRESULT WINAPI SHCreateItemInKnownFolder(_In_ REFKNOWNFOLDERID kfid, _In_ DWORD dwFlags, _In_opt_ PCWSTR pszFileName, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:728
EXTERN_C HRESULT WINAPI SHGetItemFromObject(_In_ IUnknown *punk, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:766
EXTERN_C HRESULT WINAPI SHGetItemFromDataObject(_In_ IDataObject *pdtobj, _In_ DATAOBJ_GET_ITEM_FLAGS dwFlags, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:563
HRESULT WINAPI SHCreateShellItem(PCIDLIST_ABSOLUTE pidlParent, IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi)
Definition: CShellItem.cpp:433
EXTERN_C HRESULT WINAPI SHGetPropertyStoreFromParsingName(_In_ PCWSTR pszPath, _In_opt_ IBindCtx *pbc, _In_ GETPROPERTYSTOREFLAGS flags, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:783
EXTERN_C HRESULT WINAPI SHCreateItemFromIDList(_In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:512
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
return ret
Definition: mutex.c:147
r parent
Definition: btrfs.c:3010
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLdouble * v
Definition: gl.h:2040
GLbitfield flags
Definition: glext.h:7161
const GLint * first
Definition: glext.h:5794
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 token
Definition: glfuncs.h:210
unsigned int UINT
Definition: sysinfo.c:13
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT ParseDisplayName([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
DWORD SICHINTF
Definition: shobjidl.idl:419
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
const char * filename
Definition: ioapi.h:137
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
#define GUID_NULL
Definition: ks.h:106
if(dx< 0)
Definition: linetemp.h:194
#define HResultFromWin32
Definition: loader.cpp:14
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define ZeroMemory
Definition: minwinbase.h:31
static PROCESS_INFORMATION pi
Definition: debugger.c:2303
static PMONITORUI pui
Definition: localui.c:42
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define V_BOOL(A)
Definition: oleauto.h:224
const GUID IID_IDataObject
short WCHAR
Definition: pedump.c:58
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1682
HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName)
Definition: pidl.c:1610
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1548
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1504
HRESULT SHELL_PropVariantChangeType(_Out_ PROPVARIANT *ppvDest, _In_ REFPROPVARIANT pvSrc, _In_ VARTYPE vt)
Definition: prop.cpp:207
HRESULT SHELL_VariantToPropVariant(_In_ const VARIANT *pVar, _Out_ PROPVARIANT *pPropVar)
Definition: prop.cpp:119
PROPERTYKEY * REFPROPERTYKEY
Definition: propsys.idl:40
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
SYMCRYPT_XMSSKEY_TYPE keyType
Definition: sc_lib.h:4525
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:775
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:770
static IBindCtx void **static IBindCtx void **static void **static IShellFolder IShellItem **static IShellFolder LPCITEMIDLIST IShellItemArray **static PCIDLIST_ABSOLUTE IShellItemArray **static void **static void **static PWSTR *static PWSTR *static DATAOBJ_GET_ITEM_FLAGS
Definition: shlfolder.c:60
struct CIDA * LPIDA
static const WCHAR CFSTR_SHELLIDLISTW[]
Definition: shlobj.h:545
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:651
SIGDN sigdnName
Definition: shobjidl.idl:651
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
Definition: shlobj.h:611
UINT cidl
Definition: shlobj.h:611
DWORD pFiles
Definition: shlobj.h:2354
BOOL fWide
Definition: shlobj.h:2357
Definition: scsiwmi.h:51
Definition: dsound.c:943
Definition: fci.c:112
Definition: copy.c:22
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
uint64_t ULONGLONG
Definition: typedefs.h:67
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG
Definition: typedefs.h:59
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44
DWORD hint
Definition: vfdcmd.c:88
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define MK_E_NOOBJECT
Definition: winerror.h:3898
#define E_NOINTERFACE
Definition: winerror.h:3479
#define HRESULT_FACILITY(hr)
Definition: winerror.h:191
#define FACILITY_WIN32
Definition: winerror.h:29
#define E_POINTER
Definition: winerror.h:3480
#define SCODE_CODE(sc)
Definition: winerror.h:189
#define ERROR_NOT_FOUND
Definition: winerror.h:1014