ReactOS 0.4.17-dev-1190-g4c812f4
CControlPanelFolder.cpp
Go to the documentation of this file.
1/*
2 * Control panel folder
3 *
4 * Copyright 2003 Martin Fuchs
5 * Copyright 2009 Andrew Hill
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include <precomp.h>
23
25
27{
29 0, NULL,
30 CLSID_ControlPanel,
31 L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}",
32 L"ControlPanel",
33};
34
35/***********************************************************************
36* control panel implementation in shell namespace
37*/
38
40 public CEnumIDListBase
41{
42 public:
47 int RegisterRegistryCPanelApps(HKEY hkey_root, LPCWSTR szRepPath);
49
51 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
53};
54
55/***********************************************************************
56* IShellFolder [ControlPanel] implementation
57*/
58
62};
63
65{
69};
70
72{
73}
74
76{
77}
78
80{
82 return E_FAIL;
83 AppendItemsFromEnumerator(pRegEnumerator);
84 return S_OK;
85}
86
87static const CLSID* IsRegItem(LPCITEMIDLIST pidl)
88{
89 BYTE type = _ILGetType(pidl);
91 return (CLSID*)((BYTE*)pidl + (pidl->mkid.cb - sizeof(CLSID)));
92 return NULL;
93}
94
95static LPITEMIDLIST _ILCreateCPanelApplet(LPCWSTR pszName, LPCWSTR pszDisplayName, LPCWSTR pszComment, int iIconIdx)
96{
98 LPITEMIDLIST pidl;
100 int cchName, cchDisplayName, cchComment, cbData;
101
102 /* Calculate lengths of given strings */
103 cchName = wcslen(pszName);
104 cchDisplayName = wcslen(pszDisplayName);
105 cchComment = wcslen(pszComment);
106
107 /* Allocate PIDL */
108 cbData = sizeof(pidl->mkid.cb) + sizeof(pData->type) + sizeof(pData->u.cpanel) - sizeof(pData->u.cpanel.szName)
109 + (cchName + cchDisplayName + cchComment + 3) * sizeof(WCHAR);
110 pidl = (LPITEMIDLIST)SHAlloc(cbData + sizeof(WORD));
111 if (!pidl)
112 return NULL;
113
114 /* Copy data to allocated memory */
115 pidl->mkid.cb = cbData;
116 pData = (PIDLDATA *)pidl->mkid.abID;
117 pData->type = PT_CPLAPPLET;
118
119 pCP = &pData->u.cpanel;
120 pCP->dummy = 0;
121 pCP->iconIdx = iIconIdx;
122 wcscpy(pCP->szName, pszName);
123 pCP->offsDispName = cchName + 1;
124 wcscpy(pCP->szName + pCP->offsDispName, pszDisplayName);
125 pCP->offsComment = pCP->offsDispName + cchDisplayName + 1;
126 wcscpy(pCP->szName + pCP->offsComment, pszComment);
127
128 /* Add PIDL NULL terminator */
129 *(WORD*)(pCP->szName + pCP->offsComment + cchComment + 1) = 0;
130
131 pcheck(pidl);
132
133 return pidl;
134}
135
136/**************************************************************************
137 * _ILGetCPanelPointer()
138 * gets a pointer to the control panel struct stored in the pidl
139 */
141{
143
144 if (pdata && pdata->type == PT_CPLAPPLET)
145 return (PIDLCPanelStruct *) & (pdata->u.cpanel);
146
147 return NULL;
148}
149
151{
153 if (!pData)
154 return E_FAIL;
155
156 CComPtr<IDefaultExtractIconInit> initIcon;
159 return hr;
160
161 initIcon->SetNormalIcon(pData->szName, (int)pData->iconIdx != -1 ? pData->iconIdx : 0);
162
163 return initIcon->QueryInterface(riid, ppvOut);
164}
165
167{
168 CPlApplet* applet = Control_LoadApplet(0, wpath, NULL);
169 int iconIdx;
170
171 if (applet)
172 {
173 for (UINT i = 0; i < applet->count; ++i)
174 {
175 if (applet->info[i].idIcon > 0)
176 iconIdx = -applet->info[i].idIcon; /* negative icon index instead of icon number */
177 else
178 iconIdx = 0;
179
181 applet->info[i].name,
182 applet->info[i].info,
183 iconIdx);
184
185 if (pidl)
186 AddToEnumList(pidl);
187 }
188 Control_UnloadApplet(applet);
189 }
190 return TRUE;
191}
192
194{
197 HKEY hkey;
198
199 int cnt = 0;
200
201 if (RegOpenKeyW(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS)
202 {
203 int idx = 0;
204
205 for(; ; idx++)
206 {
207 DWORD nameLen = MAX_PATH;
208 DWORD valueLen = MAX_PATH;
210
211 if (RegEnumValueW(hkey, idx, name, &nameLen, NULL, NULL, (LPBYTE)&value, &valueLen) != ERROR_SUCCESS)
212 break;
213
215 {
217 }
218
220 ++cnt;
221 }
222 RegCloseKey(hkey);
223 }
224
225 return cnt;
226}
227
228/**************************************************************************
229 * CControlPanelEnum::CreateCPanelEnumList()
230 */
232{
236
237 TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags);
238
239 /* enumerate the control panel applets */
240 if (dwFlags & SHCONTF_NONFOLDERS)
241 {
242 LPWSTR p;
243
246 wcscpy(p, L"*.cpl");
247
248 hFile = FindFirstFileW(szPath, &wfd);
249
251 {
252 do
253 {
254 if (!(dwFlags & SHCONTF_INCLUDEHIDDEN) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
255 continue;
256
258 wcscpy(p, wfd.cFileName);
259 if (wcscmp(wfd.cFileName, L"ncpa.cpl"))
261 }
262 } while(FindNextFileW(hFile, &wfd));
264 }
265
266 RegisterRegistryCPanelApps(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls");
267 RegisterRegistryCPanelApps(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls");
268 }
269 return TRUE;
270}
271
273{
274 pidlRoot = NULL; /* absolute pidl */
275}
276
278{
279 TRACE("-- destroying IShellFolder(%p)\n", this);
281}
282
283/**************************************************************************
284* CControlPanelFolder::ParseDisplayName
285*/
287 HWND hwndOwner,
288 LPBC pbc,
289 LPOLESTR lpszDisplayName,
290 DWORD *pchEaten,
291 PIDLIST_RELATIVE *ppidl,
292 DWORD *pdwAttributes)
293{
294 /* We only support parsing guid names */
295 return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes);
296}
297
298/**************************************************************************
299* CControlPanelFolder::EnumObjects
300*/
301HRESULT WINAPI CControlPanelFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
302{
303 CComPtr<IEnumIDList> pRegEnumerator;
304 m_regFolder->EnumObjects(hwndOwner, dwFlags, &pRegEnumerator);
305
306 return ShellObjectCreatorInit<CControlPanelEnum>(dwFlags, pRegEnumerator, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
307}
308
309/**************************************************************************
310* CControlPanelFolder::BindToObject
311*/
314 LPBC pbcReserved,
315 REFIID riid,
316 LPVOID *ppvOut)
317{
318 return m_regFolder->BindToObject(pidl, pbcReserved, riid, ppvOut);
319}
320
321/**************************************************************************
322* CControlPanelFolder::BindToStorage
323*/
326 LPBC pbcReserved,
327 REFIID riid,
328 LPVOID *ppvOut)
329{
330 FIXME("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, pidl, pbcReserved, shdebugstr_guid(&riid), ppvOut);
331
332 *ppvOut = NULL;
333 return E_NOTIMPL;
334}
335
336/**************************************************************************
337* CControlPanelFolder::CompareIDs
338*/
340{
341 /* Dont use SHELL32_CompareGuidItems because it would cause guid items to come first */
342 if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2))
343 {
344 return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
345 }
346 PIDLCPanelStruct *pData1 = _ILGetCPanelPointer(pidl1);
347 PIDLCPanelStruct *pData2 = _ILGetCPanelPointer(pidl2);
348
349 if (!pData1 || !pData2 || LOWORD(lParam) >= CONTROLPANEL_COL_COUNT)
350 return E_INVALIDARG;
351
352 int result;
353 switch(LOWORD(lParam))
354 {
356 result = SHELL_StrCmpLogical(pData1->szName + pData1->offsDispName, pData2->szName + pData2->offsDispName);
357 break;
359 result = SHELL_StrCmpLogical(pData1->szName + pData1->offsComment, pData2->szName + pData2->offsComment);
360 break;
361 default:
362 ERR("Got wrong lParam!\n");
363 return E_INVALIDARG;
364 }
365
367}
368
369/**************************************************************************
370* CControlPanelFolder::CreateViewObject
371*/
373{
374 CComPtr<IShellView> pShellView;
376
377 TRACE("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid(&riid), ppvOut);
378
379 if (ppvOut) {
380 *ppvOut = NULL;
381
382 if (IsEqualIID(riid, IID_IDropTarget)) {
383 WARN("IDropTarget not implemented\n");
384 hr = E_NOTIMPL;
385 } else if (IsEqualIID(riid, IID_IContextMenu)) {
386 WARN("IContextMenu not implemented\n");
387 hr = E_NOTIMPL;
388 } else if (IsEqualIID(riid, IID_IShellView)) {
389 SFV_CREATE sfvparams = { sizeof(SFV_CREATE), this , NULL, this };
390 hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
391 }
392 }
393 TRACE("--(%p)->(interface=%p)\n", this, ppvOut);
394 return hr;
395}
396
397/**************************************************************************
398* CControlPanelFolder::GetAttributesOf
399*/
401{
402 HRESULT hr = S_OK;
403 static const DWORD dwControlPanelAttributes =
404 SFGAO_HASSUBFOLDER | SFGAO_FOLDER | SFGAO_CANLINK;
405
406 TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
407 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
408
409 if (!rgfInOut)
410 return E_INVALIDARG;
411 if (cidl && !apidl)
412 return E_INVALIDARG;
413
414 if (*rgfInOut == 0)
415 *rgfInOut = ~0;
416
417 if (!cidl)
418 {
419 *rgfInOut &= dwControlPanelAttributes;
420 }
421 else
422 {
423 while(cidl > 0 && *apidl)
424 {
425 pdump(*apidl);
426 if (_ILIsCPanelStruct(*apidl))
427 *rgfInOut &= SFGAO_CANLINK;
428 else if (_ILIsSpecialFolder(*apidl))
429 m_regFolder->GetAttributesOf(1, apidl, rgfInOut);
430 else
431 ERR("Got unknown pidl\n");
432 apidl++;
433 cidl--;
434 }
435 }
436 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
437 *rgfInOut &= ~SFGAO_VALIDATE;
438
439 TRACE("-- result=0x%08x\n", *rgfInOut);
440 return hr;
441}
442
443/**************************************************************************
444* CControlPanelFolder::GetUIObjectOf
445*
446* PARAMETERS
447* HWND hwndOwner, //[in ] Parent window for any output
448* UINT cidl, //[in ] array size
449* LPCITEMIDLIST* apidl, //[in ] simple pidl array
450* REFIID riid, //[in ] Requested Interface
451* UINT* prgfInOut, //[ ] reserved
452* LPVOID* ppvObject) //[out] Resulting Interface
453*
454*/
456 UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
457{
458 LPVOID pObj = NULL;
460
461 TRACE("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
462 this, hwndOwner, cidl, apidl, shdebugstr_guid(&riid), prgfInOut, ppvOut);
463
464 if (ppvOut) {
465 *ppvOut = NULL;
466
467 if (IsEqualIID(riid, IID_IContextMenu) && (cidl >= 1)) {
468 /* HACK: We should use callbacks from CDefaultContextMenu instead of creating one on our own */
469 BOOL bHasCpl = FALSE;
470 for (UINT i = 0; i < cidl; i++)
471 {
472 if(_ILIsCPanelStruct(apidl[i]))
473 {
474 bHasCpl = TRUE;
475 }
476 }
477
478 if (bHasCpl)
479 hr = ShellObjectCreatorInit<CCPLItemMenu>(cidl, apidl, riid, &pObj);
480 else
481 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
482 } else if (IsEqualIID(riid, IID_IDataObject) && (cidl >= 1)) {
483 hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, TRUE, (IDataObject **)&pObj);
484 } else if ((IsEqualIID(riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && (cidl == 1)) {
485 if (_ILGetCPanelPointer(apidl[0]))
486 hr = CCPLExtractIcon_CreateInstance(this, apidl[0], riid, &pObj);
487 else
488 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
489 } else {
491 }
492
493 if (SUCCEEDED(hr) && !pObj)
495
496 *ppvOut = pObj;
497 }
498 TRACE("(%p)->hr=0x%08x\n", this, hr);
499 return hr;
500}
501
502/**************************************************************************
503* CControlPanelFolder::GetDisplayNameOf
504*/
506{
507 if (!pidl)
508 return S_FALSE;
509
510 PIDLCPanelStruct *pCPanel = _ILGetCPanelPointer(pidl);
511
512 if (pCPanel)
513 {
514 return SHSetStrRet(strRet, pCPanel->szName + pCPanel->offsDispName);
515 }
516 else if (_ILIsSpecialFolder(pidl))
517 {
518 return m_regFolder->GetDisplayNameOf(pidl, dwFlags, strRet);
519 }
520
521 return E_FAIL;
522}
523
524/**************************************************************************
525* CControlPanelFolder::SetNameOf
526* Changes the name of a file object or subfolder, possibly changing its item
527* identifier in the process.
528*
529* PARAMETERS
530* HWND hwndOwner, //[in ] Owner window for output
531* LPCITEMIDLIST pidl, //[in ] simple pidl of item to change
532* LPCOLESTR lpszName, //[in ] the items new display name
533* DWORD dwFlags, //[in ] SHGNO formatting flags
534* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
535*/
537 LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
538{
539 FIXME("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
540 return E_FAIL;
541}
542
544{
545 if (LOBYTE(GetVersion()) >= 6)
546 return E_NOTIMPL;
547 *pguid = CLSID_ShellSearchExt;
548 return S_OK;
549}
550
552{
553 *ppenum = NULL;
554 return E_NOTIMPL;
555}
556
558{
559 TRACE("(%p)\n", this);
560 return E_NOTIMPL; // Not required when column 0 is our default.
561}
562
564{
565 TRACE("(%p)\n", this);
566
567 if (LOBYTE(GetVersion()) < 6)
568 return E_NOTIMPL;
569
570 if (!pcsFlags || iColumn >= CONTROLPANEL_COL_COUNT)
571 return E_INVALIDARG;
572 *pcsFlags = ControlPanelSFHeader[iColumn].colstate;
573 return S_OK;
574}
575
577{
578 if (IsRegItem(pidl))
579 return m_regFolder->GetDetailsEx(pidl, pscid, pv);
580 return SH32_GetDetailsOfPKeyAsVariant(this, pidl, pscid, pv, FALSE);
581}
582
584{
585 if (!psd || iColumn >= CONTROLPANEL_COL_COUNT)
586 return E_INVALIDARG;
587
588 if (!pidl)
589 {
590 psd->fmt = ControlPanelSFHeader[iColumn].fmt;
591 psd->cxChar = ControlPanelSFHeader[iColumn].cxChar;
592 return SHSetStrRet(&psd->str, shell32_hInstance, ControlPanelSFHeader[iColumn].colnameid);
593 }
594 else if (_ILIsSpecialFolder(pidl))
595 {
596 return m_regFolder->GetDetailsOf(pidl, iColumn, psd);
597 }
598 else
599 {
600 PIDLCPanelStruct *pCPanel = _ILGetCPanelPointer(pidl);
601
602 if (!pCPanel)
603 return E_FAIL;
604
605 switch(iColumn)
606 {
608 return SHSetStrRet(&psd->str, pCPanel->szName + pCPanel->offsDispName);
610 return SHSetStrRet(&psd->str, pCPanel->szName + pCPanel->offsComment);
611 }
612 }
613
614 return E_FAIL;
615}
616
618{
619 switch (column)
620 {
621 case CONTROLPANEL_COL_NAME: return MakeSCID(*pscid, FMTID_Storage, PID_STG_NAME);
622 case CONTROLPANEL_COL_COMMENT: return MakeSCID(*pscid, FMTID_SummaryInformation, PIDSI_COMMENTS);
623 }
624 return E_INVALIDARG;
625}
626
627/************************************************************************
628 * CControlPanelFolder::GetClassID
629 */
631{
632 TRACE("(%p)\n", this);
633
634 if (!lpClassId)
635 return E_POINTER;
636 *lpClassId = CLSID_ControlPanel;
637
638 return S_OK;
639}
640
641/************************************************************************
642 * CControlPanelFolder::Initialize
643 *
644 * NOTES: it makes no sense to change the pidl
645 */
647{
648 if (pidlRoot)
650
651 pidlRoot = ILClone(pidl);
652
653 /* Create the inner reg folder */
654 REGFOLDERINITDATA RegInit = { static_cast<IShellFolder*>(this), &g_RegFolderInfo };
655 HRESULT hr;
656 hr = CRegFolder_CreateInstance(&RegInit,
657 pidlRoot,
660 return hr;
661
662 return S_OK;
663}
664
665/**************************************************************************
666 * CControlPanelFolder::GetCurFolder
667 */
669{
670 TRACE("(%p)->(%p)\n", this, pidl);
671
672 if (!pidl)
673 return E_POINTER;
674 *pidl = ILClone(pidlRoot);
675 return S_OK;
676}
677
679{
680 switch (uMsg)
681 {
682 case SFVM_DEFVIEWMODE:
683 {
684 #if ROSPOLICY_CONTROLSFOLDER_DEFLARGEICONS
686 #else
688 #endif
689 return S_OK;
690 }
691 }
692 return E_NOTIMPL;
693}
694
696{
697 m_apidl = NULL;
698 m_cidl = 0;
699}
700
702{
703 m_cidl = cidl;
704 m_apidl = _ILCopyaPidl(apidl, m_cidl);
705 if (m_cidl && !m_apidl)
706 return E_OUTOFMEMORY;
707
708 return S_OK;
709}
710
712{
714}
715
717 HMENU hMenu,
718 UINT indexMenu,
719 UINT idCmdFirst,
720 UINT idCmdLast,
721 UINT uFlags)
722{
723 _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst, MFT_STRING, MAKEINTRESOURCEW(IDS_OPEN), MFS_DEFAULT);
725 _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + 1, MFT_STRING, MAKEINTRESOURCEW(IDS_CREATELINK), MFS_ENABLED);
726
727 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 2);
728}
729
732
733/**************************************************************************
734* ICPanel_IContextMenu_InvokeCommand()
735*/
737{
738 HRESULT hResult;
739
741 if(!pCPanel)
742 return E_FAIL;
743
744 TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd);
745
746 if (lpcmi->lpVerb == MAKEINTRESOURCEA(0))
747 {
748 /* Hardcode the command here; Executing a cpl file would be fine but we also need to run things like console.dll */
749 WCHAR wszParams[MAX_PATH];
750 PCWSTR wszFile = L"rundll32.exe";
751 PCWSTR wszFormat = L"shell32.dll,Control_RunDLL %s,%s";
752
753 wsprintfW(wszParams, wszFormat, pCPanel->szName, pCPanel->szName + pCPanel->offsDispName);
754
755 /* Note: we pass the applet name to Control_RunDLL to distinguish between multiple applets in one .cpl file */
756 ShellExecuteW(NULL, NULL, wszFile, wszParams, NULL, 0);
757 }
758 else if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) //FIXME
759 {
760 CComPtr<IDataObject> pDataObj;
762
763 hResult = SHCreateDataObject(pidl, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj));
764 if (FAILED(hResult))
765 return hResult;
766
767 SHFree(pidl);
768
769 //FIXME: Use SHCreateLinks
770 CComPtr<IShellFolder> psf;
771 CComPtr<IDropTarget> pDT;
772
773 hResult = SHGetDesktopFolder(&psf);
774 if (FAILED(hResult))
775 return hResult;
776
777 hResult = psf->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pDT));
778 if (FAILED(hResult))
779 return hResult;
780
781 SHSimulateDrop(pDT, pDataObj, MK_CONTROL|MK_SHIFT, NULL, NULL);
782 }
783 return S_OK;
784}
785
786/**************************************************************************
787 * ICPanel_IContextMenu_GetCommandString()
788 *
789 */
791 UINT_PTR idCommand,
792 UINT uFlags,
794 LPSTR lpszName,
795 UINT uMaxNameLen)
796{
797 TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
798
799 FIXME("unknown command string\n");
800 return E_FAIL;
801}
802
803/**************************************************************************
804* ICPanel_IContextMenu_HandleMenuMsg()
805*/
807 UINT uMsg,
810{
811 TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
812
813 return E_NOTIMPL;
814}
815
816/**************************************************************************
817* COpenControlPanel
818*/
819
821{
822 PIDLIST_ABSOLUTE pidlFree = NULL;
823 if (IS_INTRESOURCE(pidl))
824 {
825 HRESULT hr = SHGetSpecialFolderLocation(NULL, (UINT)(SIZE_T)pidl, &pidlFree);
826 if (FAILED(hr))
827 return hr;
828 pidl = pidlFree;
829 }
830 HRESULT hr = SHGetNameFromIDList(pidl, SIGDN_DESKTOPABSOLUTEPARSING, Name);
831 ILFree(pidlFree);
832 return hr;
833}
834
836{
837 PWSTR cpfolder;
839 if (SUCCEEDED(hr))
840 {
841 hr = StringCchPrintfW(Buf, cchBuf, L"%s\\%s%s", cpfolder, Prefix, InFolderParse);
842 SHFree(cpfolder);
843 }
844 return hr;
845}
846
848{
850 HKEY hNSKey;
852 wsprintfW(key, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\%s\\NameSpace",
853 Wow64 ? L"ControlPanelWOW64" : L"ControlPanel");
854 LSTATUS error = RegOpenKeyExW(hKey, key, 0, KEY_READ, &hNSKey);
855 if (error)
857 for (DWORD i = 0; RegEnumKeyW(hNSKey, i, key, _countof(key)) == ERROR_SUCCESS; ++i)
858 {
861 {
862 wsprintfW(buf, L"CLSID\\%s", key);
863 DWORD cb = sizeof(buf);
864 if (RegGetValueW(HKEY_CLASSES_ROOT, buf, L"System.ApplicationName",
866 {
867 if (!lstrcmpiW(buf, Canonical))
868 {
870 hr = S_OK;
871 }
872 }
873 }
874 }
875 RegCloseKey(hNSKey);
876 return hr;
877}
878
880{
881 HRESULT hr = E_FAIL;
882 if (FAILED(hr))
884 if (FAILED(hr))
886 if (FAILED(hr))
888 if (FAILED(hr))
890 return hr;
891}
892
894{
895 WCHAR path[MAX_PATH], clspath[MAX_PATH];
896 HRESULT hr = S_OK;
897 SHELLEXECUTEINFOW sei = { sizeof(sei), SEE_MASK_FLAG_DDEWAIT };
898 sei.lpFile = path;
899 sei.nShow = SW_SHOW;
900 if (!pszName)
901 {
903 PathAppendW(path, L"control.exe");
904 }
905 else
906 {
907 LPWSTR clsid = clspath + wsprintfW(clspath, L"CLSID\\");
908 if (SUCCEEDED(hr = FindExeCplClass(pszName, clsid)))
909 {
911 {
912 // NT6 will execute "::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{clsid}[\pszPage]"
913 // but we don't support parsing that so we force the class instead.
915 sei.lpClass = clspath;
916 }
917 }
918 }
919
920 if (SUCCEEDED(hr))
921 {
924 }
925 return hr;
926}
927
929{
930 HRESULT hr;
931 if (!pszName)
932 {
933 PWSTR cpfolder;
935 {
936 hr = StringCchCopyW(pszPath, cchPath, cpfolder);
937 SHFree(cpfolder);
938 }
939 }
940 else
941 {
942 WCHAR clsid[38 + 1];
943 if (SUCCEEDED(hr = FindExeCplClass(pszName, clsid)))
944 {
945 hr = CreateCplAbsoluteParsingPath(L"::", clsid, pszPath, cchPath);
946 }
947 }
948 return hr;
949}
950
952{
953 *pView = CPVIEW_CLASSIC;
954 return S_OK;
955}
static HRESULT GetParsingName(PCIDLIST_ABSOLUTE pidl, PWSTR *Name)
static const shvheader ControlPanelSFHeader[]
controlpanel_columns
@ CONTROLPANEL_COL_NAME
@ CONTROLPANEL_COL_COMMENT
@ CONTROLPANEL_COL_COUNT
static HRESULT FindExeCplClass(LPCWSTR Canonical, HKEY hKey, BOOL Wow64, LPWSTR clsid)
static PIDLCPanelStruct * _ILGetCPanelPointer(LPCITEMIDLIST pidl)
static const REGFOLDERINFO g_RegFolderInfo
static const CLSID * IsRegItem(LPCITEMIDLIST pidl)
EXTERN_C void WINAPI Control_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdShow)
Definition: control.c:1177
HRESULT CCPLExtractIcon_CreateInstance(IShellFolder *psf, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut)
static HRESULT CreateCplAbsoluteParsingPath(LPCWSTR Prefix, LPCWSTR InFolderParse, PWSTR Buf, UINT cchBuf)
static LPITEMIDLIST _ILCreateCPanelApplet(LPCWSTR pszName, LPCWSTR pszDisplayName, LPCWSTR pszComment, int iIconIdx)
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4806
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
static const DWORD dwControlPanelAttributes
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT WINAPI SHCreateDataObject(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IDataObject *pdtInner, REFIID riid, void **ppv)
HRESULT CRegFolder_CreateInstance(PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
Definition: CRegFolder.cpp:995
#define IID_PPV_ARG(Itype, ppType)
@ PT_CONTROLS_OLDREGITEM
Definition: ItemIDList.cpp:16
@ PT_CONTROLS_NEWREGITEM
Definition: ItemIDList.cpp:17
#define shell32_hInstance
#define IDC_STATIC
Definition: resource.h:4
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define IDS_OPEN
Definition: resource.h:18
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define EXTERN_C
Definition: basetyps.h:12
#define RegCloseKey(hKey)
Definition: registry.h:49
STDMETHOD() GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) override
STDMETHOD() QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
HRESULT WINAPI Initialize(UINT cidl, PCUITEMID_CHILD_ARRAY apidl)
PITEMID_CHILD * m_apidl
STDMETHOD() HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHOD() InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) override
BOOL RegisterCPanelApp(LPCWSTR path)
BOOL CreateCPanelEnumList(DWORD dwFlags)
HRESULT WINAPI Initialize(DWORD dwFlags, IEnumIDList *pRegEnumerator)
int RegisterRegistryCPanelApps(HKEY hkey_root, LPCWSTR szRepPath)
STDMETHOD() GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
STDMETHOD() GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
CComPtr< IShellFolder2 > m_regFolder
STDMETHOD() MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
STDMETHOD() GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
STDMETHOD() GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
STDMETHOD() GetDefaultSearchGUID(GUID *pguid) override
STDMETHOD() GetClassID(CLSID *lpClassId) override
STDMETHOD() CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
STDMETHOD() CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
STDMETHOD() GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
STDMETHOD() BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() EnumSearches(IEnumExtraSearch **ppenum) override
STDMETHOD() EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
STDMETHOD() Initialize(PCIDLIST_ABSOLUTE pidl) override
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHOD() SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
BOOL AddToEnumList(LPITEMIDLIST pidl)
HRESULT AppendItemsFromEnumerator(IEnumIDList *pEnum)
STDMETHOD() GetPath(LPCWSTR pszName, LPWSTR pszPath, UINT cchPath) override
STDMETHOD() Open(LPCWSTR pszName, LPCWSTR pszPage, IUnknown *punkSite) override
STDMETHOD() GetCurrentView(CPVIEW *pView) override
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:322
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
BOOL pcheck(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:360
HRESULT hr
Definition: delayimp.cpp:582
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR Name
Definition: desk.c:124
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:40
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:89
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
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:2830
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
UINT uFlags
Definition: api.c:59
HRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid)
Definition: combase.c:1492
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define MAX_PATH
Definition: compat.h:34
#define lstrcpyW
Definition: compat.h:749
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:492
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2331
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
#define IS_INTRESOURCE(x)
Definition: loader.c:613
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
BOOL WINAPI IsOS(DWORD feature)
Definition: main.c:2392
CPlApplet * Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel *panel)
Definition: control.c:61
void Control_UnloadApplet(CPlApplet *applet)
Definition: control.c:45
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:348
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:4574
BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, DWORD grfKeyState, PPOINTL lpPt, DWORD *pdwEffect)
Definition: ordinal.c:1423
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:29
#define L(x)
Definition: resources.c:13
HINSTANCE hInst
Definition: dxdiag.c:13
static FRESULT validate(void *obj)
Definition: ff.c:2372
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint64EXT * result
Definition: glext.h:11304
GLfloat GLfloat p
Definition: glext.h:8902
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
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
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
#define LOBYTE(W)
Definition: jmemdos.c:487
#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
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
#define error(str)
Definition: mkdosfs.c:1605
LPCWSTR szPath
Definition: env.c:37
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static const WCHAR wszFile[]
Definition: misc.c:301
static PROTOCOLDATA * pdata
Definition: protocol.c:163
const CLSID * clsid
Definition: msctf.cpp:50
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_In_ HANDLE hFile
Definition: mswsock.h:90
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define KEY_READ
Definition: nt_native.h:1026
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define PID_STG_NAME
Definition: ntquery.h:56
interface IBindCtx * LPBC
Definition: objfwd.h:18
const FMTID FMTID_SummaryInformation
const GUID IID_IDataObject
#define PathAddBackslashW
Definition: pathcch.h:302
#define PathAppendW
Definition: pathcch.h:310
#define LOWORD(l)
Definition: pedump.c:82
short WCHAR
Definition: pedump.c:58
PITEMID_CHILD * _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
Definition: pidl.c:2631
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName)
Definition: pidl.c:1610
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2280
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2128
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
Definition: pidl.c:2616
LPITEMIDLIST _ILCreateControlPanel(void)
Definition: pidl.c:1825
BOOL _ILIsCPanelStruct(LPCITEMIDLIST pidl)
Definition: pidl.c:2159
static BYTE _ILGetType(LPCITEMIDLIST pidl)
Definition: pidl.h:144
#define PT_CPLAPPLET
Definition: pidl.h:86
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define OS_SERVERADMINUI
Definition: shlwapi.h:260
_In_ UINT cchBuf
Definition: shlwapi.h:378
#define MK_SHIFT
Definition: winuser.h:2405
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define MFT_SEPARATOR
Definition: winuser.h:755
#define MFS_DEFAULT
Definition: winuser.h:759
#define MK_CONTROL
Definition: winuser.h:2406
#define MFS_ENABLED
Definition: winuser.h:761
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define MFT_STRING
Definition: winuser.h:757
#define SW_SHOW
Definition: winuser.h:786
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
wcscpy
#define SEE_MASK_CLASSNAME
Definition: shellapi.h:25
#define SEE_MASK_FLAG_DDEWAIT
Definition: shellapi.h:36
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:740
HRESULT SH32_GetDetailsOfPKeyAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap)
Definition: shlfolder.cpp:152
static HRESULT MakeSCID(SHCOLUMNID &scid, REFCLSID fmtid, UINT pid)
Definition: shfldr.h:99
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:404
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:2793
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2738
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1363
struct _SFV_CREATE SFV_CREATE
#define CSIDL_CONTROLS
Definition: shlobj.h:2223
FOLDERVIEWMODE
Definition: shobjidl.idl:722
@ FVM_LIST
Definition: shobjidl.idl:727
@ FVM_ICON
Definition: shobjidl.idl:724
#define IDS_CREATELINK
Definition: shresdef.h:219
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:65
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_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 _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
struct applet_info info[1]
Definition: cpanel.h:52
unsigned count
Definition: cpanel.h:49
STRRET str
Definition: shtypes.idl:108
_Field_z_ WCHAR cFileName[MAX_PATH]
Definition: minwinbase.h:291
DWORD dwFileAttributes
Definition: minwinbase.h:283
Definition: ftp_var.h:139
Definition: copy.c:22
Definition: name.c:39
WORD colstate
Definition: shfldr.h:32
WORD offsComment
Definition: pidl.h:163
WCHAR szName[1]
Definition: pidl.h:164
WORD offsDispName
Definition: pidl.h:162
PCBYTE PBYTE SIZE_T cbData
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
ULONG_PTR SIZE_T
Definition: typedefs.h:80
char * LPSTR
Definition: typedefs.h:51
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:64
_In_ size_t cnt
Definition: wcstombs.cpp:43
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ LPCSTR lpName
Definition: winbase.h:2519
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR _Inout_ LPDWORD cchDisplayName
Definition: winbase.h:2521
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2497
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define SEVERITY_SUCCESS
Definition: winerror.h:177
#define E_POINTER
Definition: winerror.h:3480
#define ERROR_NOT_FOUND
Definition: winerror.h:1014
_In_ DWORD _In_ int _In_ int _In_opt_ LPNLSVERSIONINFO _In_opt_ LPVOID lpReserved
Definition: winnls.h:1279
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RRF_RT_REG_SZ
Definition: winreg.h:58
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
_In_ __drv_aliasesMem PSTRING Prefix
Definition: rtlfuncs.h:1647
static void Initialize()
Definition: xlate.c:212
unsigned char BYTE
Definition: xxhash.c:193