ReactOS 0.4.16-dev-455-g37b0646
utils.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: shell32
3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: Utility functions
5 * COPYRIGHT: Copyright 2023-2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#include "precomp.h"
9
11
12HWND
14{
15 for (HWND hWnd, hWndAfter = NULL;;)
16 {
17 hWnd = hWndAfter = FindWindowExW(NULL, hWndAfter, CSTUBWINDOW32_CLASSNAME, Path);
18 if (!hWnd || !Path)
19 return NULL;
21 return hWnd;
22 }
23}
24
27{
29 {
32 }
33 RECT rcPosition = { pPt ? pPt->x : CW_USEDEFAULT, pPt ? pPt->y : CW_USEDEFAULT, 0, 0 };
36 if (!Create(NULL, rcPosition, Path, Style, ExStyle))
37 {
38 ERR("StubWindow32 creation failed\n");
39 return E_FAIL;
40 }
42 return S_OK;
43}
44
49{
50 if (!pidl)
51 {
52 *ppidl = NULL;
53 return S_OK;
54 }
55 *ppidl = ILClone(pidl);
56 return (*ppidl ? S_OK : E_OUTOFMEMORY);
57}
58
60{
61 if (pszPath[0] != L'.')
62 return FALSE;
63 return !pszPath[1] || (pszPath[1] == L'.' && !pszPath[2]);
64}
65
66#define PATH_VALID_ELEMENT ( \
67 PATH_CHAR_CLASS_DOT | PATH_CHAR_CLASS_SEMICOLON | PATH_CHAR_CLASS_COMMA | \
68 PATH_CHAR_CLASS_SPACE | PATH_CHAR_CLASS_OTHER_VALID \
69)
70
72{
73 if (!*pszPath || PathIsDotOrDotDotW(pszPath))
74 return FALSE;
75
76 for (LPCWSTR pch = pszPath; *pch; ++pch)
77 {
79 return FALSE;
80 }
81
82 return TRUE;
83}
84
86{
90
91 if (lstrcmpiW(szPath, L"NUL") == 0 || lstrcmpiW(szPath, L"PRN") == 0 ||
92 lstrcmpiW(szPath, L"CON") == 0 || lstrcmpiW(szPath, L"AUX") == 0)
93 {
94 return TRUE;
95 }
96
97 if (_wcsnicmp(szPath, L"LPT", 3) == 0 || _wcsnicmp(szPath, L"COM", 3) == 0)
98 {
99 if ((L'0' <= szPath[3] && szPath[3] <= L'9') && szPath[4] == UNICODE_NULL)
100 return TRUE;
101 }
102
103 return FALSE;
104}
105
107{
108 LPITEMIDLIST pidlOld = *ppidl;
109 if (!pidlOld)
110 {
111 *ppidl = pidl;
112 return S_OK;
113 }
114
115 HRESULT hr = SHILCombine(*ppidl, pidl, ppidl);
116 ILFree(pidlOld);
117 ILFree(pidl);
118 return hr;
119}
120
121static BOOL
125{
126 BOOL ret;
127
128 if (phToken == NULL)
129 {
131 return FALSE;
132 }
133
134 *phToken = NULL;
135
137 if (!ret && GetLastError() == ERROR_NO_TOKEN)
139
140 return ret;
141}
142
145 _In_ LPCITEMIDLIST pidl,
146 _In_ HANDLE hToken,
147 _Out_ LPITEMIDLIST *ppidlAlias,
149{
150 return E_FAIL; //FIXME
151}
152
154{
156 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam(const_cast<LPWSTR>(pszName), &punk)))
157 return FALSE;
158 return TRUE;
159}
160
162{
163 if (!pbc)
164 return dwDefault;
165
166 BIND_OPTS BindOpts = { sizeof(BindOpts) };
167 HRESULT hr = pbc->GetBindOptions(&BindOpts);
168 if (FAILED(hr))
169 return dwDefault;
170
171 return BindOpts.grfMode;
172}
173
175{
176 if (!pbc)
177 return FALSE;
178
179 BIND_OPTS BindOps = { sizeof(BindOps) };
180 if (SUCCEEDED(pbc->GetBindOptions(&BindOps)) && BindOps.grfFlags == OLECONTF_LINKS)
181 return TRUE;
182
183 return pclsid && SHSkipJunction(pbc, pclsid);
184}
185
187{
190
191 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam((LPWSTR)STR_FILE_SYS_BIND_DATA, &punk)))
192 return S_FALSE;
193
194 if (FAILED(punk->QueryInterface(IID_PPV_ARG(IFileSystemBindData, &pBindData))))
195 return S_FALSE;
196
197 if (pFindData)
198 pBindData->GetFindData(pFindData);
199
200 return S_OK;
201}
202
204{
206
207 switch (code)
208 {
211 case ERROR_CANCELLED:
212 return TRUE;
213
214 default:
216 }
217}
218
221 _In_opt_ IShellFolder *pShellFolder,
222 _In_ LPCITEMIDLIST pidl,
223 _In_opt_ IBindCtx *pBindCtx,
225 _Out_ void **ppvObj)
226{
227 CComPtr<IShellFolder> psfDesktop;
228
229 *ppvObj = NULL;
230
231 if (!pShellFolder)
232 {
233 SHGetDesktopFolder(&psfDesktop);
234 if (!psfDesktop)
235 return E_FAIL;
236
237 pShellFolder = psfDesktop;
238 }
239
240 HRESULT hr;
241 if (_ILIsDesktop(pidl))
242 hr = pShellFolder->QueryInterface(riid, ppvObj);
243 else
244 hr = pShellFolder->BindToObject(pidl, pBindCtx, riid, ppvObj);
245
246 if (SUCCEEDED(hr) && !*ppvObj)
247 hr = E_FAIL;
248
249 return hr;
250}
251
255 _In_ LPCITEMIDLIST pidl,
257 _Out_ void **ppvObj)
258{
259 return SHBindToObjectEx(psf, pidl, NULL, riid, ppvObj);
260}
261
266 _In_ REFIID riid, _Out_ void **ppvObj)
267{
268 if (!ppvObj)
269 return E_INVALIDARG;
270 *ppvObj = NULL;
271 IShellFolder *psf;
272 PCUITEMID_CHILD pidlChild;
273 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
274 if (SUCCEEDED(hr))
275 {
276 hr = psf->GetUIObjectOf(hWnd, 1, &pidlChild, riid, NULL, ppvObj);
277 psf->Release();
278 if (SUCCEEDED(hr))
279 {
280 if (*ppvObj)
281 return hr;
282 hr = E_FAIL;
283 }
284 }
285 return hr;
286}
287
290 _In_ IShellFolder *psf,
291 _In_ LPCITEMIDLIST pidl,
293 _Out_ LPWSTR pszBuf,
294 _In_ UINT cchBuf)
295{
296 *pszBuf = UNICODE_NULL;
297 STRRET sr;
298 HRESULT hr = psf->GetDisplayNameOf(pidl, dwFlags, &sr);
299 if (FAILED(hr))
300 return hr;
301 return StrRetToBufW(&sr, pidl, pszBuf, cchBuf);
302}
303
304DWORD
306{
307 LPCITEMIDLIST pidlLast = pidl;
308 IShellFolder *release = NULL;
309
310 if (!psf)
311 {
312 SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast);
313 if (!psf)
314 return 0;
315 release = psf;
316 }
317
318 DWORD oldAttrs = dwAttributes;
319 if (FAILED(psf->GetAttributesOf(1, &pidlLast, &dwAttributes)))
320 dwAttributes = 0;
321 else
322 dwAttributes &= oldAttrs;
323
324 if ((dwAttributes & SFGAO_FOLDER) &&
325 (dwAttributes & SFGAO_STREAM) &&
326 !(dwAttributes & SFGAO_STORAGEANCESTOR) &&
327 (oldAttrs & SFGAO_STORAGEANCESTOR) &&
328 (SHGetObjectCompatFlags(psf, NULL) & 0x200))
329 {
330 dwAttributes &= ~(SFGAO_STREAM | SFGAO_STORAGEANCESTOR);
331 dwAttributes |= SFGAO_STORAGEANCESTOR;
332 }
333
334 if (release)
335 release->Release();
336 return dwAttributes;
337}
338
340{
341 IShellLink *pSL;
342 HRESULT hr = SHBindToObject(NULL, pidl, IID_PPV_ARG(IShellLink, &pSL));
343 if (SUCCEEDED(hr))
344 {
345 hr = pSL->GetIDList(ppidl); // Note: Returns S_FALSE if no target pidl
346 pSL->Release();
347 }
348 return hr;
349}
350
352{
354 if (FAILED(hr))
356 return hr;
357}
358
361 _In_ LPCITEMIDLIST pidl,
363 _Out_opt_ LPWSTR pszText,
364 _In_ UINT cchBuf,
365 _Inout_opt_ DWORD *pdwAttributes)
366{
367 if (pszText)
368 *pszText = UNICODE_NULL;
369
371
372 CComPtr<IShellFolder> psfFolder;
373 LPCITEMIDLIST ppidlLast;
374 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &ppidlLast);
375 if (SUCCEEDED(hr))
376 {
377 if (pszText)
378 hr = Shell_DisplayNameOf(psfFolder, ppidlLast, dwFlags, pszText, cchBuf);
379
380 if (SUCCEEDED(hr))
381 {
382 if (pdwAttributes)
383 *pdwAttributes = SHGetAttributes(psfFolder, ppidlLast, *pdwAttributes);
384 }
385 }
386
387 if (SUCCEEDED(hrCoInit))
389
390 return hr;
391}
392
395{
396 HWND hWnd = NULL;
397
399 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
400 IUnknown_GetWindow(punk, &hWnd);
401
402 return hWnd;
403}
404
406{
407protected:
410
411public:
413 virtual ~CDummyOleWindow() { }
414
415 // IUnknown methods
417 {
418 static const QITAB c_tab[] =
419 {
421 { NULL }
422 };
423 return ::QISearch(this, c_tab, riid, ppvObj);
424 }
426 {
427 return ++m_cRefs;
428 }
430 {
431 if (--m_cRefs == 0)
432 {
433 delete this;
434 return 0;
435 }
436 return m_cRefs;
437 }
438
439 // IOleWindow methods
440 STDMETHODIMP GetWindow(HWND *phWnd) override
441 {
442 *phWnd = m_hWnd;
443 if (!m_hWnd)
444 return E_NOTIMPL;
445 return S_OK;
446 }
448 {
449 return E_NOTIMPL;
450 }
451};
452
455 _In_ IBindCtx *pBindCtx,
456 _In_ LPOLESTR pszKey,
457 _In_opt_ IUnknown *punk,
458 _Out_ LPBC *ppbc)
459{
460 HRESULT hr = S_OK;
462
463 *ppbc = pBindCtx;
464
465 if (pBindCtx)
466 {
467 pBindCtx->AddRef();
468 }
469 else
470 {
471 hr = CreateBindCtx(0, ppbc);
472 if (FAILED(hr))
473 return hr;
474 }
475
476 if (!punk)
477 punk = pUnknown = new CDummyOleWindow();
478
479 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
480
481 if (pUnknown)
482 pUnknown->Release();
483
484 if (FAILED(hr))
485 {
486 (*ppbc)->Release();
487 *ppbc = NULL;
488 }
489
490 return hr;
491}
492
493/*************************************************************************
494 * SHSetFolderPathA (SHELL32.231)
495 *
496 * @see https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shsetfolderpatha
497 */
501 _In_ INT csidl,
502 _In_ HANDLE hToken,
504 _In_ LPCSTR pszPath)
505{
506 TRACE("(%d, %p, 0x%X, %s)\n", csidl, hToken, dwFlags, debugstr_a(pszPath));
507 CStringW strPathW(pszPath);
508 return SHSetFolderPathW(csidl, hToken, dwFlags, strPathW);
509}
510
511/*************************************************************************
512 * PathIsSlowA (SHELL32.240)
513 *
514 * @see https://learn.microsoft.com/en-us/windows/win32/api/shlobj/nf-shlobj-pathisslowa
515 */
519 _In_ LPCSTR pszFile,
520 _In_ DWORD dwAttr)
521{
522 TRACE("(%s, 0x%X)\n", debugstr_a(pszFile), dwAttr);
523 CStringW strFileW(pszFile);
524 return PathIsSlowW(strFileW, dwAttr);
525}
526
527/*************************************************************************
528 * ExtractIconResInfoA (SHELL32.221)
529 */
533 _In_ HANDLE hHandle,
535 _In_ WORD wIndex,
536 _Out_ LPWORD lpSize,
537 _Out_ LPHANDLE lpIcon)
538{
539 TRACE("(%p, %s, %u, %p, %p)\n", hHandle, debugstr_a(lpFileName), wIndex, lpSize, lpIcon);
540
541 if (!lpFileName)
542 return 0;
543
544 CStringW strFileNameW(lpFileName);
545 return ExtractIconResInfoW(hHandle, strFileNameW, wIndex, lpSize, lpIcon);
546}
547
548/*************************************************************************
549 * ShortSizeFormatW (SHELL32.204)
550 */
554 _In_ DWORD dwNumber,
555 _Out_writes_(0x8FFF) LPWSTR pszBuffer)
556{
557 TRACE("(%lu, %p)\n", dwNumber, pszBuffer);
558 return StrFormatByteSizeW(dwNumber, pszBuffer, 0x8FFF);
559}
560
561/*************************************************************************
562 * SHOpenEffectiveToken (SHELL32.235)
563 */
565{
566 TRACE("%p\n", phToken);
568}
569
570/*************************************************************************
571 * SHGetUserSessionId (SHELL32.248)
572 */
574{
575 DWORD dwSessionId, dwLength;
576 BOOL bOpenToken = FALSE;
577
578 TRACE("%p\n", hToken);
579
580 if (!hToken)
581 bOpenToken = SHOpenEffectiveToken(&hToken);
582
583 if (!hToken ||
584 !GetTokenInformation(hToken, TokenSessionId, &dwSessionId, sizeof(dwSessionId), &dwLength))
585 {
586 dwSessionId = 0;
587 }
588
589 if (bOpenToken)
590 CloseHandle(hToken);
591
592 return dwSessionId;
593}
594
595/*************************************************************************
596 * SHInvokePrivilegedFunctionW (SHELL32.246)
597 */
601 _In_ LPCWSTR pszName,
604{
605 TRACE("(%s %p %p)\n", debugstr_w(pszName), fn, lParam);
606
607 if (!pszName || !fn)
608 return E_INVALIDARG;
609
610 HANDLE hToken = NULL;
611 TOKEN_PRIVILEGES NewPriv, PrevPriv;
612 BOOL bAdjusted = FALSE;
613
614 if (SHOpenEffectiveToken(&hToken) &&
615 ::LookupPrivilegeValueW(NULL, pszName, &NewPriv.Privileges[0].Luid))
616 {
617 NewPriv.PrivilegeCount = 1;
619
620 DWORD dwReturnSize;
621 bAdjusted = ::AdjustTokenPrivileges(hToken, FALSE, &NewPriv,
622 sizeof(PrevPriv), &PrevPriv, &dwReturnSize);
623 }
624
625 HRESULT hr = fn(lParam);
626
627 if (bAdjusted)
628 ::AdjustTokenPrivileges(hToken, FALSE, &PrevPriv, 0, NULL, NULL);
629
630 if (hToken)
631 ::CloseHandle(hToken);
632
633 return hr;
634}
635
636/*************************************************************************
637 * SHTestTokenPrivilegeW (SHELL32.236)
638 *
639 * @see http://undoc.airesoft.co.uk/shell32.dll/SHTestTokenPrivilegeW.php
640 */
644 _In_opt_ HANDLE hToken,
646{
647 LUID Luid;
649 PTOKEN_PRIVILEGES pTokenPriv;
650 HANDLE hNewToken = NULL;
651 BOOL ret = FALSE;
652
653 TRACE("(%p, %s)\n", hToken, debugstr_w(lpName));
654
655 if (!lpName)
656 return FALSE;
657
658 if (!hToken)
659 {
660 if (!SHOpenEffectiveToken(&hNewToken))
661 goto Quit;
662
663 if (!hNewToken)
664 return FALSE;
665
666 hToken = hNewToken;
667 }
668
669 if (!LookupPrivilegeValueW(NULL, lpName, &Luid))
670 return FALSE;
671
672 dwLength = 0;
674 goto Quit;
675
677 if (!pTokenPriv)
678 goto Quit;
679
680 if (GetTokenInformation(hToken, TokenPrivileges, pTokenPriv, dwLength, &dwLength))
681 {
682 UINT iPriv, cPrivs;
683 cPrivs = pTokenPriv->PrivilegeCount;
684 for (iPriv = 0; !ret && iPriv < cPrivs; ++iPriv)
685 {
686 ret = RtlEqualLuid(&Luid, &pTokenPriv->Privileges[iPriv].Luid);
687 }
688 }
689
690 LocalFree(pTokenPriv);
691
692Quit:
693 if (hToken == hNewToken)
694 CloseHandle(hNewToken);
695
696 return ret;
697}
698
700{
702}
703
704/*************************************************************************
705 * IsSuspendAllowed (SHELL32.53)
706 */
708{
709 TRACE("()\n");
711}
712
713/*************************************************************************
714 * SHGetShellStyleHInstance (SHELL32.749)
715 */
717WINAPI
719{
722 HRESULT hr;
723 CStringW strShellStyle;
724
725 TRACE("SHGetShellStyleHInstance called\n");
726
727 /* First, attempt to load the shellstyle dll from the current active theme */
729 if (FAILED(hr))
730 goto DoDefault;
731
732 /* Strip the theme filename */
734
735 strShellStyle = szPath;
736 strShellStyle += L"\\Shell\\";
737 strShellStyle += szColorName;
738 strShellStyle += L"\\ShellStyle.dll";
739
741 if (hInst)
742 return hInst;
743
744 /* Otherwise, use the version stored in the System32 directory */
745DoDefault:
746 if (!ExpandEnvironmentStringsW(L"%SystemRoot%\\System32\\ShellStyle.dll",
748 {
749 ERR("Expand failed\n");
750 return NULL;
751 }
753}
754
755/*************************************************************************
756 * SHCreatePropertyBag (SHELL32.715)
757 */
759WINAPI
761{
763}
764
765/*************************************************************************
766 * SheRemoveQuotesA (SHELL32.@)
767 */
769WINAPI
771{
772 PCHAR pch;
773
774 if (*psz == '"')
775 {
776 for (pch = psz + 1; *pch && *pch != '"'; ++pch)
777 {
778 *(pch - 1) = *pch;
779 }
780
781 if (*pch == '"')
782 *(pch - 1) = ANSI_NULL;
783 }
784
785 return psz;
786}
787
788/*************************************************************************
789 * SheRemoveQuotesW (SHELL32.@)
790 *
791 * ExtractAssociatedIconExW uses this function.
792 */
794WINAPI
796{
797 PWCHAR pch;
798
799 if (*psz == L'"')
800 {
801 for (pch = psz + 1; *pch && *pch != L'"'; ++pch)
802 {
803 *(pch - 1) = *pch;
804 }
805
806 if (*pch == L'"')
807 *(pch - 1) = UNICODE_NULL;
808 }
809
810 return psz;
811}
812
813/*************************************************************************
814 * SHFindComputer [SHELL32.91]
815 *
816 * Invokes the shell search in My Computer. Used in SHFindFiles.
817 * Two parameters are ignored.
818 */
820WINAPI
822{
823 UNREFERENCED_PARAMETER(pidlRoot);
824 UNREFERENCED_PARAMETER(pidlSavedSearch);
825
826 TRACE("%p %p\n", pidlRoot, pidlSavedSearch);
827
828 IContextMenu *pCM;
829 HRESULT hr = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
830 IID_IContextMenu, (void **)&pCM);
831 if (FAILED(hr))
832 {
833 ERR("0x%08X\n", hr);
834 return hr;
835 }
836
837 CMINVOKECOMMANDINFO InvokeInfo = { sizeof(InvokeInfo) };
838 InvokeInfo.lpParameters = "{996E1EB1-B524-11D1-9120-00A0C98BA67D}";
839 InvokeInfo.nShow = SW_SHOWNORMAL;
840 hr = pCM->InvokeCommand(&InvokeInfo);
841 pCM->Release();
842
843 return SUCCEEDED(hr);
844}
845
846static HRESULT
848 _In_ LONGLONG llValue,
849 _Out_writes_(cchValue) LPWSTR pszValue,
850 _In_ UINT cchValue)
851{
852 WCHAR szBuff[40];
853 UINT ich = 0, ichValue;
854#if (WINVER >= _WIN32_WINNT_VISTA)
855 BOOL bMinus = (llValue < 0);
856
857 if (bMinus)
858 llValue = -llValue;
859#endif
860
861 if (cchValue <= 0)
862 return E_FAIL;
863
864 do
865 {
866 szBuff[ich++] = (WCHAR)(L'0' + (llValue % 10));
867 llValue /= 10;
868 } while (llValue != 0 && ich < _countof(szBuff) - 1);
869
870#if (WINVER >= _WIN32_WINNT_VISTA)
871 if (bMinus && ich < _countof(szBuff))
872 szBuff[ich++] = '-';
873#endif
874
875 for (ichValue = 0; ich > 0 && ichValue < cchValue; ++ichValue)
876 {
877 --ich;
878 pszValue[ichValue] = szBuff[ich];
879 }
880
881 if (ichValue >= cchValue)
882 {
883 pszValue[cchValue - 1] = UNICODE_NULL;
884 return E_FAIL;
885 }
886
887 pszValue[ichValue] = UNICODE_NULL;
888 return S_OK;
889}
890
891static VOID
893 _Out_ NUMBERFMTW *pDest,
894 _In_opt_ const NUMBERFMTW *pSrc,
895 _In_ DWORD dwNumberFlags,
896 _Out_writes_(cchDecimal) LPWSTR pszDecimal,
897 _In_ INT cchDecimal,
898 _Out_writes_(cchThousand) LPWSTR pszThousand,
899 _In_ INT cchThousand)
900{
901 WCHAR szBuff[20];
902
903 if (pSrc)
904 *pDest = *pSrc;
905 else
906 dwNumberFlags = 0;
907
908 if (!(dwNumberFlags & FMT_USE_NUMDIGITS))
909 {
911 pDest->NumDigits = StrToIntW(szBuff);
912 }
913
914 if (!(dwNumberFlags & FMT_USE_LEADZERO))
915 {
917 pDest->LeadingZero = StrToIntW(szBuff);
918 }
919
920 if (!(dwNumberFlags & FMT_USE_GROUPING))
921 {
923 pDest->Grouping = StrToIntW(szBuff);
924 }
925
926 if (!(dwNumberFlags & FMT_USE_DECIMAL))
927 {
928 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, pszDecimal, cchDecimal);
929 pDest->lpDecimalSep = pszDecimal;
930 }
931
932 if (!(dwNumberFlags & FMT_USE_THOUSAND))
933 {
934 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, pszThousand, cchThousand);
935 pDest->lpThousandSep = pszThousand;
936 }
937
938 if (!(dwNumberFlags & FMT_USE_NEGNUMBER))
939 {
941 pDest->NegativeOrder = StrToIntW(szBuff);
942 }
943}
944
945/*************************************************************************
946 * Int64ToString [SHELL32.209]
947 *
948 * @see http://undoc.airesoft.co.uk/shell32.dll/Int64ToString.php
949 */
953 _In_ LONGLONG llValue,
954 _Out_writes_(cchOut) LPWSTR pszOut,
955 _In_ UINT cchOut,
956 _In_ BOOL bUseFormat,
957 _In_opt_ const NUMBERFMTW *pNumberFormat,
958 _In_ DWORD dwNumberFlags)
959{
960 INT ret;
961 NUMBERFMTW NumFormat;
962 WCHAR szValue[80], szDecimalSep[6], szThousandSep[6];
963
964 Int64ToStr(llValue, szValue, _countof(szValue));
965
966 if (bUseFormat)
967 {
968 Int64GetNumFormat(&NumFormat, pNumberFormat, dwNumberFlags,
969 szDecimalSep, _countof(szDecimalSep),
970 szThousandSep, _countof(szThousandSep));
971 ret = GetNumberFormatW(LOCALE_USER_DEFAULT, 0, szValue, &NumFormat, pszOut, cchOut);
972 if (ret)
973 --ret;
974 return ret;
975 }
976
977 if (FAILED(StringCchCopyW(pszOut, cchOut, szValue)))
978 return 0;
979
980 return lstrlenW(pszOut);
981}
982
983/*************************************************************************
984 * LargeIntegerToString [SHELL32.210]
985 *
986 * @see http://undoc.airesoft.co.uk/shell32.dll/LargeIntegerToString.php
987 */
991 _In_ const LARGE_INTEGER *pLargeInt,
992 _Out_writes_(cchOut) LPWSTR pszOut,
993 _In_ UINT cchOut,
994 _In_ BOOL bUseFormat,
995 _In_opt_ const NUMBERFMTW *pNumberFormat,
996 _In_ DWORD dwNumberFlags)
997{
998 return Int64ToString(pLargeInt->QuadPart, pszOut, cchOut, bUseFormat,
999 pNumberFormat, dwNumberFlags);
1000}
1001
1002/*************************************************************************
1003 * CopyStreamUI [SHELL32.726]
1004 *
1005 * Copy a stream to another stream with optional progress display.
1006 */
1010 _In_ IStream *pSrc,
1011 _Out_ IStream *pDst,
1012 _Inout_opt_ IProgressDialog *pProgress,
1013 _In_opt_ DWORDLONG dwlSize)
1014{
1015 HRESULT hr = E_FAIL;
1016 DWORD cbBuff, cbRead, dwSizeToWrite;
1017 DWORDLONG cbDone;
1018 LPVOID pBuff;
1019 CComHeapPtr<BYTE> pHeapPtr;
1020 STATSTG Stat;
1021 BYTE abBuff[1024];
1022
1023 TRACE("(%p, %p, %p, %I64u)\n", pSrc, pDst, pProgress, dwlSize);
1024
1025 if (dwlSize == 0) // Invalid size?
1026 {
1027 // Get the stream size
1028 ZeroMemory(&Stat, sizeof(Stat));
1029 if (FAILED(pSrc->Stat(&Stat, STATFLAG_NONAME)))
1030 pProgress = NULL; // No size info. Disable progress
1031 else
1032 dwlSize = Stat.cbSize.QuadPart;
1033 }
1034
1035 if (!pProgress) // Progress is disabled?
1036 {
1037 ULARGE_INTEGER uliSize;
1038
1039 if (dwlSize > 0)
1040 uliSize.QuadPart = dwlSize;
1041 else
1042 uliSize.HighPart = uliSize.LowPart = INVALID_FILE_SIZE;
1043
1044 return pSrc->CopyTo(pDst, uliSize, NULL, NULL); // One punch
1045 }
1046
1047 // Allocate the buffer if necessary
1048 if (dwlSize > 0 && dwlSize <= sizeof(abBuff))
1049 {
1050 cbBuff = sizeof(abBuff);
1051 pBuff = abBuff;
1052 }
1053 else
1054 {
1055#define COPY_STREAM_DEFAULT_BUFFER_SIZE 0x4000
1057 if (pHeapPtr.AllocateBytes(cbBuff))
1058 {
1059 pBuff = pHeapPtr;
1060 }
1061 else // Low memory?
1062 {
1063 cbBuff = sizeof(abBuff);
1064 pBuff = abBuff;
1065 }
1066#undef COPY_STREAM_DEFAULT_BUFFER_SIZE
1067 }
1068
1069 // Start reading
1071 zero.QuadPart = 0;
1072 pSrc->Seek(zero, 0, NULL);
1073 pDst->Seek(zero, 0, NULL);
1074 cbDone = 0;
1075 pProgress->SetProgress64(cbDone, dwlSize);
1076
1077 // Repeat reading and writing until goal
1078 for (;;)
1079 {
1080 hr = pSrc->Read(pBuff, cbBuff, &cbRead);
1081 if (FAILED(hr))
1082 break;
1083
1084 // Calculate the size to write
1085 if (dwlSize > 0)
1086 dwSizeToWrite = (DWORD)min((DWORDLONG)(dwlSize - cbDone), (DWORDLONG)cbRead);
1087 else
1088 dwSizeToWrite = cbRead;
1089
1090 if (dwSizeToWrite == 0) // No need to write?
1091 {
1092 hr = S_OK;
1093 break;
1094 }
1095
1096 hr = pDst->Write(pBuff, dwSizeToWrite, NULL);
1097 if (hr != S_OK)
1098 break;
1099
1100 cbDone += dwSizeToWrite;
1101
1102 if (pProgress->HasUserCancelled()) // Cancelled?
1103 {
1105 break;
1106 }
1107 pProgress->SetProgress64(cbDone, dwlSize);
1108
1109 if (dwlSize > 0 && cbDone >= dwlSize) // Reached the goal?
1110 {
1111 hr = S_OK;
1112 break;
1113 }
1114 }
1115
1116 return hr;
1117}
1118
1119/*************************************************************************
1120 * SHOpenPropSheetA [SHELL32.707]
1121 *
1122 * @see https://learn.microsoft.com/en-us/windows/win32/api/shlobj/nf-shlobj-shopenpropsheeta
1123 */
1127 _In_opt_ LPCSTR pszCaption,
1128 _In_opt_ HKEY *ahKeys,
1129 _In_ UINT cKeys,
1130 _In_ const CLSID *pclsidDefault,
1131 _In_ IDataObject *pDataObject,
1132 _In_opt_ IShellBrowser *pShellBrowser,
1133 _In_opt_ LPCSTR pszStartPage)
1134{
1135 CStringW strStartPageW, strCaptionW;
1136 LPCWSTR pszCaptionW = NULL, pszStartPageW = NULL;
1137
1138 TRACE("(%s, %p, %u, %p, %p, %p, %s)", debugstr_a(pszCaption), ahKeys, cKeys, pclsidDefault,
1139 pDataObject, pShellBrowser, debugstr_a(pszStartPage));
1140
1141 if (pszCaption)
1142 {
1143 strStartPageW = pszCaption;
1144 pszCaptionW = strCaptionW;
1145 }
1146
1147 if (pszStartPage)
1148 {
1149 strStartPageW = pszStartPage;
1150 pszStartPageW = strStartPageW;
1151 }
1152
1153 return SHOpenPropSheetW(pszCaptionW, ahKeys, cKeys, pclsidDefault,
1154 pDataObject, pShellBrowser, pszStartPageW);
1155}
1156
1157/*************************************************************************
1158 * Activate_RunDLL [SHELL32.105]
1159 *
1160 * Unlocks the foreground window and allows the shell window to become the
1161 * foreground window. Every parameter is unused.
1162 */
1166 _In_ HWND hwnd,
1169 _In_ INT cmdshow)
1170{
1171 DWORD dwProcessID;
1172
1176 UNREFERENCED_PARAMETER(cmdshow);
1177
1178 TRACE("(%p, %p, %s, %d)\n", hwnd, hinst, debugstr_w(cmdline), cmdline);
1179
1181 return AllowSetForegroundWindow(dwProcessID);
1182}
1183
1184/*************************************************************************
1185 * SHStartNetConnectionDialogA (SHELL32.12)
1186 *
1187 * @see https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shstartnetconnectiondialoga
1188 */
1192 _In_ HWND hwnd,
1193 _In_ LPCSTR pszRemoteName,
1194 _In_ DWORD dwType)
1195{
1196 LPCWSTR pszRemoteNameW = NULL;
1197 CStringW strRemoteNameW;
1198
1199 TRACE("(%p, %s, %lu)\n", hwnd, debugstr_a(pszRemoteName), dwType);
1200
1201 if (pszRemoteName)
1202 {
1203 strRemoteNameW = pszRemoteName;
1204 pszRemoteNameW = strRemoteNameW;
1205 }
1206
1207 return SHStartNetConnectionDialogW(hwnd, pszRemoteNameW, dwType);
1208}
1209
1210/*************************************************************************
1211 * Helper functions for PathIsEqualOrSubFolder
1212 */
1213
1214static INT
1216 _In_ LPCWSTR lpszPath1,
1217 _In_ LPCWSTR lpszPath2,
1218 _Out_ CStringW& strPath)
1219{
1220 SIZE_T cchPath1 = wcslen(lpszPath1);
1221 SIZE_T cchPath2 = wcslen(lpszPath2);
1222 LPWSTR lpszPath = strPath.GetBuffer((INT)max(cchPath1, cchPath2) + 16);
1223 INT ret = PathCommonPrefixW(lpszPath1, lpszPath2, lpszPath);
1224 strPath.ReleaseBuffer();
1225 return ret;
1226}
1227
1230
1231static HRESULT
1233 _In_ LPCITEMIDLIST pidl,
1234 _Out_ CStringW& strPath)
1235{
1236 HRESULT hr;
1237
1238 for (UINT cchPath = MAX_PATH;; cchPath *= 2)
1239 {
1240 LPWSTR lpszPath = strPath.GetBuffer(cchPath);
1241 if (!lpszPath)
1242 return E_OUTOFMEMORY;
1243
1244 hr = SHGetPathCchFromIDListW(pidl, lpszPath, cchPath);
1245 strPath.ReleaseBuffer();
1246
1248 break;
1249
1250 if (cchPath >= MAXUINT / 2)
1251 {
1252 hr = E_FAIL;
1253 break;
1254 }
1255 }
1256
1257 if (FAILED(hr))
1258 strPath.Empty();
1259
1260 return hr;
1261}
1262
1263static HRESULT
1265 _In_ HWND hwndOwner,
1266 _Out_ CStringW& strPath,
1267 _In_ INT nCSIDL,
1269{
1270 LPITEMIDLIST pidl;
1271 HRESULT hr = SHGetSpecialFolderLocation(hwndOwner, nCSIDL, &pidl);
1272 if (SUCCEEDED(hr))
1273 {
1274 hr = DynamicSHGetPathFromIDListW(pidl, strPath);
1275 CoTaskMemFree(pidl);
1276 }
1277
1278 if (FAILED(hr))
1279 strPath.Empty();
1280 else if (bCreate)
1281 CreateDirectoryW(strPath, NULL);
1282
1283 return hr;
1284}
1285
1286static VOID
1288 _Out_ CStringW& strPath)
1289{
1290 INT nLength = strPath.GetLength();
1291 if (nLength > 0 && strPath[nLength - 1] == L'\\')
1292 strPath = strPath.Left(nLength - 1);
1293}
1294
1295/*************************************************************************
1296 * PathIsEqualOrSubFolder (SHELL32.755)
1297 */
1301 _In_ LPCWSTR pszPath1OrCSIDL,
1302 _In_ LPCWSTR pszPath2)
1303{
1304 CStringW strCommon, strPath1;
1305
1306 TRACE("(%s %s)\n", debugstr_w(pszPath1OrCSIDL), debugstr_w(pszPath2));
1307
1308 if (IS_INTRESOURCE(pszPath1OrCSIDL))
1309 {
1311 NULL, strPath1, LOWORD(pszPath1OrCSIDL) | CSIDL_FLAG_DONT_VERIFY, FALSE);
1312 }
1313 else
1314 {
1315 strPath1 = pszPath1OrCSIDL;
1316 }
1317
1319
1320 if (!DynamicPathCommonPrefixW(strPath1, pszPath2, strCommon))
1321 return FALSE;
1322
1323 return strPath1.CompareNoCase(strCommon) == 0;
1324}
1325
1326/*************************************************************************
1327 * SHGetRealIDL [SHELL32.98]
1328 */
1332 _In_ IShellFolder *psf,
1333 _In_ PCUITEMID_CHILD pidlSimple,
1334 _Outptr_ PITEMID_CHILD *ppidlReal)
1335{
1336 HRESULT hr;
1337 STRRET strret;
1339 SFGAOF attrs;
1340
1341 *ppidlReal = NULL;
1342
1343 hr = IShellFolder_GetDisplayNameOf(psf, pidlSimple, SHGDN_INFOLDER | SHGDN_FORPARSING,
1344 &strret, 0);
1346 return hr;
1347
1348 hr = StrRetToBufW(&strret, pidlSimple, szPath, _countof(szPath));
1350 return hr;
1351
1352 attrs = SFGAO_FILESYSTEM;
1353 hr = psf->GetAttributesOf(1, &pidlSimple, &attrs);
1354 if (SUCCEEDED(hr) && !(attrs & SFGAO_FILESYSTEM))
1355 return SHILClone(pidlSimple, ppidlReal);
1356
1357 hr = IShellFolder_ParseDisplayName(psf, NULL, NULL, szPath, NULL, ppidlReal, NULL);
1358 if (hr == E_INVALIDARG || hr == E_NOTIMPL)
1359 return SHILClone(pidlSimple, ppidlReal);
1360
1361 return hr;
1362}
1363
1367 _In_ PCWSTR pszCommandName,
1369{
1370 HRESULT hr;
1372 if (SUCCEEDED(hr = pUnk->QueryInterface(IID_PPV_ARG(IInitializeCommand, &pIC))))
1373 hr = pIC->Initialize(pszCommandName, pPB);
1374 return hr;
1375}
1376
1379 _In_ IExecuteCommand *pEC,
1380 _In_ PCWSTR pszCommandName,
1382 _In_opt_ IShellItemArray *pSIA,
1383 _In_opt_ LPCMINVOKECOMMANDINFOEX pICI,
1384 _In_opt_ IUnknown *pSite)
1385{
1386 if (!pEC)
1387 return E_INVALIDARG;
1388
1389 if (pSite)
1390 IUnknown_SetSite(pEC, pSite);
1391 IUnknown_InitializeCommand(pEC, pszCommandName, pPB);
1392
1394 if (pSIA && SUCCEEDED(pEC->QueryInterface(IID_PPV_ARG(IObjectWithSelection, &pOWS))))
1395 pOWS->SetSelection(pSIA);
1396
1397 DWORD dwKeyState = 0, fMask = pICI ? pICI->fMask : 0;
1398 pEC->SetNoShowUI((fMask & CMIC_MASK_FLAG_NO_UI) != 0);
1399 pEC->SetShowWindow(pICI ? pICI->nShow : SW_SHOW);
1400 if (fMask & CMIC_MASK_SHIFT_DOWN)
1401 dwKeyState |= MK_SHIFT;
1402 if (fMask & CMIC_MASK_CONTROL_DOWN)
1403 dwKeyState |= MK_CONTROL;
1404 pEC->SetKeyState(dwKeyState);
1405 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpDirectoryW)
1406 pEC->SetDirectory(pICI->lpDirectoryW);
1407 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpParametersW)
1408 pEC->SetParameters(pICI->lpParametersW);
1409 if (fMask & CMIC_MASK_PTINVOKE)
1410 pEC->SetPosition(pICI->ptInvoke);
1411
1412 HRESULT hr = pEC->Execute();
1413 if (pSite)
1414 IUnknown_SetSite(pEC, NULL);
1415 return hr;
1416}
1417
1420 _In_ IExecuteCommand *pEC,
1421 _In_ PCWSTR pszCommandName,
1423 _In_ IDataObject *pDO,
1424 _In_opt_ LPCMINVOKECOMMANDINFOEX pICI,
1425 _In_opt_ IUnknown *pSite)
1426{
1428 HRESULT hr = SHCreateShellItemArrayFromDataObject(pDO, IID_PPV_ARG(IShellItemArray, &pSIA));
1429 return SUCCEEDED(hr) ? InvokeIExecuteCommand(pEC, pszCommandName, pPB, pSIA, pICI, pSite) : hr;
1430}
1431
1432static HRESULT
1434{
1435 HRESULT hr = pCM->GetCommandString(Id, GCS & ~GCS_UNICODE, NULL, Buf, cchMax);
1436 if (FAILED(hr))
1437 {
1439 hr = pCM->GetCommandString(Id, GCS | GCS_UNICODE, NULL, (LPSTR)buf, _countof(buf));
1440 if (SUCCEEDED(hr))
1441 hr = SHUnicodeToAnsi(buf, Buf, cchMax) > 0 ? S_OK : E_FAIL;
1442 }
1443 return hr;
1444}
1445
1446UINT
1448{
1449 CHAR buf[MAX_PATH];
1450 if (IS_INTRESOURCE(verba))
1451 {
1452 if (FAILED(GetCommandStringA(pCM, LOWORD(verba), GCS_VERB, buf, _countof(buf))))
1453 return 0;
1454 verba = buf;
1455 }
1456 return MapVerbToDfmCmd(verba); // Returns DFM_CMD_* or 0
1457}
1458
1459HRESULT
1460SHELL_MapContextMenuVerbToCmdId(LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap)
1461{
1462 LPCSTR pVerbA = pICI->lpVerb;
1463 CHAR buf[MAX_PATH];
1464 LPCMINVOKECOMMANDINFOEX pICIX = (LPCMINVOKECOMMANDINFOEX)pICI;
1465 if (IsUnicode(*pICIX) && !IS_INTRESOURCE(pICIX->lpVerbW))
1466 {
1467 if (SHUnicodeToAnsi(pICIX->lpVerbW, buf, _countof(buf)))
1468 pVerbA = buf;
1469 }
1470
1471 if (IS_INTRESOURCE(pVerbA))
1472 return LOWORD(pVerbA);
1473 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1474 {
1475 assert(SUCCEEDED((int)(pMap[i].CmdId))); // The id must be >= 0 and ideally in the 0..0x7fff range
1476 if (!lstrcmpiA(pMap[i].Verb, pVerbA) && pVerbA[0])
1477 return pMap[i].CmdId;
1478 }
1479 return E_FAIL;
1480}
1481
1482static const CMVERBMAP*
1484{
1485 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1486 {
1487 if (pMap[i].CmdId == CmdId)
1488 return &pMap[i];
1489 }
1490 return NULL;
1491}
1492
1493HRESULT
1495{
1496 const CMVERBMAP* pEntry;
1497 switch (uFlags | GCS_UNICODE)
1498 {
1499 case GCS_VALIDATEW:
1500 case GCS_VERBW:
1501 pEntry = FindVerbMapEntry(CmdId, pMap);
1502 if ((uFlags | GCS_UNICODE) == GCS_VERBW)
1503 {
1504 if (!pEntry)
1505 return E_INVALIDARG;
1506 else if (uFlags & GCS_UNICODE)
1507 return SHAnsiToUnicode(pEntry->Verb, (LPWSTR)Buf, cchBuf) ? S_OK : E_FAIL;
1508 else
1509 return StringCchCopyA(Buf, cchBuf, pEntry->Verb);
1510 }
1511 return pEntry ? S_OK : S_FALSE; // GCS_VALIDATE
1512 }
1513 return E_NOTIMPL;
1514}
1515
1516HRESULT
1518{
1522 return hr;
1523 initIcon->SetNormalIcon(swShell32Name, IconIndex);
1524 return initIcon->QueryInterface(riid, ppvOut);
1525}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
UINT MapVerbToDfmCmd(_In_ LPCSTR verba)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
DWORD Id
EXTERN_C HRESULT WINAPI SHCreateShellItemArrayFromDataObject(_In_ IDataObject *pdo, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:429
PRTL_UNICODE_STRING_BUFFER Path
UINT cchMax
Type
Definition: Type.h:7
const DWORD Style
Definition: appswitch.c:71
const DWORD ExStyle
Definition: appswitch.c:72
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
@ Create
Definition: registry.c:563
#define ERR(fmt,...)
Definition: precomp.h:57
#define ULongToHandle(h)
Definition: basetsd.h:81
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
int CompareNoCase(_In_z_ PCXSTR psz) const
Definition: cstringt.h:743
HWND GetLastActivePopup() const
Definition: atlwin.h:676
STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj) override
Definition: utils.cpp:416
STDMETHODIMP GetWindow(HWND *phWnd) override
Definition: utils.cpp:440
STDMETHODIMP_(ULONG) Release() override
Definition: utils.cpp:429
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override
Definition: utils.cpp:447
STDMETHODIMP_(ULONG) AddRef() override
Definition: utils.cpp:425
virtual ~CDummyOleWindow()
Definition: utils.cpp:413
bool AllocateBytes(_In_ size_t nBytes)
Definition: atlalloc.h:127
HRESULT CreateStub(UINT Type, LPCWSTR Path, const POINT *pPt)
Definition: utils.cpp:26
static LPCWSTR GetTypePropName()
Definition: precomp.h:208
static HWND FindStubWindow(UINT Type, LPCWSTR Path)
Definition: utils.cpp:13
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
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
Definition: misc.c:782
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
Definition: security.c:374
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:411
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:294
BOOL WINAPI OpenThreadToken(HANDLE ThreadHandle, DWORD DesiredAccess, BOOL OpenAsSelf, HANDLE *TokenHandle)
Definition: security.c:336
UINT uFlags
Definition: api.c:59
INT WINAPI StrToIntW(LPCWSTR lpString)
Definition: string.c:407
#define CloseHandle
Definition: compat.h:739
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define GetCurrentProcess()
Definition: compat.h:759
#define MAX_PATH
Definition: compat.h:34
#define lstrlenW
Definition: compat.h:750
static DWORD DWORD * dwLength
Definition: fusion.c:86
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4224
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1666
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
static const WCHAR IconIndex[]
Definition: install.c:52
#define CSTUBWINDOW32_CLASSNAME
Definition: precomp.h:198
EXTERN_C WORD WINAPI ExtractIconResInfoW(_In_ HANDLE hHandle, _In_ LPCWSTR lpFileName, _In_ WORD wIndex, _Out_ LPWORD lpSize, _Out_ LPHANDLE lpIcon)
Definition: stubs.cpp:792
EXTERN_C HRESULT WINAPI SHSetFolderPathW(_In_ INT csidl, _In_ HANDLE hToken, _In_ DWORD dwFlags, _In_ LPCWSTR pszPath)
Definition: stubs.cpp:867
EXTERN_C HRESULT WINAPI SHStartNetConnectionDialogW(_In_ HWND hwnd, _In_ LPCWSTR pszRemoteName, _In_ DWORD dwType)
Definition: stubs.cpp:599
EXTERN_C BOOL WINAPI PathIsSlowW(_In_ LPCWSTR pszFile, _In_ DWORD dwAttr)
Definition: stubs.cpp:915
EXTERN_C BOOL WINAPI SHOpenPropSheetA(_In_opt_ LPCSTR pszCaption, _In_opt_ HKEY *ahKeys, _In_ UINT cKeys, _In_ const CLSID *pclsidDefault, _In_ IDataObject *pDataObject, _In_opt_ IShellBrowser *pShellBrowser, _In_opt_ LPCSTR pszStartPage)
Definition: utils.cpp:1126
BOOL WINAPI IsSuspendAllowed(VOID)
Definition: utils.cpp:707
HRESULT SHELL_CreateShell32DefaultExtractIcon(int IconIndex, REFIID riid, LPVOID *ppvOut)
Definition: utils.cpp:1517
EXTERN_C HRESULT WINAPI SHGetPathCchFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath, SIZE_T cchPathMax)
static const CMVERBMAP * FindVerbMapEntry(UINT_PTR CmdId, const CMVERBMAP *pMap)
Definition: utils.cpp:1483
#define PATH_VALID_ELEMENT
Definition: utils.cpp:66
HRESULT Shell_DisplayNameOf(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: utils.cpp:289
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:305
static VOID DynamicPathRemoveBackslashW(_Out_ CStringW &strPath)
Definition: utils.cpp:1287
EXTERN_C WORD WINAPI ExtractIconResInfoA(_In_ HANDLE hHandle, _In_ LPCSTR lpFileName, _In_ WORD wIndex, _Out_ LPWORD lpSize, _Out_ LPHANDLE lpIcon)
Definition: utils.cpp:532
HRESULT SHGetNameAndFlagsW(_In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_opt_ LPWSTR pszText, _In_ UINT cchBuf, _Inout_opt_ DWORD *pdwAttributes)
Definition: utils.cpp:360
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:46
static HRESULT GetCommandStringA(_In_ IContextMenu *pCM, _In_ UINT_PTR Id, _In_ UINT GCS, _Out_writes_(cchMax) LPSTR Buf, _In_ UINT cchMax)
Definition: utils.cpp:1433
EXTERN_C BOOL WINAPI PathIsEqualOrSubFolder(_In_ LPCWSTR pszPath1OrCSIDL, _In_ LPCWSTR pszPath2)
Definition: utils.cpp:1300
EXTERN_C HRESULT WINAPI SHGetRealIDL(_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
Definition: utils.cpp:1331
EXTERN_C DWORD WINAPI SHGetUserSessionId(_In_opt_ HANDLE hToken)
Definition: utils.cpp:573
#define COPY_STREAM_DEFAULT_BUFFER_SIZE
static VOID Int64GetNumFormat(_Out_ NUMBERFMTW *pDest, _In_opt_ const NUMBERFMTW *pSrc, _In_ DWORD dwNumberFlags, _Out_writes_(cchDecimal) LPWSTR pszDecimal, _In_ INT cchDecimal, _Out_writes_(cchThousand) LPWSTR pszThousand, _In_ INT cchThousand)
Definition: utils.cpp:892
EXTERN_C BOOL WINAPI SHTestTokenPrivilegeW(_In_opt_ HANDLE hToken, _In_ LPCWSTR lpName)
Definition: utils.cpp:643
DWORD BindCtx_GetMode(_In_ IBindCtx *pbc, _In_ DWORD dwDefault)
Definition: utils.cpp:161
EXTERN_C HRESULT WINAPI SHInvokePrivilegedFunctionW(_In_ LPCWSTR pszName, _In_ PRIVILEGED_FUNCTION fn, _In_opt_ LPARAM lParam)
Definition: utils.cpp:600
BOOL BindCtx_ContainsObject(_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName)
Definition: utils.cpp:153
HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData)
Definition: utils.cpp:186
BOOL PathIsValidElement(_In_ LPCWSTR pszPath)
Definition: utils.cpp:71
EXTERN_C HRESULT InvokeIExecuteCommand(_In_ IExecuteCommand *pEC, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB, _In_opt_ IShellItemArray *pSIA, _In_opt_ LPCMINVOKECOMMANDINFOEX pICI, _In_opt_ IUnknown *pSite)
Definition: utils.cpp:1378
EXTERN_C LPWSTR WINAPI ShortSizeFormatW(_In_ DWORD dwNumber, _Out_writes_(0x8FFF) LPWSTR pszBuffer)
Definition: utils.cpp:553
EXTERN_C LPSTR WINAPI SheRemoveQuotesA(LPSTR psz)
Definition: utils.cpp:770
BOOL Shell_FailForceReturn(_In_ HRESULT hr)
Definition: utils.cpp:203
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:253
static INT DynamicPathCommonPrefixW(_In_ LPCWSTR lpszPath1, _In_ LPCWSTR lpszPath2, _Out_ CStringW &strPath)
Definition: utils.cpp:1215
EXTERN_C HRESULT IUnknown_InitializeCommand(_In_ IUnknown *pUnk, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB)
Definition: utils.cpp:1365
static HRESULT DynamicSHGetPathFromIDListW(_In_ LPCITEMIDLIST pidl, _Out_ CStringW &strPath)
Definition: utils.cpp:1232
EXTERN_C INT WINAPI Int64ToString(_In_ LONGLONG llValue, _Out_writes_(cchOut) LPWSTR pszOut, _In_ UINT cchOut, _In_ BOOL bUseFormat, _In_opt_ const NUMBERFMTW *pNumberFormat, _In_ DWORD dwNumberFlags)
Definition: utils.cpp:952
EXTERN_C BOOL WINAPI Activate_RunDLL(_In_ HWND hwnd, _In_ HINSTANCE hinst, _In_ LPCWSTR cmdline, _In_ INT cmdshow)
Definition: utils.cpp:1165
EXTERN_C BOOL WINAPI PathIsSlowA(_In_ LPCSTR pszFile, _In_ DWORD dwAttr)
Definition: utils.cpp:518
UINT GetDfmCmd(_In_ IContextMenu *pCM, _In_ LPCSTR verba)
Definition: utils.cpp:1447
HRESULT SHELL_GetCommandStringImpl(SIZE_T CmdId, UINT uFlags, LPSTR Buf, UINT cchBuf, const CMVERBMAP *pMap)
Definition: utils.cpp:1494
EXTERN_C INT WINAPI LargeIntegerToString(_In_ const LARGE_INTEGER *pLargeInt, _Out_writes_(cchOut) LPWSTR pszOut, _In_ UINT cchOut, _In_ BOOL bUseFormat, _In_opt_ const NUMBERFMTW *pNumberFormat, _In_ DWORD dwNumberFlags)
Definition: utils.cpp:990
EXTERN_C HINSTANCE WINAPI SHGetShellStyleHInstance(VOID)
Definition: utils.cpp:718
EXTERN_C HRESULT SHELL_GetUIObjectOfAbsoluteItem(_In_opt_ HWND hWnd, _In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:263
EXTERN_C HRESULT BindCtx_RegisterObjectParam(_In_ IBindCtx *pBindCtx, _In_ LPOLESTR pszKey, _In_opt_ IUnknown *punk, _Out_ LPBC *ppbc)
Definition: utils.cpp:454
EXTERN_C HRESULT WINAPI CopyStreamUI(_In_ IStream *pSrc, _Out_ IStream *pDst, _Inout_opt_ IProgressDialog *pProgress, _In_opt_ DWORDLONG dwlSize)
Definition: utils.cpp:1009
static BOOL OpenEffectiveToken(_In_ DWORD DesiredAccess, _Out_ HANDLE *phToken)
Definition: utils.cpp:122
EXTERN_C BOOL WINAPI SHFindComputer(LPCITEMIDLIST pidlRoot, LPCITEMIDLIST pidlSavedSearch)
Definition: utils.cpp:821
static HRESULT Int64ToStr(_In_ LONGLONG llValue, _Out_writes_(cchValue) LPWSTR pszValue, _In_ UINT cchValue)
Definition: utils.cpp:847
HRESULT SHELL_MapContextMenuVerbToCmdId(LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap)
Definition: utils.cpp:1460
EXTERN_C LPWSTR WINAPI SheRemoveQuotesW(LPWSTR psz)
Definition: utils.cpp:795
EXTERN_C HRESULT WINAPI SHCreatePropertyBag(_In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:760
EXTERN_C HRESULT InvokeIExecuteCommandWithDataObject(_In_ IExecuteCommand *pEC, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB, _In_ IDataObject *pDO, _In_opt_ LPCMINVOKECOMMANDINFOEX pICI, _In_opt_ IUnknown *pSite)
Definition: utils.cpp:1419
EXTERN_C HWND BindCtx_GetUIWindow(_In_ IBindCtx *pBindCtx)
Definition: utils.cpp:394
HRESULT SHBindToObjectEx(_In_opt_ IShellFolder *pShellFolder, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:220
EXTERN_C HRESULT WINAPI SHSetFolderPathA(_In_ INT csidl, _In_ HANDLE hToken, _In_ DWORD dwFlags, _In_ LPCSTR pszPath)
Definition: utils.cpp:500
HRESULT Shell_TranslateIDListAlias(_In_ LPCITEMIDLIST pidl, _In_ HANDLE hToken, _Out_ LPITEMIDLIST *ppidlAlias, _In_ DWORD dwFlags)
Definition: utils.cpp:144
BOOL IsShutdownAllowed(VOID)
Definition: utils.cpp:699
BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid)
Definition: utils.cpp:174
HRESULT SHELL_GetIDListTarget(_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl)
Definition: utils.cpp:339
BOOL PathIsDotOrDotDotW(_In_ LPCWSTR pszPath)
Definition: utils.cpp:59
EXTERN_C HRESULT WINAPI SHStartNetConnectionDialogA(_In_ HWND hwnd, _In_ LPCSTR pszRemoteName, _In_ DWORD dwType)
Definition: utils.cpp:1191
HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:106
EXTERN_C BOOL WINAPI SHOpenEffectiveToken(_Out_ LPHANDLE phToken)
Definition: utils.cpp:564
static HRESULT DynamicSHGetSpecialFolderPathW(_In_ HWND hwndOwner, _Out_ CStringW &strPath, _In_ INT nCSIDL, _In_ BOOL bCreate)
Definition: utils.cpp:1264
HRESULT SHCoInitializeAnyApartment(VOID)
Definition: utils.cpp:351
BOOL PathIsDosDevice(_In_ LPCWSTR pszName)
Definition: utils.cpp:85
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3257
DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid)
Definition: ordinal.c:6294
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
BOOL WINAPI SHSkipJunction(IBindCtx *pbc, const CLSID *pclsid)
Definition: ordinal.c:4574
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
int WINAPI PathCommonPrefixW(LPCWSTR lpszFile1, LPCWSTR lpszFile2, LPWSTR achPath)
Definition: path.c:2806
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
Definition: path.c:4419
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2673
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2797
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2394
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
#define IShellFolder_ParseDisplayName
Definition: utils.cpp:14
#define IShellFolder_GetDisplayNameOf
Definition: utils.cpp:13
HRESULT WINAPI GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars)
Definition: system.c:894
static const WCHAR szColorName[]
Definition: system.c:40
#define assert(x)
Definition: debug.h:53
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
HINSTANCE hInst
Definition: dxdiag.c:13
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
REFIID riid
Definition: atlbase.h:39
HRESULT InvokeCommand([in] LPCMINVOKECOMMANDINFO lpici)
HRESULT GetUIObjectOf([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsresult QueryInterface(nsIIDRef riid, void **result)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
unsigned long long DWORDLONG
Definition: intsafe.h:93
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1212
#define Stat
Definition: syshdrs.h:78
#define pch(ap)
Definition: match.c:418
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
LPCWSTR szPath
Definition: env.c:37
static HINSTANCE hinst
Definition: edit.c:551
static LPOLESTR
Definition: stg_prop.c:27
#define min(a, b)
Definition: monoChain.cc:55
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
#define _Out_opt_
Definition: no_sal2.h:214
#define _Inout_
Definition: no_sal2.h:162
#define _Outptr_
Definition: no_sal2.h:262
#define _Inout_opt_
Definition: no_sal2.h:216
#define _Out_writes_(s)
Definition: no_sal2.h:176
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define DWORD
Definition: nt_native.h:44
#define LOCALE_USER_DEFAULT
#define UNICODE_NULL
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:325
#define ANSI_NULL
#define L(x)
Definition: ntvdm.h:50
#define STGM_READWRITE
Definition: objbase.h:919
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:280
interface IBindCtx * LPBC
Definition: objfwd.h:18
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CAPTION
Definition: pedump.c:624
long LONG
Definition: pedump.c:60
#define WS_DISABLED
Definition: pedump.c:621
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1462
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID)
Definition: powrprof.c:488
EXTERN_C HRESULT WINAPI SHCreatePropertyBagOnMemory(_In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: propbag.cpp:254
#define REFIID
Definition: guiddef.h:118
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
int zero
Definition: sehframes.cpp:29
HRESULT hr
Definition: shlfolder.c:183
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1520
#define CSIDL_FLAG_DONT_VERIFY
Definition: shlobj.h:2234
#define QITABENT(Cthis, Ifoo)
Definition: shlwapi.h:2122
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
TCHAR * cmdline
Definition: stretchblt.cpp:32
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
WORD CmdId
Definition: utils.h:51
LPCSTR Verb
Definition: utils.h:50
$ULONG PrivilegeCount
Definition: setypes.h:1023
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]
Definition: setypes.h:1024
$ULONG LowPart
Definition: ntbasedef.h:577
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
$ULONG HighPart
Definition: ntbasedef.h:578
Definition: inflate.c:139
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
#define max(a, b)
Definition: svc.c:63
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint16_t * LPWORD
Definition: typedefs.h:56
int64_t LONGLONG
Definition: typedefs.h:68
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
#define FMT_USE_THOUSAND
Definition: undocshell.h:777
#define FMT_USE_GROUPING
Definition: undocshell.h:775
#define FMT_USE_NUMDIGITS
Definition: undocshell.h:773
#define FMT_USE_NEGNUMBER
Definition: undocshell.h:778
#define FMT_USE_LEADZERO
Definition: undocshell.h:774
HRESULT(CALLBACK * PRIVILEGED_FUNCTION)(LPARAM lParam)
Definition: undocshell.h:806
#define FMT_USE_DECIMAL
Definition: undocshell.h:776
DWORD dwAttributes
Definition: vdmdbg.h:34
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2658
static GLenum _GLUfuncptr fn
Definition: wgl_font.c:159
EXTERN_C BOOL WINAPI SHOpenPropSheetW(_In_opt_ LPCWSTR pszCaption, _In_opt_ HKEY *ahKeys, _In_ UINT cKeys, _In_ const CLSID *pclsidDefault, _In_ IDataObject *pDataObject, _In_opt_ IShellBrowser *pShellBrowser, _In_opt_ LPCWSTR pszStartPage)
Definition: propsheet.cpp:169
HWND WINAPI GetShellWindow(VOID)
Definition: desktop.c:651
VOID WINAPI SwitchToThisWindow(HWND hwnd, BOOL fAltTab)
Definition: window.c:82
BOOL WINAPI AllowSetForegroundWindow(DWORD dwProcessId)
Definition: window.c:49
#define ZeroMemory
Definition: winbase.h:1737
_In_opt_ LPSTR _In_opt_ LPSTR _In_ DWORD _In_ DWORD _Out_opt_ PHANDLE phToken
Definition: winbase.h:2740
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ LPCSTR lpFileName
Definition: winbase.h:3096
HANDLE WINAPI GetCurrentThread(void)
Definition: proc.c:1148
#define LPTR
Definition: winbase.h:407
#define LOAD_LIBRARY_AS_DATAFILE
Definition: winbase.h:368
_In_ LPCSTR lpName
Definition: winbase.h:2814
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define INVALID_FILE_SIZE
Definition: winbase.h:574
_In_ DWORD nLength
Definition: wincon.h:473
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
#define WINAPI
Definition: msvc.h:6
#define ERROR_BAD_NETPATH
Definition: winerror.h:145
#define S_FALSE
Definition: winerror.h:2357
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:2345
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
#define ERROR_CANCELLED
Definition: winerror.h:726
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define HRESULT_CODE(hr)
Definition: winerror.h:76
#define ERROR_NO_TOKEN
Definition: winerror.h:587
#define ERROR_BAD_NET_NAME
Definition: winerror.h:159
#define LOCALE_SGROUPING
Definition: winnls.h:46
#define LOCALE_SDECIMAL
Definition: winnls.h:44
#define LOCALE_IDIGITS
Definition: winnls.h:47
#define LOCALE_STHOUSAND
Definition: winnls.h:45
#define LOCALE_INEGNUMBER
Definition: winnls.h:49
#define LOCALE_ILZERO
Definition: winnls.h:48
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:413
#define SW_SHOWNORMAL
Definition: winuser.h:773
#define MK_SHIFT
Definition: winuser.h:2372
#define WS_EX_APPWINDOW
Definition: winuser.h:383
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
HWND WINAPI FindWindowExW(_In_opt_ HWND, _In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
#define MK_CONTROL
Definition: winuser.h:2373
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define CW_USEDEFAULT
Definition: winuser.h:225
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define SW_SHOW
Definition: winuser.h:778
#define RtlEqualLuid(Luid1, Luid2)
Definition: rtlfuncs.h:304
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:930
#define TOKEN_QUERY
Definition: setypes.h:928
@ TokenPrivileges
Definition: setypes.h:968
@ TokenSessionId
Definition: setypes.h:977
struct _TOKEN_PRIVILEGES * PTOKEN_PRIVILEGES
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63
#define IID_PPV_ARG(Itype, ppType)
const char * LPCSTR
Definition: xmlstorage.h:183
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
char CHAR
Definition: xmlstorage.h:175
unsigned char BYTE
Definition: xxhash.c:193