ReactOS 0.4.16-dev-1151-g3842b59
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{
28 PT_CONTROLS_NEWREGITEM,
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);
90 if (type == PT_CONTROLS_OLDREGITEM || type == PT_CONTROLS_NEWREGITEM)
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
257 if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
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};
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 FIXME("(%p)\n", this);
546 return E_NOTIMPL;
547}
548
550{
551 FIXME("(%p)\n", this);
552 return E_NOTIMPL;
553}
554
556{
557 TRACE("(%p)\n", this);
558
559 if (pSort) *pSort = 0;
560 if (pDisplay) *pDisplay = 0;
561 return S_OK;
562}
563
565{
566 TRACE("(%p)\n", this);
567
568 if (!pcsFlags || iColumn >= CONTROLPANEL_COL_COUNT)
569 return E_INVALIDARG;
570 *pcsFlags = ControlPanelSFHeader[iColumn].colstate;
571 return S_OK;
572}
573
575{
576 if (IsRegItem(pidl))
577 return m_regFolder->GetDetailsEx(pidl, pscid, pv);
578 return SH32_GetDetailsOfPKeyAsVariant(this, pidl, pscid, pv, FALSE);
579}
580
582{
583 if (!psd || iColumn >= CONTROLPANEL_COL_COUNT)
584 return E_INVALIDARG;
585
586 if (!pidl)
587 {
588 psd->fmt = ControlPanelSFHeader[iColumn].fmt;
589 psd->cxChar = ControlPanelSFHeader[iColumn].cxChar;
590 return SHSetStrRet(&psd->str, shell32_hInstance, ControlPanelSFHeader[iColumn].colnameid);
591 }
592 else if (_ILIsSpecialFolder(pidl))
593 {
594 return m_regFolder->GetDetailsOf(pidl, iColumn, psd);
595 }
596 else
597 {
598 PIDLCPanelStruct *pCPanel = _ILGetCPanelPointer(pidl);
599
600 if (!pCPanel)
601 return E_FAIL;
602
603 switch(iColumn)
604 {
606 return SHSetStrRet(&psd->str, pCPanel->szName + pCPanel->offsDispName);
608 return SHSetStrRet(&psd->str, pCPanel->szName + pCPanel->offsComment);
609 }
610 }
611
612 return E_FAIL;
613}
614
616{
617 switch (column)
618 {
619 case CONTROLPANEL_COL_NAME: return MakeSCID(*pscid, FMTID_Storage, PID_STG_NAME);
620 case CONTROLPANEL_COL_COMMENT: return MakeSCID(*pscid, FMTID_SummaryInformation, PIDSI_COMMENTS);
621 }
622 return E_INVALIDARG;
623}
624
625/************************************************************************
626 * CControlPanelFolder::GetClassID
627 */
629{
630 TRACE("(%p)\n", this);
631
632 if (!lpClassId)
633 return E_POINTER;
634 *lpClassId = CLSID_ControlPanel;
635
636 return S_OK;
637}
638
639/************************************************************************
640 * CControlPanelFolder::Initialize
641 *
642 * NOTES: it makes no sense to change the pidl
643 */
645{
646 if (pidlRoot)
648
649 pidlRoot = ILClone(pidl);
650
651 /* Create the inner reg folder */
652 REGFOLDERINITDATA RegInit = { static_cast<IShellFolder*>(this), &g_RegFolderInfo };
653 HRESULT hr;
654 hr = CRegFolder_CreateInstance(&RegInit,
655 pidlRoot,
658 return hr;
659
660 return S_OK;
661}
662
663/**************************************************************************
664 * CControlPanelFolder::GetCurFolder
665 */
667{
668 TRACE("(%p)->(%p)\n", this, pidl);
669
670 if (!pidl)
671 return E_POINTER;
672 *pidl = ILClone(pidlRoot);
673 return S_OK;
674}
675
677{
678 m_apidl = NULL;
679 m_cidl = 0;
680}
681
683{
684 m_cidl = cidl;
685 m_apidl = _ILCopyaPidl(apidl, m_cidl);
686 if (m_cidl && !m_apidl)
687 return E_OUTOFMEMORY;
688
689 return S_OK;
690}
691
693{
695}
696
698 HMENU hMenu,
699 UINT indexMenu,
700 UINT idCmdFirst,
701 UINT idCmdLast,
702 UINT uFlags)
703{
704 _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst, MFT_STRING, MAKEINTRESOURCEW(IDS_OPEN), MFS_DEFAULT);
706 _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + 1, MFT_STRING, MAKEINTRESOURCEW(IDS_CREATELINK), MFS_ENABLED);
707
708 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 2);
709}
710
713
714/**************************************************************************
715* ICPanel_IContextMenu_InvokeCommand()
716*/
718{
719 HRESULT hResult;
720
722 if(!pCPanel)
723 return E_FAIL;
724
725 TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd);
726
727 if (lpcmi->lpVerb == MAKEINTRESOURCEA(0))
728 {
729 /* Hardcode the command here; Executing a cpl file would be fine but we also need to run things like console.dll */
730 WCHAR wszParams[MAX_PATH];
731 PCWSTR wszFile = L"rundll32.exe";
732 PCWSTR wszFormat = L"shell32.dll,Control_RunDLL %s,%s";
733
734 wsprintfW(wszParams, wszFormat, pCPanel->szName, pCPanel->szName + pCPanel->offsDispName);
735
736 /* Note: we pass the applet name to Control_RunDLL to distinguish between multiple applets in one .cpl file */
737 ShellExecuteW(NULL, NULL, wszFile, wszParams, NULL, 0);
738 }
739 else if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) //FIXME
740 {
741 CComPtr<IDataObject> pDataObj;
743
744 hResult = SHCreateDataObject(pidl, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj));
745 if (FAILED(hResult))
746 return hResult;
747
748 SHFree(pidl);
749
750 //FIXME: Use SHCreateLinks
751 CComPtr<IShellFolder> psf;
752 CComPtr<IDropTarget> pDT;
753
754 hResult = SHGetDesktopFolder(&psf);
755 if (FAILED(hResult))
756 return hResult;
757
758 hResult = psf->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pDT));
759 if (FAILED(hResult))
760 return hResult;
761
762 SHSimulateDrop(pDT, pDataObj, MK_CONTROL|MK_SHIFT, NULL, NULL);
763 }
764 return S_OK;
765}
766
767/**************************************************************************
768 * ICPanel_IContextMenu_GetCommandString()
769 *
770 */
772 UINT_PTR idCommand,
773 UINT uFlags,
775 LPSTR lpszName,
776 UINT uMaxNameLen)
777{
778 TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
779
780 FIXME("unknown command string\n");
781 return E_FAIL;
782}
783
784/**************************************************************************
785* ICPanel_IContextMenu_HandleMenuMsg()
786*/
788 UINT uMsg,
791{
792 TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
793
794 return E_NOTIMPL;
795}
796
797/**************************************************************************
798* COpenControlPanel
799*/
800
802{
803 PIDLIST_ABSOLUTE pidlFree = NULL;
804 if (IS_INTRESOURCE(pidl))
805 {
806 HRESULT hr = SHGetSpecialFolderLocation(NULL, (UINT)(SIZE_T)pidl, &pidlFree);
807 if (FAILED(hr))
808 return hr;
809 pidl = pidlFree;
810 }
811 HRESULT hr = SHGetNameFromIDList(pidl, SIGDN_DESKTOPABSOLUTEPARSING, Name);
812 ILFree(pidlFree);
813 return hr;
814}
815
817{
818 PWSTR cpfolder;
820 if (SUCCEEDED(hr))
821 {
822 hr = StringCchPrintfW(Buf, cchBuf, L"%s\\%s%s", cpfolder, Prefix, InFolderParse);
823 SHFree(cpfolder);
824 }
825 return hr;
826}
827
829{
831 HKEY hNSKey;
833 wsprintfW(key, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\%s\\NameSpace",
834 Wow64 ? L"ControlPanelWOW64" : L"ControlPanel");
835 LSTATUS error = RegOpenKeyExW(hKey, key, 0, KEY_READ, &hNSKey);
836 if (error)
838 for (DWORD i = 0; RegEnumKeyW(hNSKey, i, key, _countof(key)) == ERROR_SUCCESS; ++i)
839 {
842 {
843 wsprintfW(buf, L"CLSID\\%s", key);
844 DWORD cb = sizeof(buf);
845 if (RegGetValueW(HKEY_CLASSES_ROOT, buf, L"System.ApplicationName",
847 {
848 if (!lstrcmpiW(buf, Canonical))
849 {
851 hr = S_OK;
852 }
853 }
854 }
855 }
856 RegCloseKey(hNSKey);
857 return hr;
858}
859
861{
862 HRESULT hr = E_FAIL;
863 if (FAILED(hr))
865 if (FAILED(hr))
867 if (FAILED(hr))
869 if (FAILED(hr))
871 return hr;
872}
873
875{
876 WCHAR path[MAX_PATH], clspath[MAX_PATH];
877 HRESULT hr = S_OK;
878 SHELLEXECUTEINFOW sei = { sizeof(sei), SEE_MASK_FLAG_DDEWAIT };
879 sei.lpFile = path;
880 sei.nShow = SW_SHOW;
881 if (!pszName)
882 {
884 PathAppendW(path, L"control.exe");
885 }
886 else
887 {
888 LPWSTR clsid = clspath + wsprintfW(clspath, L"CLSID\\");
889 if (SUCCEEDED(hr = FindExeCplClass(pszName, clsid)))
890 {
892 {
893 // NT6 will execute "::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{clsid}[\pszPage]"
894 // but we don't support parsing that so we force the class instead.
896 sei.lpClass = clspath;
897 }
898 }
899 }
900
901 if (SUCCEEDED(hr))
902 {
905 }
906 return hr;
907}
908
910{
911 HRESULT hr;
912 if (!pszName)
913 {
914 PWSTR cpfolder;
916 {
917 hr = StringCchCopyW(pszPath, cchPath, cpfolder);
918 SHFree(cpfolder);
919 }
920 }
921 else
922 {
923 WCHAR clsid[38 + 1];
924 if (SUCCEEDED(hr = FindExeCplClass(pszName, clsid)))
925 {
926 hr = CreateCplAbsoluteParsingPath(L"::", clsid, pszPath, cchPath);
927 }
928 }
929 return hr;
930}
931
933{
934 *pView = CPVIEW_CLASSIC;
935 return S_OK;
936}
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:4782
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)
#define shell32_hInstance
static DWORD const LPVOID const lpReserved
#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
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
wcscpy
#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
#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:41
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:88
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
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define MAX_PATH
Definition: compat.h:34
#define lstrcpyW
Definition: compat.h:749
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:65
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
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:2313
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
HRESULT WINAPI IIDFromString(LPCOLESTR s, IID *iid)
Definition: compobj.c:2374
#define RRF_RT_REG_SZ
Definition: driver.c:575
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:326
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3384
BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, DWORD grfKeyState, PPOINTL lpPt, DWORD *pdwEffect)
Definition: ordinal.c:1828
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:30
HINSTANCE hInst
Definition: dxdiag.c:13
static FRESULT validate(void *obj)
Definition: ff.c:2372
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
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 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
#define error(str)
Definition: mkdosfs.c:1605
LPCWSTR szPath
Definition: env.c:37
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
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
static PROTOCOLDATA * pdata
Definition: protocol.c:158
REFCLSID clsid
Definition: msctf.c:82
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_In_ HANDLE hFile
Definition: mswsock.h:90
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#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
#define L(x)
Definition: ntvdm.h:50
interface IBindCtx * LPBC
Definition: objfwd.h:18
const FMTID FMTID_SummaryInformation
const GUID IID_IDataObject
#define PathAddBackslashW
Definition: pathcch.h:301
#define PathAppendW
Definition: pathcch.h:309
#define LOWORD(l)
Definition: pedump.c:82
PITEMID_CHILD * _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
Definition: pidl.c:2624
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName)
Definition: pidl.c:1603
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2271
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2119
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
Definition: pidl.c:2607
LPITEMIDLIST _ILCreateControlPanel(void)
Definition: pidl.c:1816
BOOL _ILIsCPanelStruct(LPCITEMIDLIST pidl)
Definition: pidl.c:2150
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
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define SEE_MASK_CLASSNAME
Definition: shellapi.h:25
#define SEE_MASK_FLAG_DDEWAIT
Definition: shellapi.h:34
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:630
HRESULT SH32_GetDetailsOfPKeyAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap)
Definition: shlfolder.cpp:133
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:372
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:2529
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2474
HRESULT hr
Definition: shlfolder.c:183
struct _SFV_CREATE SFV_CREATE
#define CSIDL_CONTROLS
Definition: shlobj.h:2184
#define IDS_CREATELINK
Definition: shresdef.h:221
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:67
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
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
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
unsigned char * LPBYTE
Definition: typedefs.h:53
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:96
static const WCHAR wszFile[]
Definition: urlmon_main.c:386
_In_ size_t cnt
Definition: wcstombs.cpp:43
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ LPCSTR lpName
Definition: winbase.h:2820
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR _Inout_ LPDWORD cchDisplayName
Definition: winbase.h:2822
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2798
_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 S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define SEVERITY_SUCCESS
Definition: winerror.h:64
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_POINTER
Definition: winerror.h:2365
#define ERROR_NOT_FOUND
Definition: winerror.h:690
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define MK_SHIFT
Definition: winuser.h:2380
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
#define MFT_SEPARATOR
Definition: winuser.h:755
#define MFS_DEFAULT
Definition: winuser.h:759
#define MK_CONTROL
Definition: winuser.h:2381
#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
_In_ __drv_aliasesMem PSTRING Prefix
Definition: rtlfuncs.h:1647
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193