ReactOS 0.4.17-dev-573-g8315b8c
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
26
28 m_pidl(NULL)
29{
30}
31
33{
35}
36
38{
39 *parent_pidl = ILClone(m_pidl);
40 if (*parent_pidl)
41 {
42 if (ILRemoveLastID(*parent_pidl))
43 return S_OK;
44 else
45 {
46 ILFree(*parent_pidl);
47 *parent_pidl = NULL;
48 return E_INVALIDARG;
49 }
50 }
51 else
52 {
53 *parent_pidl = NULL;
54 return E_OUTOFMEMORY;
55 }
56}
57
59{
60 HRESULT hr;
61 LPITEMIDLIST parent_pidl;
63
64 hr = get_parent_pidl(&parent_pidl);
65 if (SUCCEEDED(hr))
66 {
67 hr = SHGetDesktopFolder(&desktop);
68 if (SUCCEEDED(hr))
69 hr = desktop->BindToObject(parent_pidl, NULL, IID_PPV_ARG(IShellFolder, ppsf));
70 ILFree(parent_pidl);
71 }
72
73 return hr;
74}
75
77{
79 CComPtr<IShellFolder> psfDesktop;
81
82 ret = SHGetDesktopFolder(&psfDesktop);
84 return ret;
85
87 psf = psfDesktop;
88 else
89 {
90 ret = psfDesktop->BindToObject(m_pidl, pbc, IID_PPV_ARG(IShellFolder, &psf));
92 return ret;
93 }
94
95 return psf->QueryInterface(riid, ppvOut);
96}
97
99{
100 HRESULT ret;
101 TRACE("(%p, %p,%s,%p,%p)\n", this, pbc, shdebugstr_guid(&rbhid), riid, ppvOut);
102
103 *ppvOut = NULL;
104 if (IsEqualGUID(rbhid, BHID_SFObject))
105 {
106 return get_shellfolder(pbc, riid, ppvOut);
107 }
108 else if (IsEqualGUID(rbhid, BHID_SFUIObject))
109 {
110 CComPtr<IShellFolder> psf_parent;
111 if (_ILIsDesktop(m_pidl))
112 ret = SHGetDesktopFolder(&psf_parent);
113 else
114 ret = get_parent_shellfolder(&psf_parent);
116 return ret;
117
119 return psf_parent->GetUIObjectOf(NULL, 1, &pidl, riid, NULL, ppvOut);
120 }
121 else if (IsEqualGUID(rbhid, BHID_DataObject))
122 {
123 return BindToHandler(pbc, BHID_SFUIObject, IID_IDataObject, ppvOut);
124 }
125 else if (IsEqualGUID(rbhid, BHID_SFViewObject))
126 {
130 return ret;
131
132 return psf->CreateViewObject(NULL, riid, ppvOut);
133 }
134
135 FIXME("Unsupported BHID %s.\n", debugstr_guid(&rbhid));
136
137 return MK_E_NOOBJECT;
138}
139
141{
142 HRESULT hr;
143 LPITEMIDLIST parent_pidl;
144
145 TRACE("(%p,%p)\n", this, ppsi);
146
147 hr = get_parent_pidl(&parent_pidl);
148 if (SUCCEEDED(hr))
149 {
150 hr = SHCreateShellItem(NULL, NULL, parent_pidl, ppsi);
151 ILFree(parent_pidl);
152 }
153
154 return hr;
155}
156
158{
160}
161
163{
164 CComPtr<IShellFolder> parent_folder;
165 LPCITEMIDLIST child_pidl;
166 HRESULT hr;
167
168 TRACE("(%p,%x,%p)\n", this, sfgaoMask, psfgaoAttribs);
169
170 if (_ILIsDesktop(m_pidl))
171 hr = SHGetDesktopFolder(&parent_folder);
172 else
173 hr = get_parent_shellfolder(&parent_folder);
175 return hr;
176
177 child_pidl = ILFindLastID(m_pidl);
178 *psfgaoAttribs = sfgaoMask;
179 hr = parent_folder->GetAttributesOf(1, &child_pidl, psfgaoAttribs);
180 *psfgaoAttribs &= sfgaoMask;
181
183 return hr;
184
185 return (sfgaoMask == *psfgaoAttribs) ? S_OK : S_FALSE;
186}
187
189{
190 HRESULT hr;
192 CComPtr<IShellFolder> psfDesktop;
193 LPITEMIDLIST pidl;
194
195 TRACE("(%p,%p,%x,%p)\n", this, oth, hint, piOrder);
196
197 if (piOrder == NULL || oth == NULL)
198 return E_POINTER;
199
200 hr = oth->QueryInterface(IID_PPV_ARG(IPersistIDList, &pIDList));
201 if (SUCCEEDED(hr))
202 {
203 hr = pIDList->GetIDList(&pidl);
204 if (SUCCEEDED(hr))
205 {
206 hr = SHGetDesktopFolder(&psfDesktop);
207 if (SUCCEEDED(hr))
208 {
209 hr = psfDesktop->CompareIDs(hint, m_pidl, pidl);
210 *piOrder = (int)(short)SCODE_CODE(hr);
211 }
212 ILFree(pidl);
213 }
214 }
215
216 if(FAILED(hr))
217 return hr;
218
219 if(*piOrder)
220 return S_FALSE;
221 else
222 return S_OK;
223}
224
226{
227 TRACE("(%p,%p)\n", this, pClassID);
228
229 *pClassID = CLSID_ShellItem;
230 return S_OK;
231}
232
234{
235 LPITEMIDLIST new_pidl;
236
237 TRACE("(%p,%p)\n", this, pidlx);
238
239 new_pidl = ILClone(pidlx);
240 if (new_pidl)
241 {
242 ILFree(m_pidl);
243 m_pidl = new_pidl;
244 return S_OK;
245 }
246 else
247 return E_OUTOFMEMORY;
248}
249
251{
252 TRACE("(%p,%p)\n", this, ppidl);
253
254 *ppidl = ILClone(m_pidl);
255 if (*ppidl)
256 return S_OK;
257 else
258 return E_OUTOFMEMORY;
259}
260
262 IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi)
263{
264 HRESULT hr;
265 CComPtr<IShellItem> newShellItem;
266 LPITEMIDLIST new_pidl;
267 CComPtr<IPersistIDList> newPersistIDList;
268
269 TRACE("(%p,%p,%p,%p)\n", pidlParent, psfParent, pidl, ppsi);
270
271 *ppsi = NULL;
272
273 if (!pidl)
274 return E_INVALIDARG;
275
276 if (pidlParent || psfParent)
277 {
278 LPITEMIDLIST temp_parent = NULL;
279 if (!pidlParent)
280 {
281 CComPtr<IPersistFolder2> ppf2Parent;
282
283 if (FAILED(psfParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2Parent))))
284 {
285 FIXME("couldn't get IPersistFolder2 interface of parent\n");
286 return E_NOINTERFACE;
287 }
288
289 if (FAILED(ppf2Parent->GetCurFolder(&temp_parent)))
290 {
291 FIXME("couldn't get parent PIDL\n");
292 return E_NOINTERFACE;
293 }
294
295 pidlParent = temp_parent;
296 }
297
298 new_pidl = ILCombine(pidlParent, pidl);
299 ILFree(temp_parent);
300
301 if (!new_pidl)
302 return E_OUTOFMEMORY;
303 }
304 else
305 {
306 new_pidl = ILClone(pidl);
307 if (!new_pidl)
308 return E_OUTOFMEMORY;
309 }
310
311 hr = CShellItem::_CreatorClass::CreateInstance(NULL, IID_PPV_ARG(IShellItem, &newShellItem));
312 if (FAILED(hr))
313 {
314 ILFree(new_pidl);
315 return hr;
316 }
317 hr = newShellItem->QueryInterface(IID_PPV_ARG(IPersistIDList, &newPersistIDList));
318 if (FAILED(hr))
319 {
320 ILFree(new_pidl);
321 return hr;
322 }
323 hr = newPersistIDList->SetIDList(new_pidl);
324 if (FAILED(hr))
325 {
326 ILFree(new_pidl);
327 return hr;
328 }
329 ILFree(new_pidl);
330
331 *ppsi = newShellItem.Detach();
332
333 return hr;
334}
335
336/***********************************************************************
337 * SHCreateItemFromIDList [SHELL32.@]
338 */
341{
343 HRESULT hr;
344
345 TRACE("(%p,%s,%p)\n", pidl, debugstr_guid(&riid), ppv);
346
347 if (!ppv)
348 return E_POINTER;
349 *ppv = NULL;
350
351 if (!pidl)
352 return E_INVALIDARG;
353
354 hr = SHCreateShellItem(NULL, NULL, pidl, &item);
356 return hr;
357
358 return item->QueryInterface(riid, ppv);
359}
360
361/***********************************************************************
362 * SHCreateItemFromParsingName [SHELL32.@]
363 */
366 _In_ PCWSTR pszPath,
367 _In_opt_ IBindCtx *pbc,
369 _Out_ void **ppv)
370{
372 HRESULT hr;
373
374 TRACE("(%s,%p,%s,%p)\n", debugstr_w(pszPath), pbc, debugstr_guid(&riid), ppv);
375
376 if (!ppv)
377 return E_POINTER;
378 *ppv = NULL;
379
380 hr = SHParseDisplayName(pszPath, pbc, &pidl, 0, NULL);
381 if (SUCCEEDED(hr))
383
384 return hr;
385}
386
387/***********************************************************************
388 * SHGetItemFromDataObject [SHELL32.@]
389 */
392 _In_ IDataObject *pdtobj,
395 _Out_ void **ppv)
396{
397 FORMATETC fmt;
398 STGMEDIUM medium = { 0 };
399 HRESULT hr;
400
401 TRACE("(%p,%x,%s,%p)\n", pdtobj, dwFlags, debugstr_guid(&riid), ppv);
402
403 if (!pdtobj)
404 return E_INVALIDARG;
405
406 fmt.cfFormat = (CLIPFORMAT)RegisterClipboardFormatW(CFSTR_SHELLIDLISTW);
407 fmt.ptd = NULL;
408 fmt.dwAspect = DVASPECT_CONTENT;
409 fmt.lindex = -1;
410 fmt.tymed = TYMED_HGLOBAL;
411
412 hr = pdtobj->GetData(&fmt, &medium);
413 if (SUCCEEDED(hr))
414 {
415 LPIDA pida = (LPIDA)GlobalLock(medium.hGlobal);
416 if (pida && pida->cidl >= 1 &&
417 ((pida->cidl > 1 && !(dwFlags & DOGIF_ONLY_IF_ONE)) || pida->cidl == 1))
418 {
420 HIDA_GetPIDLItem(pida, 0));
421 if (pidl)
422 {
424 ILFree(pidl);
425 }
426 else
427 {
429 }
430 }
431 else
432 {
433 TRACE("Failed to create item, cidl=%u, dwFlags=%#x\n", pida ? pida->cidl : 0, dwFlags);
434 hr = E_FAIL;
435 }
436
437 if (medium.hGlobal)
438 {
439 GlobalUnlock(medium.hGlobal);
440 ReleaseStgMedium(&medium);
441 }
442 }
443
444 if (FAILED(hr) && !(dwFlags & DOGIF_NO_HDROP))
445 {
446 TRACE("Attempting to fall back on CF_HDROP.\n");
447
448 fmt.cfFormat = CF_HDROP;
449 fmt.ptd = NULL;
450 fmt.dwAspect = DVASPECT_CONTENT;
451 fmt.lindex = -1;
452 fmt.tymed = TYMED_HGLOBAL;
453 ZeroMemory(&medium, sizeof(medium));
454
455 hr = pdtobj->GetData(&fmt, &medium);
456 if (SUCCEEDED(hr))
457 {
458 DROPFILES *df = (DROPFILES *)GlobalLock(medium.hGlobal);
459 hr = E_FAIL;
460 if (df)
461 {
462 LPBYTE files = (LPBYTE)df + df->pFiles;
463 if (!df->fWide)
464 {
465 PCSTR first = (PCSTR)files;
466 BOOL multi = *(first + lstrlenA(first) + 1) != 0;
467 if (!(multi && (dwFlags & DOGIF_ONLY_IF_ONE)))
468 {
472 }
473 }
474 else
475 {
476 PCWSTR first = (PCWSTR)files;
477 BOOL multi = *(first + lstrlenW(first) + 1) != 0;
478 if (!(multi && (dwFlags & DOGIF_ONLY_IF_ONE)))
480 }
481 GlobalUnlock(medium.hGlobal);
482 }
483 ReleaseStgMedium(&medium);
484 }
485 }
486
487 if (FAILED(hr) && !(dwFlags & DOGIF_NO_URL))
488 FIXME("Failed to create item, should try CF_URL.\n");
489
490 return hr;
491}
492
493#if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA
494
495/***********************************************************************
496 * SHCreateItemFromRelativeName [SHELL32.@]
497 */
501 _In_ PCWSTR pszName,
502 _In_opt_ IBindCtx *pbc,
504 _Out_ void **ppv)
505{
506 CComPtr<IShellFolder> desktop;
508 CComHeapPtr<ITEMIDLIST> pidlFolder;
509 CComHeapPtr<ITEMIDLIST> pidlChild;
510 HRESULT hr;
511
512 TRACE("(%p,%s,%p,%s,%p)\n", parent, debugstr_w(pszName), pbc, debugstr_guid(&riid), ppv);
513
514 if (!ppv)
515 return E_POINTER;
516 *ppv = NULL;
517
518 if (!pszName)
519 return E_INVALIDARG;
520
521 hr = SHGetIDListFromObject(parent, &pidlFolder);
522 if (hr != S_OK)
523 return hr;
524
525 hr = SHGetDesktopFolder(&desktop);
527 return hr;
528
529 if (!_ILIsDesktop(pidlFolder))
530 {
531 hr = desktop->BindToObject(pidlFolder, NULL, IID_PPV_ARG(IShellFolder, &folder));
533 return hr;
534 }
535
536 {
537 IShellFolder *psfBind = folder.p ? folder.p : desktop.p;
538 hr = psfBind->ParseDisplayName(NULL, pbc, const_cast<LPWSTR>(pszName), NULL, &pidlChild, NULL);
539 }
541 return hr;
542
543 return SHCreateItemFromIDList(pidlChild, riid, ppv);
544}
545
546/***********************************************************************
547 * SHCreateItemInKnownFolder [SHELL32.@]
548 */
550 REFKNOWNFOLDERID rfid,
551 DWORD flags,
553 PIDLIST_ABSOLUTE *pidl);
554
561 _Out_ void **ppv)
562{
563 TRACE("(%s,%lx,%s,%s,%p)\n", debugstr_guid(&kfid), dwFlags, debugstr_w(pszFileName),
565 return E_NOTIMPL;
566 //TODO: Import SHGetKnownFolderIDList from wine
567#if 0
570 HRESULT hr;
571
572 TRACE("(%s,%lx,%s,%s,%p)\n", debugstr_guid(&kfid), dwFlags, debugstr_w(pszFileName),
574
575 if (!ppv)
576 return E_POINTER;
577 *ppv = NULL;
578
579 hr = SHGetKnownFolderIDList(kfid, dwFlags, NULL, &pidl);
580 if (hr != S_OK)
581 return hr;
582
585 return hr;
586
587 if (pszFileName)
589 else
590 hr = parent->QueryInterface(riid, ppv);
591
592 return hr;
593#endif
594}
595
596/***********************************************************************
597 * SHGetItemFromObject [SHELL32.@]
598 */
601{
603 HRESULT hr;
604
605 TRACE("(%p,%s,%p)\n", punk, debugstr_guid(&riid), ppv);
606
607 hr = SHGetIDListFromObject(punk, &pidl);
608 if (SUCCEEDED(hr))
610 return hr;
611}
612
613/***********************************************************************
614 * SHGetPropertyStoreFromParsingName [SHELL32.@]
615 */
618 _In_ PCWSTR pszPath,
619 _In_opt_ IBindCtx *pbc,
620 _In_ GETPROPERTYSTOREFLAGS flags,
622 _Out_ void **ppv)
623{
625 HRESULT hr;
626
627 TRACE("(%s,%p,%#x,%s,%p)\n", debugstr_w(pszPath), pbc, flags, debugstr_guid(&riid), ppv);
628
629 if (!ppv)
630 return E_POINTER;
631 *ppv = NULL;
632
634 if (SUCCEEDED(hr))
635 hr = item->GetPropertyStore(flags, riid, ppv);
636
637 return hr;
638}
639
640#endif /* DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA */
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
EXTERN_C HRESULT WINAPI SHCreateItemFromParsingName(_In_ PCWSTR pszPath, _In_opt_ IBindCtx *pbc, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:365
EXTERN_C HRESULT WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE token, PIDLIST_ABSOLUTE *pidl)
EXTERN_C HRESULT WINAPI SHCreateItemFromRelativeName(_In_ IShellItem *parent, _In_ PCWSTR pszName, _In_opt_ IBindCtx *pbc, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:499
EXTERN_C HRESULT WINAPI SHCreateItemInKnownFolder(_In_ REFKNOWNFOLDERID kfid, _In_ DWORD dwFlags, _In_opt_ PCWSTR pszFileName, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:556
EXTERN_C HRESULT WINAPI SHGetItemFromObject(_In_ IUnknown *punk, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:600
EXTERN_C HRESULT WINAPI SHGetItemFromDataObject(_In_ IDataObject *pdtobj, _In_ DATAOBJ_GET_ITEM_FLAGS dwFlags, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:391
HRESULT WINAPI SHCreateShellItem(PCIDLIST_ABSOLUTE pidlParent, IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi)
Definition: CShellItem.cpp:261
EXTERN_C HRESULT WINAPI SHGetPropertyStoreFromParsingName(_In_ PCWSTR pszPath, _In_opt_ IBindCtx *pbc, _In_ GETPROPERTYSTOREFLAGS flags, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:617
EXTERN_C HRESULT WINAPI SHCreateItemFromIDList(_In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:340
#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
T * Detach()
Definition: atlcomcli.h:186
STDMETHOD() BindToHandler(IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut) override
Definition: CShellItem.cpp:98
STDMETHOD() Compare(IShellItem *oth, SICHINTF hint, int *piOrder) override
Definition: CShellItem.cpp:188
STDMETHOD() GetAttributes(SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs) override
Definition: CShellItem.cpp:162
STDMETHOD() GetClassID(CLSID *pClassID) override
Definition: CShellItem.cpp:225
LPITEMIDLIST m_pidl
Definition: CShellItem.h:32
STDMETHOD() GetDisplayName(SIGDN sigdnName, LPWSTR *ppszName) override
Definition: CShellItem.cpp:157
HRESULT get_parent_shellfolder(IShellFolder **ppsf)
Definition: CShellItem.cpp:58
HRESULT get_shellfolder(IBindCtx *pbc, REFIID riid, void **ppvOut)
Definition: CShellItem.cpp:76
STDMETHOD() SetIDList(PCIDLIST_ABSOLUTE pidl) override
Definition: CShellItem.cpp:233
STDMETHOD() GetIDList(PIDLIST_ABSOLUTE *ppidl) override
Definition: CShellItem.cpp:250
STDMETHOD() GetParent(IShellItem **ppsi) override
Definition: CShellItem.cpp:140
HRESULT get_parent_pidl(LPITEMIDLIST *parent_pidl)
Definition: CShellItem.cpp:37
#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
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrlenW
Definition: compat.h:750
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2014
#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:146
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
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
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:405
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
if(dx< 0)
Definition: linetemp.h:194
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define ZeroMemory
Definition: minwinbase.h:31
_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
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
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:721
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:716
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:516
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:637
SIGDN sigdnName
Definition: shobjidl.idl:637
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:582
UINT cidl
Definition: shlobj.h:582
DWORD pFiles
Definition: shlobj.h:2325
BOOL fWide
Definition: shlobj.h:2328
Definition: scsiwmi.h:51
Definition: dsound.c:943
Definition: fci.c:116
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
const char * PCSTR
Definition: typedefs.h:52
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 E_POINTER
Definition: winerror.h:3480
#define SCODE_CODE(sc)
Definition: winerror.h:189
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
#define IID_PPV_ARG(Itype, ppType)