ReactOS 0.4.15-dev-7788-g1ad9096
CDesktopFolder.cpp
Go to the documentation of this file.
1/*
2 * Virtual Desktop Folder
3 *
4 * Copyright 1997 Marcus Meissner
5 * Copyright 1998, 1999, 2002 Juergen Schmied
6 * Copyright 2009 Andrew Hill
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
27/*
28CDesktopFolder should create two file system folders internally, one representing the
29user's desktop folder, and the other representing the common desktop folder. It should
30also create a CRegFolder to represent the virtual items that exist only in the registry.
31The CRegFolder is aggregated by the CDesktopFolder, and queries for the CLSID_IShellFolder,
32CLSID_IShellFolder2, or CLSID_IShellIconOverlay interfaces prefer the CRegFolder
33implementation.
34The CDesktopFolderEnum class should create two enumerators, one for each of the file
35system folders, and enumerate the contents of each folder. Since the CRegFolder
36implementation of IShellFolder::EnumObjects enumerates the virtual items, the
37CDesktopFolderEnum is only responsible for returning the physical items.
38CDesktopFolderEnum is incorrect where it filters My Computer from the enumeration
39if the new start menu is used. The CDesktopViewCallback is responsible for filtering
40it from the view by handling the IncludeObject query to return S_FALSE. The enumerator
41always shows My Computer.
42*/
43
44/* Undocumented functions from shdocvw */
45extern "C" HRESULT WINAPI IEParseDisplayNameWithBCW(DWORD codepage, LPCWSTR lpszDisplayName, LPBC pbc, LPITEMIDLIST *ppidl);
46
47static const WCHAR ClassicStartMenuW[] = L"SOFTWARE\\Microsoft\\Windows\\"
48 L"CurrentVersion\\Explorer\\HideDesktopIcons\\ClassicStartMenu";
49
50static INT
52{
53 DWORD Result, dwResult;
54 dwResult = sizeof(DWORD);
55
56 if (RegGetValueW(HKEY_CURRENT_USER, /* FIXME use NewStartPanel when activated */
58 iid,
60 NULL,
61 &Result,
62 &dwResult) != ERROR_SUCCESS)
63 {
64 return -1;
65 }
66
67 return Result;
68}
69
71{
72 GUID const *clsid = _ILGetGUIDPointer (pidl);
73 if (!clsid)
74 return -1;
75
76 WCHAR pwszGuid[CHARS_IN_GUID];
77 SHELL32_GUIDToStringW(*clsid, pwszGuid);
78 return IsNamespaceExtensionHidden(pwszGuid);
79}
80
82 public CEnumIDListBase
83{
84 private:
85// CComPtr fDesktopEnumerator;
86// CComPtr fCommonDesktopEnumerator;
87 public:
88
90 {
91 DWORD dwResult;
92 HKEY hkey;
93 DWORD j = 0, dwVal, Val, dwType, dwIID;
94 LONG r;
95 WCHAR iid[50];
96 LPITEMIDLIST pidl;
97
98 dwResult = RegOpenKeyExW(hKeyRoot, ClassicStartMenuW, 0, KEY_READ, &hkey);
99 if (dwResult != ERROR_SUCCESS)
100 return;
101
102 while(1)
103 {
104 dwVal = sizeof(Val);
105 dwIID = sizeof(iid) / sizeof(WCHAR);
106
107 r = RegEnumValueW(hkey, j++, iid, &dwIID, NULL, &dwType, (LPBYTE)&Val, &dwVal);
108 if (r != ERROR_SUCCESS)
109 break;
110
111 if (Val == 0 && dwType == REG_DWORD)
112 {
113 pidl = _ILCreateGuidFromStrW(iid);
114 if (pidl != NULL)
115 {
116 if (!HasItemWithCLSID(pidl))
117 AddToEnumList(pidl);
118 else
119 SHFree(pidl);
120 }
121 }
122 }
123 RegCloseKey(hkey);
124 }
125
126 HRESULT WINAPI Initialize(DWORD dwFlags,IEnumIDList * pRegEnumerator, IEnumIDList *pDesktopEnumerator, IEnumIDList *pCommonDesktopEnumerator)
127 {
128 BOOL ret = TRUE;
129 LPITEMIDLIST pidl;
130
131 static const WCHAR MyDocumentsClassString[] = L"{450D8FBA-AD25-11D0-98A8-0800361B1103}";
132 static const WCHAR InternetClassString[] = L"{871C5380-42A0-1069-A2EA-08002B30309D}";
133
134 TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags);
135
136 /* enumerate the root folders */
137 if (dwFlags & SHCONTF_FOLDERS)
138 {
140 if (IsNamespaceExtensionHidden(MyDocumentsClassString) < 1)
142 if (IsNamespaceExtensionHidden(InternetClassString) < 1)
144
145 DWORD dwFetched;
146 while((S_OK == pRegEnumerator->Next(1, &pidl, &dwFetched)) && dwFetched)
147 {
148 if (IsNamespaceExtensionHidden(pidl) < 1)
149 {
150 if (!HasItemWithCLSID(pidl))
151 AddToEnumList(pidl);
152 else
153 SHFree(pidl);
154 }
155 }
158 }
159
160 /* Enumerate the items in the two fs folders */
161 AppendItemsFromEnumerator(pDesktopEnumerator);
162 AppendItemsFromEnumerator(pCommonDesktopEnumerator);
163
164 return ret ? S_OK : E_FAIL;
165 }
166
167
169 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
171};
172
173int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll);
174
175static const shvheader DesktopSFHeader[] = {
182};
183
184#define DESKTOPSHELLVIEWCOLUMNS 6
185
187 SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
188 SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE;
190 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
191 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK;
193 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
194 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK;
195
197 sPathTarget(NULL),
198 pidlRoot(NULL)
199{
200}
201
203{
204}
205
207{
208 WCHAR szMyPath[MAX_PATH];
209 HRESULT hr;
210
211 /* Create the root pidl */
213 if (!pidlRoot)
214 return E_OUTOFMEMORY;
215
216 /* Create the inner fs folder */
218 &CLSID_ShellFSFolder,
222 return hr;
223
224 /* Create the inner shared fs folder. Dont fail on failure. */
226 &CLSID_ShellFSFolder,
230 return hr;
231
232 /* Create the inner reg folder */
233 hr = CRegFolder_CreateInstance(&CLSID_ShellDesktop,
234 pidlRoot,
235 L"",
236 L"Desktop",
239 return hr;
240
241 /* Cache the path to the user desktop directory */
243 return E_UNEXPECTED;
244
245 sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR));
246 if (!sPathTarget)
247 return E_OUTOFMEMORY;
248
249 wcscpy(sPathTarget, szMyPath);
250 return S_OK;
251}
252
254{
255 WCHAR szFileName[MAX_PATH];
256
257 if (_ILIsSpecialFolder(pidl))
258 return m_regFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf));
259
260 lstrcpynW(szFileName, sPathTarget, MAX_PATH - 1);
261 PathAddBackslashW(szFileName);
262 int cLen = wcslen(szFileName);
263
264 if (!_ILSimpleGetTextW(pidl, szFileName + cLen, MAX_PATH - cLen))
265 return E_FAIL;
266
268 return m_SharedDesktopFSFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf));
269 else
270 return m_DesktopFSFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf));
271}
272
273/**************************************************************************
274 * CDesktopFolder::ParseDisplayName
275 *
276 * NOTES
277 * "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" and "" binds
278 * to MyComputer
279 */
281 HWND hwndOwner,
282 LPBC pbc,
283 LPOLESTR lpszDisplayName,
284 DWORD *pchEaten,
285 PIDLIST_RELATIVE *ppidl,
286 DWORD *pdwAttributes)
287{
288 LPCWSTR szNext = NULL;
289 LPITEMIDLIST pidlTemp = NULL;
290 PARSEDURLW urldata;
291 HRESULT hr = S_OK;
292
293 TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
294 this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
295 pchEaten, ppidl, pdwAttributes);
296
297 if (!ppidl)
298 return E_INVALIDARG;
299
300 *ppidl = NULL;
301
302 if (!lpszDisplayName)
303 return E_INVALIDARG;
304
305 if (pchEaten)
306 *pchEaten = 0; /* strange but like the original */
307
308 urldata.cbSize = sizeof(urldata);
309
310 if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':')
311 {
312 return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
313 }
314 else if (PathGetDriveNumberW (lpszDisplayName) >= 0)
315 {
316 /* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */
317 pidlTemp = _ILCreateMyComputer ();
318 szNext = lpszDisplayName;
319 }
320 else if (PathIsUNCW(lpszDisplayName))
321 {
322 pidlTemp = _ILCreateNetwork();
323 szNext = lpszDisplayName;
324 }
325 else if( (pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName)) )
326 {
327 *ppidl = pidlTemp;
328 return S_OK;
329 }
330 else if (SUCCEEDED(ParseURLW(lpszDisplayName, &urldata)))
331 {
332 if (urldata.nScheme == URL_SCHEME_SHELL) /* handle shell: urls */
333 {
334 TRACE ("-- shell url: %s\n", debugstr_w(urldata.pszSuffix));
335 pidlTemp = _ILCreateGuidFromStrW(urldata.pszSuffix + 2);
336 }
337 else
338 return IEParseDisplayNameWithBCW(CP_ACP, lpszDisplayName, pbc, ppidl);
339 }
340 else
341 {
342 if (*lpszDisplayName)
343 {
344 /* it's a filesystem path on the desktop. Let a FSFolder parse it */
345 hr = m_DesktopFSFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
346 if (SUCCEEDED(hr))
347 return hr;
348
349 return m_SharedDesktopFSFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
350 }
351 else
352 pidlTemp = _ILCreateMyComputer();
353
354 szNext = NULL;
355 }
356
357 if (SUCCEEDED(hr) && pidlTemp)
358 {
359 if (szNext && *szNext)
360 {
361 hr = SHELL32_ParseNextElement(this, hwndOwner, pbc,
362 &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
363 }
364 else
365 {
366 if (pdwAttributes && *pdwAttributes)
367 {
368 GetAttributesOf(1, &pidlTemp, pdwAttributes);
369 }
370 }
371 }
372
373 if (SUCCEEDED(hr))
374 *ppidl = pidlTemp;
375 else
376 *ppidl = NULL;
377
378 TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr);
379
380 return hr;
381}
382
383/**************************************************************************
384 * CDesktopFolder::EnumObjects
385 */
386HRESULT WINAPI CDesktopFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
387{
388 CComPtr<IEnumIDList> pRegEnumerator;
389 CComPtr<IEnumIDList> pDesktopEnumerator;
390 CComPtr<IEnumIDList> pCommonDesktopEnumerator;
391 HRESULT hr;
392
393 hr = m_regFolder->EnumObjects(hwndOwner, dwFlags, &pRegEnumerator);
394 if (FAILED(hr))
395 ERR("EnumObjects for reg folder failed\n");
396
397 hr = m_DesktopFSFolder->EnumObjects(hwndOwner, dwFlags, &pDesktopEnumerator);
398 if (FAILED(hr))
399 ERR("EnumObjects for desktop fs folder failed\n");
400
401 hr = m_SharedDesktopFSFolder->EnumObjects(hwndOwner, dwFlags, &pCommonDesktopEnumerator);
402 if (FAILED(hr))
403 ERR("EnumObjects for shared desktop fs folder failed\n");
404
405 return ShellObjectCreatorInit<CDesktopFolderEnum>(dwFlags,pRegEnumerator, pDesktopEnumerator, pCommonDesktopEnumerator, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
406}
407
408/**************************************************************************
409 * CDesktopFolder::BindToObject
410 */
413 LPBC pbcReserved,
414 REFIID riid,
415 LPVOID *ppvOut)
416{
417 if (!pidl)
418 return E_INVALIDARG;
419
420 CComPtr<IShellFolder2> psf;
421 HRESULT hr = _GetSFFromPidl(pidl, &psf);
423 return hr;
424
425 return psf->BindToObject(pidl, pbcReserved, riid, ppvOut);
426}
427
428/**************************************************************************
429 * CDesktopFolder::BindToStorage
430 */
433 LPBC pbcReserved,
434 REFIID riid,
435 LPVOID *ppvOut)
436{
437 FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n",
438 this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
439
440 *ppvOut = NULL;
441 return E_NOTIMPL;
442}
443
444/**************************************************************************
445 * CDesktopFolder::CompareIDs
446 */
448{
449 bool bIsDesktopFolder1, bIsDesktopFolder2;
450
451 if (!pidl1 || !pidl2)
452 {
453 ERR("Got null pidl pointer (%Ix %p %p)!\n", lParam, pidl1, pidl2);
454 return E_INVALIDARG;
455 }
456
457 bIsDesktopFolder1 = _ILIsDesktop(pidl1);
458 bIsDesktopFolder2 = _ILIsDesktop(pidl2);
459 if (bIsDesktopFolder1 || bIsDesktopFolder2)
460 return MAKE_COMPARE_HRESULT(bIsDesktopFolder1 - bIsDesktopFolder2);
461
462 if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2))
463 return m_regFolder->CompareIDs(lParam, pidl1, pidl2);
464
465 return m_DesktopFSFolder->CompareIDs(lParam, pidl1, pidl2);
466}
467
468/**************************************************************************
469 * CDesktopFolder::CreateViewObject
470 */
472 HWND hwndOwner,
473 REFIID riid,
474 LPVOID *ppvOut)
475{
477
478 TRACE ("(%p)->(hwnd=%p,%s,%p)\n",
479 this, hwndOwner, shdebugstr_guid (&riid), ppvOut);
480
481 if (!ppvOut)
482 return hr;
483
484 *ppvOut = NULL;
485
486 if (IsEqualIID (riid, IID_IDropTarget))
487 {
488 hr = m_DesktopFSFolder->CreateViewObject(hwndOwner, riid, ppvOut);
489 }
490 else if (IsEqualIID (riid, IID_IContextMenu))
491 {
492 HKEY hKeys[16];
493 UINT cKeys = 0;
494 AddClassKeyToArray(L"Directory\\Background", hKeys, &cKeys);
495
496 DEFCONTEXTMENU dcm;
497 dcm.hwnd = hwndOwner;
498 dcm.pcmcb = this;
499 dcm.pidlFolder = pidlRoot;
500 dcm.psf = this;
501 dcm.cidl = 0;
502 dcm.apidl = NULL;
503 dcm.cKeys = cKeys;
504 dcm.aKeys = hKeys;
506 hr = SHCreateDefaultContextMenu (&dcm, riid, ppvOut);
507 }
508 else if (IsEqualIID (riid, IID_IShellView))
509 {
510 SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this};
511 hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
512 }
513 TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
514 return hr;
515}
516
517/**************************************************************************
518 * CDesktopFolder::GetAttributesOf
519 */
521 UINT cidl,
523 DWORD *rgfInOut)
524{
525 HRESULT hr = S_OK;
526
527 TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
528 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
529
530 if (cidl && !apidl)
531 return E_INVALIDARG;
532
533 if (*rgfInOut == 0)
534 *rgfInOut = ~0;
535
536 if(cidl == 0)
537 *rgfInOut &= dwDesktopAttributes;
538 else
539 {
540 /* TODO: always add SFGAO_CANLINK */
541 for (UINT i = 0; i < cidl; ++i)
542 {
543 pdump(*apidl);
544 if (_ILIsDesktop(*apidl))
545 *rgfInOut &= dwDesktopAttributes;
546 else if (_ILIsMyComputer(apidl[i]))
547 *rgfInOut &= dwMyComputerAttributes;
548 else if (_ILIsNetHood(apidl[i]))
549 *rgfInOut &= dwMyNetPlacesAttributes;
550 else if (_ILIsFolder(apidl[i]) || _ILIsValue(apidl[i]) || _ILIsSpecialFolder(apidl[i]))
551 {
552 CComPtr<IShellFolder2> psf;
553 HRESULT hr = _GetSFFromPidl(apidl[i], &psf);
555 continue;
556
557 psf->GetAttributesOf(1, &apidl[i], rgfInOut);
558 }
559 else
560 ERR("Got an unknown pidl type!!!\n");
561 }
562 }
563 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
564 *rgfInOut &= ~SFGAO_VALIDATE;
565
566 TRACE("-- result=0x%08x\n", *rgfInOut);
567
568 return hr;
569}
570
571/**************************************************************************
572 * CDesktopFolder::GetUIObjectOf
573 *
574 * PARAMETERS
575 * HWND hwndOwner, //[in ] Parent window for any output
576 * UINT cidl, //[in ] array size
577 * LPCITEMIDLIST* apidl, //[in ] simple pidl array
578 * REFIID riid, //[in ] Requested Interface
579 * UINT* prgfInOut, //[ ] reserved
580 * LPVOID* ppvObject) //[out] Resulting Interface
581 *
582 */
584 HWND hwndOwner,
585 UINT cidl,
587 REFIID riid,
588 UINT *prgfInOut,
589 LPVOID *ppvOut)
590{
591 LPVOID pObj = NULL;
593
594 TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
595 this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
596
597 if (!ppvOut)
598 return hr;
599
600 *ppvOut = NULL;
601
602 if (cidl == 1 && !_ILIsSpecialFolder(apidl[0]))
603 {
604 CComPtr<IShellFolder2> psf;
605 HRESULT hr = _GetSFFromPidl(apidl[0], &psf);
607 return hr;
608
609 return psf->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, ppvOut);
610 }
611
612 if (IsEqualIID (riid, IID_IContextMenu))
613 {
614 if (cidl > 0 && _ILIsSpecialFolder(apidl[0]))
615 {
616 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
617 }
618 else
619 {
620 /* Do not use the context menu of the CFSFolder here. */
621 /* We need to pass a pointer of the CDesktopFolder so as the data object that the context menu gets is rooted to the desktop */
622 /* Otherwise operations like that involve items from both user and shared desktop will not work */
623 HKEY hKeys[16];
624 UINT cKeys = 0;
625 if (cidl > 0)
626 {
627 AddFSClassKeysToArray(apidl[0], hKeys, &cKeys);
628 }
629
630 DEFCONTEXTMENU dcm;
631 dcm.hwnd = hwndOwner;
632 dcm.pcmcb = this;
633 dcm.pidlFolder = pidlRoot;
634 dcm.psf = this;
635 dcm.cidl = cidl;
636 dcm.apidl = apidl;
637 dcm.cKeys = cKeys;
638 dcm.aKeys = hKeys;
640 hr = SHCreateDefaultContextMenu (&dcm, riid, &pObj);
641 }
642 }
643 else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1))
644 {
645 hr = IDataObject_Constructor( hwndOwner, pidlRoot, apidl, cidl, TRUE, (IDataObject **)&pObj);
646 }
647 else if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID (riid, IID_IExtractIconW)) && (cidl == 1))
648 {
649 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
650 }
651 else if (IsEqualIID (riid, IID_IDropTarget) && (cidl == 1))
652 {
653 CComPtr<IShellFolder> psfChild;
654 hr = this->BindToObject(apidl[0], NULL, IID_PPV_ARG(IShellFolder, &psfChild));
656 return hr;
657
658 return psfChild->CreateViewObject(NULL, riid, ppvOut);
659 }
660 else
662
663 if (SUCCEEDED(hr) && !pObj)
665
666 *ppvOut = pObj;
667 TRACE ("(%p)->hr=0x%08x\n", this, hr);
668 return hr;
669}
670
671/**************************************************************************
672 * CDesktopFolder::GetDisplayNameOf
673 *
674 * NOTES
675 * special case: pidl = null gives desktop-name back
676 */
678{
679 TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
680 pdump (pidl);
681
682 if (!strRet)
683 return E_INVALIDARG;
684
685 if (!_ILIsPidlSimple (pidl))
686 {
687 return SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags, strRet);
688 }
689 else if (_ILIsDesktop(pidl))
690 {
692 return SHSetStrRet(strRet, sPathTarget);
693 else
694 return m_regFolder->GetDisplayNameOf(pidl, dwFlags, strRet);
695 }
696
697 /* file system folder or file rooted at the desktop */
698 CComPtr<IShellFolder2> psf;
699 HRESULT hr = _GetSFFromPidl(pidl, &psf);
701 return hr;
702
703 return psf->GetDisplayNameOf(pidl, dwFlags, strRet);
704}
705
706/**************************************************************************
707 * CDesktopFolder::SetNameOf
708 * Changes the name of a file object or subfolder, possibly changing its item
709 * identifier in the process.
710 *
711 * PARAMETERS
712 * HWND hwndOwner, //[in ] Owner window for output
713 * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change
714 * LPCOLESTR lpszName, //[in ] the items new display name
715 * DWORD dwFlags, //[in ] SHGNO formatting flags
716 * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
717 */
719 HWND hwndOwner,
720 PCUITEMID_CHILD pidl, /* simple pidl */
721 LPCOLESTR lpName,
723 PITEMID_CHILD *pPidlOut)
724{
725 CComPtr<IShellFolder2> psf;
726 HRESULT hr = _GetSFFromPidl(pidl, &psf);
728 return hr;
729
730 return psf->SetNameOf(hwndOwner, pidl, lpName, dwFlags, pPidlOut);
731}
732
734{
735 FIXME ("(%p)\n", this);
736 return E_NOTIMPL;
737}
738
740{
741 FIXME ("(%p)\n", this);
742 return E_NOTIMPL;
743}
744
746{
747 TRACE ("(%p)\n", this);
748
749 if (pSort)
750 *pSort = 0;
751 if (pDisplay)
752 *pDisplay = 0;
753
754 return S_OK;
755}
756
758{
759 TRACE ("(%p)\n", this);
760
761 if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
762 return E_INVALIDARG;
763
764 *pcsFlags = DesktopSFHeader[iColumn].pcsFlags;
765
766 return S_OK;
767}
768
770 PCUITEMID_CHILD pidl,
771 const SHCOLUMNID *pscid,
772 VARIANT *pv)
773{
774 FIXME ("(%p)\n", this);
775
776 return E_NOTIMPL;
777}
778
780 PCUITEMID_CHILD pidl,
781 UINT iColumn,
782 SHELLDETAILS *psd)
783{
784 if (!psd || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
785 return E_INVALIDARG;
786
787 if (!pidl)
788 {
789 psd->fmt = DesktopSFHeader[iColumn].fmt;
790 psd->cxChar = DesktopSFHeader[iColumn].cxChar;
791 return SHSetStrRet(&psd->str, DesktopSFHeader[iColumn].colnameid);
792 }
793
794 CComPtr<IShellFolder2> psf;
795 HRESULT hr = _GetSFFromPidl(pidl, &psf);
797 return hr;
798
799 hr = psf->GetDetailsOf(pidl, iColumn, psd);
801 return hr;
802
803 return hr;
804}
805
807{
808 FIXME ("(%p)\n", this);
809 return E_NOTIMPL;
810}
811
813{
814 TRACE ("(%p)\n", this);
815
816 if (!lpClassId)
817 return E_POINTER;
818
819 *lpClassId = CLSID_ShellDesktop;
820
821 return S_OK;
822}
823
825{
826 TRACE ("(%p)->(%p)\n", this, pidl);
827
828 if (!pidl)
829 return S_OK;
830
831 return E_INVALIDARG;
832}
833
835{
836 TRACE ("(%p)->(%p)\n", this, pidl);
837
838 if (!pidl)
839 return E_INVALIDARG; /* xp doesn't have this check and crashes on NULL */
840 *pidl = ILClone (pidlRoot);
841 return S_OK;
842}
843
845{
846 if (uMsg != DFM_MERGECONTEXTMENU && uMsg != DFM_INVOKECOMMAND)
847 return S_OK;
848
849 /* no data object means no selection */
850 if (!pdtobj)
851 {
852 if (uMsg == DFM_INVOKECOMMAND && wParam == 0)
853 {
854 if (32 >= (UINT_PTR)ShellExecuteW(hwndOwner, L"open", L"rundll32.exe",
855 L"shell32.dll,Control_RunDLL desk.cpl", NULL, SW_SHOWNORMAL))
856 {
857 return E_FAIL;
858 }
859 return S_OK;
860 }
861 else if (uMsg == DFM_MERGECONTEXTMENU)
862 {
863 QCMINFO *pqcminfo = (QCMINFO *)lParam;
864 HMENU hpopup = CreatePopupMenu();
866 Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst++, pqcminfo->idCmdLast, MM_ADDSEPARATOR);
867 DestroyMenu(hpopup);
868 }
869
870 return S_OK;
871 }
872
874 return S_OK;
875
876 return Shell_DefaultContextMenuCallBack(this, pdtobj);
877}
878
879/*************************************************************************
880 * SHGetDesktopFolder [SHELL32.@]
881 */
883{
884 HRESULT hres = S_OK;
885 TRACE("\n");
886
887 if(!psf) return E_INVALIDARG;
888 *psf = NULL;
889 hres = CDesktopFolder::_CreatorClass::CreateInstance(NULL, IID_PPV_ARG(IShellFolder, psf));
890
891 TRACE("-- %p->(%p)\n",psf, *psf);
892 return hres;
893}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:3855
HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
static INT IsNamespaceExtensionHidden(const WCHAR *iid)
HRESULT WINAPI IEParseDisplayNameWithBCW(DWORD codepage, LPCWSTR lpszDisplayName, LPBC pbc, LPITEMIDLIST *ppidl)
Definition: shdocvw_main.c:506
static const DWORD dwMyComputerAttributes
#define DESKTOPSHELLVIEWCOLUMNS
static const WCHAR ClassicStartMenuW[]
static const shvheader DesktopSFHeader[]
static const DWORD dwDesktopAttributes
static DWORD dwMyNetPlacesAttributes
int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll)
Definition: shlfileop.cpp:203
static HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: CFindFolder.cpp:13
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT CRegFolder_CreateInstance(const GUID *pGuid, LPCITEMIDLIST pidlRoot, LPCWSTR lpszPath, LPCWSTR lpszEnumKeyName, REFIID riid, void **ppv)
Definition: CRegFolder.cpp:834
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define IDS_PROPERTIES
Definition: resource.h:102
#define FIXME(fmt,...)
Definition: debug.h:111
#define ERR(fmt,...)
Definition: debug.h:110
#define RegCloseKey(hKey)
Definition: registry.h:49
HRESULT WINAPI Initialize(DWORD dwFlags, IEnumIDList *pRegEnumerator, IEnumIDList *pDesktopEnumerator, IEnumIDList *pCommonDesktopEnumerator)
void AddItemsFromClassicStartMenuKey(HKEY hKeyRoot)
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
CComPtr< IShellFolder2 > m_SharedDesktopFSFolder
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
HRESULT WINAPI FinalConstruct()
STDMETHOD() Initialize(PCIDLIST_ABSOLUTE pidl) override
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHOD() CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
STDMETHOD() GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
STDMETHOD() SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
STDMETHOD() GetDefaultSearchGUID(GUID *pguid) override
STDMETHOD() CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
STDMETHOD() GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
STDMETHOD() BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override
HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2 **psf)
CComPtr< IShellFolder2 > m_DesktopFSFolder
STDMETHOD() ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
STDMETHOD() GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
STDMETHOD() GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
STDMETHOD() GetClassID(CLSID *lpClassId) override
STDMETHOD() EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
STDMETHOD() EnumSearches(IEnumExtraSearch **ppenum) override
LPITEMIDLIST pidlRoot
STDMETHOD() GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
CComPtr< IShellFolder2 > m_regFolder
STDMETHOD() GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
BOOL HasItemWithCLSID(LPITEMIDLIST pidl)
BOOL AddToEnumList(LPITEMIDLIST pidl)
HRESULT AppendItemsFromEnumerator(IEnumIDList *pEnum)
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define CHARS_IN_GUID
#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
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:428
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define IDS_SHV_COLUMN_TYPE
Definition: resource.h:75
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:74
#define GET_SHGDN_RELATION(dwFlags)
Definition: precomp.h:53
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#define GET_SHGDN_FOR(dwFlags)
Definition: precomp.h:52
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3362
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1969
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2859
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define lstrcpynW
Definition: compat.h:738
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
#define RRF_RT_DWORD
Definition: driver.c:581
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
Definition: CFSFolder.cpp:549
HRESULT WINAPI Shell_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdtobj)
Definition: shlfolder.cpp:460
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3061
int WINAPI PathGetDriveNumberW(const WCHAR *path)
Definition: path.c:553
BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath)
Definition: path.c:2266
HRESULT WINAPI ParseURLW(LPCWSTR x, PARSEDURLW *y)
Definition: url.c:197
static BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
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
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 GLint GLint j
Definition: glfuncs.h:250
_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)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_w
Definition: kernel32.h:32
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
static HICON
Definition: imagelist.c:84
HRESULT hres
Definition: protocol.c:465
static LPOLESTR
Definition: stg_prop.c:27
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HICON hIcon
Definition: msconfig.c:44
REFCLSID clsid
Definition: msctf.c:82
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#define DWORD
Definition: nt_native.h:44
#define L(x)
Definition: ntvdm.h:50
interface IBindCtx * LPBC
Definition: objfwd.h:18
const GUID IID_IDataObject
#define PathAddBackslashW
Definition: pathcch.h:301
long LONG
Definition: pedump.c:60
LPITEMIDLIST _ILCreateMyComputer(void)
Definition: pidl.c:1628
LPITEMIDLIST _ILCreateIExplore(void)
Definition: pidl.c:1640
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
LPITEMIDLIST _ILCreateDesktop(void)
Definition: pidl.c:1617
LPITEMIDLIST _ILCreateNetwork(void)
Definition: pidl.c:1684
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1991
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:1946
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
Definition: pidl.c:1924
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
Definition: pidl.c:1740
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2340
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2000
LPITEMIDLIST _ILCreateMyDocuments(void)
Definition: pidl.c:1634
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2122
#define LVCFMT_LEFT
Definition: commctrl.h:2598
#define LVCFMT_RIGHT
Definition: commctrl.h:2599
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define REG_DWORD
Definition: sdbapi.c:596
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
HRESULT WINAPI IEParseDisplayNameWithBCW(DWORD codepage, LPCWSTR lpszDisplayName, LPBC pbc, LPITEMIDLIST *ppidl)
Definition: shdocvw_main.c:506
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:573
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: shlfolder.cpp:197
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
Definition: shfldr.h:81
void AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:268
HRESULT SHELL32_ParseNextElement(IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
Definition: shlfolder.cpp:70
void AddFSClassKeysToArray(PCUITEMID_CHILD pidl, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:282
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2379
HRESULT hr
Definition: shlfolder.c:183
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define CSIDL_COMMON_DESKTOPDIRECTORY
Definition: shlobj.h:2182
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2173
#define MM_ADDSEPARATOR
Definition: shlobj.h:2513
struct _SFV_CREATE SFV_CREATE
#define DFM_CMD_PROPERTIES
Definition: shlobj.h:2597
@ URL_SCHEME_SHELL
Definition: shlwapi.h:1158
#define IDS_SHV_COLUMN_SIZE
Definition: shresdef.h:52
#define IDS_SHV_COLUMN_MODIFIED
Definition: shresdef.h:54
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:69
#define IDS_SHV_COLUMN_ATTRIBUTES
Definition: shresdef.h:55
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
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define TRACE(s)
Definition: solgame.cpp:4
IContextMenuCB * pcmcb
Definition: shlobj.h:2535
IShellFolder * psf
Definition: shlobj.h:2537
IUnknown * punkAssociationInfo
Definition: shlobj.h:2540
PCUITEMID_CHILD_ARRAY apidl
Definition: shlobj.h:2539
const HKEY * aKeys
Definition: shlobj.h:2542
PCIDLIST_ABSOLUTE pidlFolder
Definition: shlobj.h:2536
STRRET str
Definition: shtypes.idl:108
HMENU hmenu
Definition: shlobj.h:1381
UINT idCmdLast
Definition: shlobj.h:1384
UINT idCmdFirst
Definition: shlobj.h:1383
UINT indexMenu
Definition: shlobj.h:1382
LPCWSTR pszSuffix
Definition: shlwapi.h:1435
DWORD cbSize
Definition: shlwapi.h:1432
UINT nScheme
Definition: shlwapi.h:1437
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
int ret
int codepage
Definition: win_iconv.c:156
#define GetFileAttributes
Definition: winbase.h:3750
_In_ LPCSTR lpName
Definition: winbase.h:2789
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
#define E_UNEXPECTED
Definition: winerror.h:2456
#define E_POINTER
Definition: winerror.h:2365
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define SW_SHOWNORMAL
Definition: winuser.h:770
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define MFS_ENABLED
Definition: winuser.h:750
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MFT_STRING
Definition: winuser.h:746
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185