ReactOS 0.4.15-dev-5875-g7c755d9
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
133 TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags);
134
135 /* enumerate the root folders */
136 if (dwFlags & SHCONTF_FOLDERS)
137 {
139 if (IsNamespaceExtensionHidden(MyDocumentsClassString) < 1)
141
142 DWORD dwFetched;
143 while((S_OK == pRegEnumerator->Next(1, &pidl, &dwFetched)) && dwFetched)
144 {
145 if (IsNamespaceExtensionHidden(pidl) < 1)
146 {
147 if (!HasItemWithCLSID(pidl))
148 AddToEnumList(pidl);
149 else
150 SHFree(pidl);
151 }
152 }
155 }
156
157 /* Enumerate the items in the two fs folders */
158 AppendItemsFromEnumerator(pDesktopEnumerator);
159 AppendItemsFromEnumerator(pCommonDesktopEnumerator);
160
161 return ret ? S_OK : E_FAIL;
162 }
163
164
166 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
168};
169
170int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll);
171
172static const shvheader DesktopSFHeader[] = {
179};
180
181#define DESKTOPSHELLVIEWCOLUMNS 6
182
184 SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
185 SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE;
187 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
188 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK;
190 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
191 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK;
192
194 sPathTarget(NULL),
195 pidlRoot(NULL)
196{
197}
198
200{
201}
202
204{
205 WCHAR szMyPath[MAX_PATH];
206 HRESULT hr;
207
208 /* Create the root pidl */
210 if (!pidlRoot)
211 return E_OUTOFMEMORY;
212
213 /* Create the inner fs folder */
215 &CLSID_ShellFSFolder,
219 return hr;
220
221 /* Create the inner shared fs folder. Dont fail on failure. */
223 &CLSID_ShellFSFolder,
227 return hr;
228
229 /* Create the inner reg folder */
230 hr = CRegFolder_CreateInstance(&CLSID_ShellDesktop,
231 pidlRoot,
232 L"",
233 L"Desktop",
236 return hr;
237
238 /* Cache the path to the user desktop directory */
240 return E_UNEXPECTED;
241
242 sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR));
243 if (!sPathTarget)
244 return E_OUTOFMEMORY;
245
246 wcscpy(sPathTarget, szMyPath);
247 return S_OK;
248}
249
251{
252 WCHAR szFileName[MAX_PATH];
253
254 if (_ILIsSpecialFolder(pidl))
255 return m_regFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf));
256
257 lstrcpynW(szFileName, sPathTarget, MAX_PATH - 1);
258 PathAddBackslashW(szFileName);
259 int cLen = wcslen(szFileName);
260
261 if (!_ILSimpleGetTextW(pidl, szFileName + cLen, MAX_PATH - cLen))
262 return E_FAIL;
263
265 return m_SharedDesktopFSFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf));
266 else
267 return m_DesktopFSFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf));
268}
269
270/**************************************************************************
271 * CDesktopFolder::ParseDisplayName
272 *
273 * NOTES
274 * "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" and "" binds
275 * to MyComputer
276 */
278 HWND hwndOwner,
279 LPBC pbc,
280 LPOLESTR lpszDisplayName,
281 DWORD *pchEaten,
282 PIDLIST_RELATIVE *ppidl,
283 DWORD *pdwAttributes)
284{
285 LPCWSTR szNext = NULL;
286 LPITEMIDLIST pidlTemp = NULL;
287 PARSEDURLW urldata;
288 HRESULT hr = S_OK;
289
290 TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
291 this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
292 pchEaten, ppidl, pdwAttributes);
293
294 if (!ppidl)
295 return E_INVALIDARG;
296
297 *ppidl = NULL;
298
299 if (!lpszDisplayName)
300 return E_INVALIDARG;
301
302 if (pchEaten)
303 *pchEaten = 0; /* strange but like the original */
304
305 urldata.cbSize = sizeof(urldata);
306
307 if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':')
308 {
309 return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
310 }
311 else if (PathGetDriveNumberW (lpszDisplayName) >= 0)
312 {
313 /* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */
314 pidlTemp = _ILCreateMyComputer ();
315 szNext = lpszDisplayName;
316 }
317 else if (PathIsUNCW(lpszDisplayName))
318 {
319 pidlTemp = _ILCreateNetwork();
320 szNext = lpszDisplayName;
321 }
322 else if( (pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName)) )
323 {
324 *ppidl = pidlTemp;
325 return S_OK;
326 }
327 else if (SUCCEEDED(ParseURLW(lpszDisplayName, &urldata)))
328 {
329 if (urldata.nScheme == URL_SCHEME_SHELL) /* handle shell: urls */
330 {
331 TRACE ("-- shell url: %s\n", debugstr_w(urldata.pszSuffix));
332 pidlTemp = _ILCreateGuidFromStrW(urldata.pszSuffix + 2);
333 }
334 else
335 return IEParseDisplayNameWithBCW(CP_ACP, lpszDisplayName, pbc, ppidl);
336 }
337 else
338 {
339 if (*lpszDisplayName)
340 {
341 /* it's a filesystem path on the desktop. Let a FSFolder parse it */
342 hr = m_DesktopFSFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
343 if (SUCCEEDED(hr))
344 return hr;
345
346 return m_SharedDesktopFSFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
347 }
348 else
349 pidlTemp = _ILCreateMyComputer();
350
351 szNext = NULL;
352 }
353
354 if (SUCCEEDED(hr) && pidlTemp)
355 {
356 if (szNext && *szNext)
357 {
358 hr = SHELL32_ParseNextElement(this, hwndOwner, pbc,
359 &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
360 }
361 else
362 {
363 if (pdwAttributes && *pdwAttributes)
364 {
365 GetAttributesOf(1, &pidlTemp, pdwAttributes);
366 }
367 }
368 }
369
370 if (SUCCEEDED(hr))
371 *ppidl = pidlTemp;
372 else
373 *ppidl = NULL;
374
375 TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr);
376
377 return hr;
378}
379
380/**************************************************************************
381 * CDesktopFolder::EnumObjects
382 */
383HRESULT WINAPI CDesktopFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
384{
385 CComPtr<IEnumIDList> pRegEnumerator;
386 CComPtr<IEnumIDList> pDesktopEnumerator;
387 CComPtr<IEnumIDList> pCommonDesktopEnumerator;
388 HRESULT hr;
389
390 hr = m_regFolder->EnumObjects(hwndOwner, dwFlags, &pRegEnumerator);
391 if (FAILED(hr))
392 ERR("EnumObjects for reg folder failed\n");
393
394 hr = m_DesktopFSFolder->EnumObjects(hwndOwner, dwFlags, &pDesktopEnumerator);
395 if (FAILED(hr))
396 ERR("EnumObjects for desktop fs folder failed\n");
397
398 hr = m_SharedDesktopFSFolder->EnumObjects(hwndOwner, dwFlags, &pCommonDesktopEnumerator);
399 if (FAILED(hr))
400 ERR("EnumObjects for shared desktop fs folder failed\n");
401
402 return ShellObjectCreatorInit<CDesktopFolderEnum>(dwFlags,pRegEnumerator, pDesktopEnumerator, pCommonDesktopEnumerator, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
403}
404
405/**************************************************************************
406 * CDesktopFolder::BindToObject
407 */
410 LPBC pbcReserved,
411 REFIID riid,
412 LPVOID *ppvOut)
413{
414 if (!pidl)
415 return E_INVALIDARG;
416
417 CComPtr<IShellFolder2> psf;
418 HRESULT hr = _GetSFFromPidl(pidl, &psf);
420 return hr;
421
422 return psf->BindToObject(pidl, pbcReserved, riid, ppvOut);
423}
424
425/**************************************************************************
426 * CDesktopFolder::BindToStorage
427 */
430 LPBC pbcReserved,
431 REFIID riid,
432 LPVOID *ppvOut)
433{
434 FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n",
435 this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
436
437 *ppvOut = NULL;
438 return E_NOTIMPL;
439}
440
441/**************************************************************************
442 * CDesktopFolder::CompareIDs
443 */
445{
446 bool bIsDesktopFolder1, bIsDesktopFolder2;
447
448 if (!pidl1 || !pidl2)
449 {
450 ERR("Got null pidl pointer (%Ix %p %p)!\n", lParam, pidl1, pidl2);
451 return E_INVALIDARG;
452 }
453
454 bIsDesktopFolder1 = _ILIsDesktop(pidl1);
455 bIsDesktopFolder2 = _ILIsDesktop(pidl2);
456 if (bIsDesktopFolder1 || bIsDesktopFolder2)
457 return MAKE_COMPARE_HRESULT(bIsDesktopFolder1 - bIsDesktopFolder2);
458
459 if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2))
460 return m_regFolder->CompareIDs(lParam, pidl1, pidl2);
461
462 return m_DesktopFSFolder->CompareIDs(lParam, pidl1, pidl2);
463}
464
465/**************************************************************************
466 * CDesktopFolder::CreateViewObject
467 */
469 HWND hwndOwner,
470 REFIID riid,
471 LPVOID *ppvOut)
472{
474
475 TRACE ("(%p)->(hwnd=%p,%s,%p)\n",
476 this, hwndOwner, shdebugstr_guid (&riid), ppvOut);
477
478 if (!ppvOut)
479 return hr;
480
481 *ppvOut = NULL;
482
483 if (IsEqualIID (riid, IID_IDropTarget))
484 {
485 hr = m_DesktopFSFolder->CreateViewObject(hwndOwner, riid, ppvOut);
486 }
487 else if (IsEqualIID (riid, IID_IContextMenu))
488 {
489 HKEY hKeys[16];
490 UINT cKeys = 0;
491 AddClassKeyToArray(L"Directory\\Background", hKeys, &cKeys);
492
493 DEFCONTEXTMENU dcm;
494 dcm.hwnd = hwndOwner;
495 dcm.pcmcb = this;
496 dcm.pidlFolder = pidlRoot;
497 dcm.psf = this;
498 dcm.cidl = 0;
499 dcm.apidl = NULL;
500 dcm.cKeys = cKeys;
501 dcm.aKeys = hKeys;
503 hr = SHCreateDefaultContextMenu (&dcm, riid, ppvOut);
504 }
505 else if (IsEqualIID (riid, IID_IShellView))
506 {
507 SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this};
508 hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
509 }
510 TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
511 return hr;
512}
513
514/**************************************************************************
515 * CDesktopFolder::GetAttributesOf
516 */
518 UINT cidl,
520 DWORD *rgfInOut)
521{
522 HRESULT hr = S_OK;
523
524 TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
525 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
526
527 if (cidl && !apidl)
528 return E_INVALIDARG;
529
530 if (*rgfInOut == 0)
531 *rgfInOut = ~0;
532
533 if(cidl == 0)
534 *rgfInOut &= dwDesktopAttributes;
535 else
536 {
537 /* TODO: always add SFGAO_CANLINK */
538 for (UINT i = 0; i < cidl; ++i)
539 {
540 pdump(*apidl);
541 if (_ILIsDesktop(*apidl))
542 *rgfInOut &= dwDesktopAttributes;
543 else if (_ILIsMyComputer(apidl[i]))
544 *rgfInOut &= dwMyComputerAttributes;
545 else if (_ILIsNetHood(apidl[i]))
546 *rgfInOut &= dwMyNetPlacesAttributes;
547 else if (_ILIsFolder(apidl[i]) || _ILIsValue(apidl[i]) || _ILIsSpecialFolder(apidl[i]))
548 {
549 CComPtr<IShellFolder2> psf;
550 HRESULT hr = _GetSFFromPidl(apidl[i], &psf);
552 continue;
553
554 psf->GetAttributesOf(1, &apidl[i], rgfInOut);
555 }
556 else
557 ERR("Got an unknown pidl type!!!\n");
558 }
559 }
560 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
561 *rgfInOut &= ~SFGAO_VALIDATE;
562
563 TRACE("-- result=0x%08x\n", *rgfInOut);
564
565 return hr;
566}
567
568/**************************************************************************
569 * CDesktopFolder::GetUIObjectOf
570 *
571 * PARAMETERS
572 * HWND hwndOwner, //[in ] Parent window for any output
573 * UINT cidl, //[in ] array size
574 * LPCITEMIDLIST* apidl, //[in ] simple pidl array
575 * REFIID riid, //[in ] Requested Interface
576 * UINT* prgfInOut, //[ ] reserved
577 * LPVOID* ppvObject) //[out] Resulting Interface
578 *
579 */
581 HWND hwndOwner,
582 UINT cidl,
584 REFIID riid,
585 UINT *prgfInOut,
586 LPVOID *ppvOut)
587{
588 LPVOID pObj = NULL;
590
591 TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
592 this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
593
594 if (!ppvOut)
595 return hr;
596
597 *ppvOut = NULL;
598
599 if (cidl == 1 && !_ILIsSpecialFolder(apidl[0]))
600 {
601 CComPtr<IShellFolder2> psf;
602 HRESULT hr = _GetSFFromPidl(apidl[0], &psf);
604 return hr;
605
606 return psf->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, ppvOut);
607 }
608
609 if (IsEqualIID (riid, IID_IContextMenu))
610 {
611 if (cidl > 0 && _ILIsSpecialFolder(apidl[0]))
612 {
613 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
614 }
615 else
616 {
617 /* Do not use the context menu of the CFSFolder here. */
618 /* We need to pass a pointer of the CDesktopFolder so as the data object that the context menu gets is rooted to the desktop */
619 /* Otherwise operations like that involve items from both user and shared desktop will not work */
620 HKEY hKeys[16];
621 UINT cKeys = 0;
622 if (cidl > 0)
623 {
624 AddFSClassKeysToArray(apidl[0], hKeys, &cKeys);
625 }
626
627 DEFCONTEXTMENU dcm;
628 dcm.hwnd = hwndOwner;
629 dcm.pcmcb = this;
630 dcm.pidlFolder = pidlRoot;
631 dcm.psf = this;
632 dcm.cidl = cidl;
633 dcm.apidl = apidl;
634 dcm.cKeys = cKeys;
635 dcm.aKeys = hKeys;
637 hr = SHCreateDefaultContextMenu (&dcm, riid, &pObj);
638 }
639 }
640 else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1))
641 {
642 hr = IDataObject_Constructor( hwndOwner, pidlRoot, apidl, cidl, TRUE, (IDataObject **)&pObj);
643 }
644 else if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID (riid, IID_IExtractIconW)) && (cidl == 1))
645 {
646 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
647 }
648 else if (IsEqualIID (riid, IID_IDropTarget) && (cidl == 1))
649 {
650 CComPtr<IShellFolder> psfChild;
651 hr = this->BindToObject(apidl[0], NULL, IID_PPV_ARG(IShellFolder, &psfChild));
653 return hr;
654
655 return psfChild->CreateViewObject(NULL, riid, ppvOut);
656 }
657 else
659
660 if (SUCCEEDED(hr) && !pObj)
662
663 *ppvOut = pObj;
664 TRACE ("(%p)->hr=0x%08x\n", this, hr);
665 return hr;
666}
667
668/**************************************************************************
669 * CDesktopFolder::GetDisplayNameOf
670 *
671 * NOTES
672 * special case: pidl = null gives desktop-name back
673 */
675{
676 TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
677 pdump (pidl);
678
679 if (!strRet)
680 return E_INVALIDARG;
681
682 if (!_ILIsPidlSimple (pidl))
683 {
684 return SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags, strRet);
685 }
686 else if (_ILIsDesktop(pidl))
687 {
689 return SHSetStrRet(strRet, sPathTarget);
690 else
691 return m_regFolder->GetDisplayNameOf(pidl, dwFlags, strRet);
692 }
693
694 /* file system folder or file rooted at the desktop */
695 CComPtr<IShellFolder2> psf;
696 HRESULT hr = _GetSFFromPidl(pidl, &psf);
698 return hr;
699
700 return psf->GetDisplayNameOf(pidl, dwFlags, strRet);
701}
702
703/**************************************************************************
704 * CDesktopFolder::SetNameOf
705 * Changes the name of a file object or subfolder, possibly changing its item
706 * identifier in the process.
707 *
708 * PARAMETERS
709 * HWND hwndOwner, //[in ] Owner window for output
710 * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change
711 * LPCOLESTR lpszName, //[in ] the items new display name
712 * DWORD dwFlags, //[in ] SHGNO formatting flags
713 * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
714 */
716 HWND hwndOwner,
717 PCUITEMID_CHILD pidl, /* simple pidl */
718 LPCOLESTR lpName,
720 PITEMID_CHILD *pPidlOut)
721{
722 CComPtr<IShellFolder2> psf;
723 HRESULT hr = _GetSFFromPidl(pidl, &psf);
725 return hr;
726
727 return psf->SetNameOf(hwndOwner, pidl, lpName, dwFlags, pPidlOut);
728}
729
731{
732 FIXME ("(%p)\n", this);
733 return E_NOTIMPL;
734}
735
737{
738 FIXME ("(%p)\n", this);
739 return E_NOTIMPL;
740}
741
743{
744 TRACE ("(%p)\n", this);
745
746 if (pSort)
747 *pSort = 0;
748 if (pDisplay)
749 *pDisplay = 0;
750
751 return S_OK;
752}
753
755{
756 TRACE ("(%p)\n", this);
757
758 if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
759 return E_INVALIDARG;
760
761 *pcsFlags = DesktopSFHeader[iColumn].pcsFlags;
762
763 return S_OK;
764}
765
767 PCUITEMID_CHILD pidl,
768 const SHCOLUMNID *pscid,
769 VARIANT *pv)
770{
771 FIXME ("(%p)\n", this);
772
773 return E_NOTIMPL;
774}
775
777 PCUITEMID_CHILD pidl,
778 UINT iColumn,
779 SHELLDETAILS *psd)
780{
781 if (!psd || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
782 return E_INVALIDARG;
783
784 if (!pidl)
785 {
786 psd->fmt = DesktopSFHeader[iColumn].fmt;
787 psd->cxChar = DesktopSFHeader[iColumn].cxChar;
788 return SHSetStrRet(&psd->str, DesktopSFHeader[iColumn].colnameid);
789 }
790
791 CComPtr<IShellFolder2> psf;
792 HRESULT hr = _GetSFFromPidl(pidl, &psf);
794 return hr;
795
796 hr = psf->GetDetailsOf(pidl, iColumn, psd);
798 return hr;
799
800 return hr;
801}
802
804{
805 FIXME ("(%p)\n", this);
806 return E_NOTIMPL;
807}
808
810{
811 TRACE ("(%p)\n", this);
812
813 if (!lpClassId)
814 return E_POINTER;
815
816 *lpClassId = CLSID_ShellDesktop;
817
818 return S_OK;
819}
820
822{
823 TRACE ("(%p)->(%p)\n", this, pidl);
824
825 if (!pidl)
826 return S_OK;
827
828 return E_INVALIDARG;
829}
830
832{
833 TRACE ("(%p)->(%p)\n", this, pidl);
834
835 if (!pidl)
836 return E_INVALIDARG; /* xp doesn't have this check and crashes on NULL */
837 *pidl = ILClone (pidlRoot);
838 return S_OK;
839}
840
842{
843 if (uMsg != DFM_MERGECONTEXTMENU && uMsg != DFM_INVOKECOMMAND)
844 return S_OK;
845
846 /* no data object means no selection */
847 if (!pdtobj)
848 {
849 if (uMsg == DFM_INVOKECOMMAND && wParam == 0)
850 {
851 if (32 >= (UINT_PTR)ShellExecuteW(hwndOwner, L"open", L"rundll32.exe",
852 L"shell32.dll,Control_RunDLL desk.cpl", NULL, SW_SHOWNORMAL))
853 {
854 return E_FAIL;
855 }
856 return S_OK;
857 }
858 else if (uMsg == DFM_MERGECONTEXTMENU)
859 {
860 QCMINFO *pqcminfo = (QCMINFO *)lParam;
861 HMENU hpopup = CreatePopupMenu();
863 Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst++, pqcminfo->idCmdLast, MM_ADDSEPARATOR);
864 DestroyMenu(hpopup);
865 }
866
867 return S_OK;
868 }
869
871 return S_OK;
872
873 return Shell_DefaultContextMenuCallBack(this, pdtobj);
874}
875
876/*************************************************************************
877 * SHGetDesktopFolder [SHELL32.@]
878 */
880{
881 HRESULT hres = S_OK;
882 TRACE("\n");
883
884 if(!psf) return E_INVALIDARG;
885 *psf = NULL;
886 hres = CDesktopFolder::_CreatorClass::CreateInstance(NULL, IID_PPV_ARG(IShellFolder, psf));
887
888 TRACE("-- %p->(%p)\n",psf, *psf);
889 return hres;
890}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:3931
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:471
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:789
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:101
#define FIXME(fmt,...)
Definition: debug.h:111
#define ERR(fmt,...)
Definition: debug.h:110
#define RegCloseKey(hKey)
Definition: registry.h:47
HRESULT WINAPI Initialize(DWORD dwFlags, IEnumIDList *pRegEnumerator, IEnumIDList *pDesktopEnumerator, IEnumIDList *pCommonDesktopEnumerator)
void AddItemsFromClassicStartMenuKey(HKEY hKeyRoot)
virtual HRESULT WINAPI BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
virtual HRESULT WINAPI BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
CComPtr< IShellFolder2 > m_SharedDesktopFSFolder
virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
HRESULT WINAPI FinalConstruct()
virtual HRESULT WINAPI ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
virtual HRESULT WINAPI GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
virtual HRESULT WINAPI CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
virtual HRESULT WINAPI GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
virtual HRESULT WINAPI GetClassID(CLSID *lpClassId)
virtual HRESULT WINAPI GetCurFolder(PIDLIST_ABSOLUTE *pidl)
virtual HRESULT WINAPI GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidl)
HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2 **psf)
virtual HRESULT WINAPI CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
CComPtr< IShellFolder2 > m_DesktopFSFolder
LPITEMIDLIST pidlRoot
virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid)
CComPtr< IShellFolder2 > m_regFolder
virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum)
virtual HRESULT WINAPI GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
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:427
#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:3356
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1965
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:2853
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 RRF_RT_DWORD
Definition: driver.c:581
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
Definition: CFSFolder.cpp:546
HRESULT WINAPI Shell_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdtobj)
Definition: shlfolder.cpp:462
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
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:294
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:542
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:562
#define END_COM_MAP()
Definition: atlcom.h:553
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:60
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
long LONG
Definition: pedump.c:60
LPITEMIDLIST _ILCreateMyComputer(void)
Definition: pidl.c:1613
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
LPITEMIDLIST _ILCreateDesktop(void)
Definition: pidl.c:1602
LPITEMIDLIST _ILCreateNetwork(void)
Definition: pidl.c:1669
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1976
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:1931
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
Definition: pidl.c:1909
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
Definition: pidl.c:1725
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:1985
LPITEMIDLIST _ILCreateMyDocuments(void)
Definition: pidl.c:1619
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2107
#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:471
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:561
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: shlfolder.cpp:198
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:71
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:2346
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:2049
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2040
#define MM_ADDSEPARATOR
Definition: shlobj.h:2380
struct _SFV_CREATE SFV_CREATE
#define DFM_CMD_PROPERTIES
Definition: shlobj.h:2464
@ 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:2402
IShellFolder * psf
Definition: shlobj.h:2404
IUnknown * punkAssociationInfo
Definition: shlobj.h:2407
PCUITEMID_CHILD_ARRAY apidl
Definition: shlobj.h:2406
const HKEY * aKeys
Definition: shlobj.h:2409
PCIDLIST_ABSOLUTE pidlFolder
Definition: shlobj.h:2403
STRRET str
Definition: shtypes.idl:108
HMENU hmenu
Definition: shlobj.h:1315
UINT idCmdLast
Definition: shlobj.h:1318
UINT idCmdFirst
Definition: shlobj.h:1317
UINT indexMenu
Definition: shlobj.h:1316
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:3686
_In_ LPCSTR lpName
Definition: winbase.h:2776
_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:764
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:846
#define MFS_ENABLED
Definition: winuser.h:745
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MFT_STRING
Definition: winuser.h:741
#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:426
#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