ReactOS 0.4.16-dev-1305-ge26ad0d
utils.cpp File Reference
#include "precomp.h"
#include <lmcons.h>
#include <lmapibuf.h>
#include <lmaccess.h>
#include <lmserver.h>
#include <secext.h>
Include dependency graph for utils.cpp:

Go to the source code of this file.

Classes

class  CDummyOleWindow
 

Macros

#define PATH_VALID_ELEMENT
 
#define COPY_STREAM_DEFAULT_BUFFER_SIZE   0x4000
 
#define COMPUTER_DESCRIPTIONS_KEY    L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComputerDescriptions"
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
static PCSTR StrEndNA (_In_ PCSTR psz, _In_ INT_PTR cch)
 
static PCWSTR StrEndNW (_In_ PCWSTR psz, _In_ INT_PTR cch)
 
EXTERN_C PSTR WINAPI StrRStrA (_In_ PCSTR pszSrc, _In_opt_ PCSTR pszLast, _In_ PCSTR pszSearch)
 
EXTERN_C PWSTR WINAPI StrRStrW (_In_ PCWSTR pszSrc, _In_opt_ PCWSTR pszLast, _In_ PCWSTR pszSearch)
 
HRESULT SHILClone (_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
 
BOOL PathIsDotOrDotDotW (_In_ LPCWSTR pszPath)
 
BOOL PathIsValidElement (_In_ LPCWSTR pszPath)
 
BOOL PathIsDosDevice (_In_ LPCWSTR pszName)
 
HRESULT SHILAppend (_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
 
EXTERN_C HRESULT WINAPI SHShouldShowWizards (_In_ IUnknown *pUnknown)
 
static BOOL OpenEffectiveToken (_In_ DWORD DesiredAccess, _Out_ HANDLE *phToken)
 
HRESULT Shell_TranslateIDListAlias (_In_ LPCITEMIDLIST pidl, _In_ HANDLE hToken, _Out_ LPITEMIDLIST *ppidlAlias, _In_ DWORD dwFlags)
 
BOOL BindCtx_ContainsObject (_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName)
 
DWORD BindCtx_GetMode (_In_ IBindCtx *pbc, _In_ DWORD dwDefault)
 
BOOL SHSkipJunctionBinding (_In_ IBindCtx *pbc, _In_ CLSID *pclsid)
 
HRESULT SHIsFileSysBindCtx (_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData)
 
BOOL Shell_FailForceReturn (_In_ HRESULT hr)
 
HRESULT SHBindToObjectEx (_In_opt_ IShellFolder *pShellFolder, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
 
EXTERN_C HRESULT SHBindToObject (_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
 
EXTERN_C HRESULT SHELL_GetUIObjectOfAbsoluteItem (_In_opt_ HWND hWnd, _In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppvObj)
 
HRESULT SHELL_DisplayNameOf (_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ UINT Flags, _Out_ PWSTR *ppStr)
 
EXTERN_C HRESULT WINAPI DisplayNameOfW (_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
 
DWORD SHGetAttributes (_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
 
HRESULT SHELL_GetIDListTarget (_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl)
 
HRESULT SHCoInitializeAnyApartment (VOID)
 
HRESULT SHGetNameAndFlagsW (_In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_opt_ LPWSTR pszText, _In_ UINT cchBuf, _Inout_opt_ DWORD *pdwAttributes)
 
EXTERN_C HWND BindCtx_GetUIWindow (_In_ IBindCtx *pBindCtx)
 
EXTERN_C HRESULT BindCtx_RegisterObjectParam (_In_ IBindCtx *pBindCtx, _In_ LPOLESTR pszKey, _In_opt_ IUnknown *punk, _Out_ LPBC *ppbc)
 
EXTERN_C HRESULT WINAPI SHSetFolderPathA (_In_ INT csidl, _In_ HANDLE hToken, _In_ DWORD dwFlags, _In_ LPCSTR pszPath)
 
EXTERN_C BOOL WINAPI PathIsSlowA (_In_ LPCSTR pszFile, _In_ DWORD dwAttr)
 
EXTERN_C WORD WINAPI ExtractIconResInfoA (_In_ HANDLE hHandle, _In_ LPCSTR lpFileName, _In_ WORD wIndex, _Out_ LPWORD lpSize, _Out_ LPHANDLE lpIcon)
 
EXTERN_C LPWSTR WINAPI ShortSizeFormatW (_In_ DWORD dwNumber, _Out_writes_(0x8FFF) LPWSTR pszBuffer)
 
EXTERN_C BOOL WINAPI SHOpenEffectiveToken (_Out_ LPHANDLE phToken)
 
EXTERN_C DWORD WINAPI SHGetUserSessionId (_In_opt_ HANDLE hToken)
 
EXTERN_C HRESULT WINAPI SHInvokePrivilegedFunctionW (_In_ LPCWSTR pszName, _In_ PRIVILEGED_FUNCTION fn, _In_opt_ LPARAM lParam)
 
EXTERN_C BOOL WINAPI SHTestTokenPrivilegeW (_In_opt_ HANDLE hToken, _In_ LPCWSTR lpName)
 
BOOL IsShutdownAllowed (VOID)
 
BOOL WINAPI IsSuspendAllowed (VOID)
 
EXTERN_C HINSTANCE WINAPI SHGetShellStyleHInstance (VOID)
 
EXTERN_C HRESULT WINAPI SHCreatePropertyBag (_In_ REFIID riid, _Out_ void **ppvObj)
 
static DWORD SHELL_ReadSingleUnreadMailCount (_In_ HKEY hKey, _Out_opt_ PDWORD pdwCount, _Out_opt_ PFILETIME pFileTime, _Out_writes_opt_(cchShellExecuteCommand) LPWSTR pszShellExecuteCommand, _In_ INT cchShellExecuteCommand)
 
EXTERN_C HRESULT WINAPI SHGetUnreadMailCountW (_In_opt_ HKEY hKeyUser, _In_opt_ PCWSTR pszMailAddress, _Out_opt_ PDWORD pdwCount, _Inout_opt_ PFILETIME pFileTime, _Out_writes_opt_(cchShellExecuteCommand) PWSTR pszShellExecuteCommand, _In_ INT cchShellExecuteCommand)
 
EXTERN_C HRESULT WINAPI SHSetUnreadMailCountW (_In_ PCWSTR pszMailAddress, _In_ DWORD dwCount, _In_ PCWSTR pszShellExecuteCommand)
 
EXTERN_C LPSTR WINAPI SheRemoveQuotesA (LPSTR psz)
 
EXTERN_C LPWSTR WINAPI SheRemoveQuotesW (LPWSTR psz)
 
EXTERN_C HRESULT WINAPI SHEnumerateUnreadMailAccountsW (_In_opt_ HKEY hKeyUser, _In_ DWORD dwIndex, _Out_writes_(cchMailAddress) PWSTR pszMailAddress, _In_ INT cchMailAddress)
 
EXTERN_C BOOL WINAPI SHFindComputer (LPCITEMIDLIST pidlRoot, LPCITEMIDLIST pidlSavedSearch)
 
static HRESULT Int64ToStr (_In_ LONGLONG llValue, _Out_writes_(cchValue) LPWSTR pszValue, _In_ UINT cchValue)
 
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)
 
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)
 
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)
 
EXTERN_C HRESULT WINAPI CopyStreamUI (_In_ IStream *pSrc, _Out_ IStream *pDst, _Inout_opt_ IProgressDialog *pProgress, _In_opt_ DWORDLONG dwlSize)
 
EXTERN_C BOOL WINAPI Activate_RunDLL (_In_ HWND hwnd, _In_ HINSTANCE hinst, _In_ LPCWSTR cmdline, _In_ INT cmdshow)
 
EXTERN_C HRESULT WINAPI SHStartNetConnectionDialogA (_In_ HWND hwnd, _In_ LPCSTR pszRemoteName, _In_ DWORD dwType)
 
static INT DynamicPathCommonPrefixW (_In_ LPCWSTR lpszPath1, _In_ LPCWSTR lpszPath2, _Out_ CStringW &strPath)
 
EXTERN_C HRESULT WINAPI SHGetPathCchFromIDListW (LPCITEMIDLIST pidl, LPWSTR pszPath, SIZE_T cchPathMax)
 
static HRESULT DynamicSHGetPathFromIDListW (_In_ LPCITEMIDLIST pidl, _Out_ CStringW &strPath)
 
static HRESULT DynamicSHGetSpecialFolderPathW (_In_ HWND hwndOwner, _Out_ CStringW &strPath, _In_ INT nCSIDL, _In_ BOOL bCreate)
 
static VOID DynamicPathRemoveBackslashW (_Out_ CStringW &strPath)
 
EXTERN_C BOOL WINAPI PathIsEqualOrSubFolder (_In_ LPCWSTR pszPath1OrCSIDL, _In_ LPCWSTR pszPath2)
 
EXTERN_C HRESULT WINAPI SHGetRealIDL (_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
 
EXTERN_C HRESULT IUnknown_InitializeCommand (_In_ IUnknown *pUnk, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB)
 
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)
 
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)
 
static HRESULT GetCommandStringA (_In_ IContextMenu *pCM, _In_ UINT_PTR Id, _In_ UINT GCS, _Out_writes_(cchMax) LPSTR Buf, _In_ UINT cchMax)
 
UINT GetDfmCmd (_In_ IContextMenu *pCM, _In_ LPCSTR verba)
 
HRESULT SHELL_MapContextMenuVerbToCmdId (LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap)
 
static const CMVERBMAPFindVerbMapEntry (UINT_PTR CmdId, const CMVERBMAP *pMap)
 
HRESULT SHELL_GetCommandStringImpl (SIZE_T CmdId, UINT uFlags, LPSTR Buf, UINT cchBuf, const CMVERBMAP *pMap)
 
HRESULT SHELL_CreateShell32DefaultExtractIcon (int IconIndex, REFIID riid, LPVOID *ppvOut)
 
EXTERN_C BOOL WINAPI SHIsBadInterfacePtr (_In_ LPCVOID pv, _In_ UINT_PTR ucb)
 
EXTERN_C HRESULT WINAPI SHGetUserDisplayName (_Out_writes_to_(*puSize, *puSize) PWSTR pName, _Inout_ PULONG puSize)
 
static PCWSTR SHELL_SkipServerSlashes (_In_ PCWSTR pszPath)
 
static HRESULT SHELL_GetCachedComputerDescription (_Out_writes_z_(cchDescMax) PWSTR pszDesc, _In_ DWORD cchDescMax, _In_ PCWSTR pszServerName)
 
static VOID SHELL_CacheComputerDescription (_In_ PCWSTR pszServerName, _In_ PCWSTR pszDesc)
 
static HRESULT SHELL_GetComputerDescription (_Out_writes_z_(cchDescMax) PWSTR pszDesc, _In_ SIZE_T cchDescMax, _In_ PWSTR pszServerName)
 
static HRESULT SHELL_BuildDisplayMachineName (_Out_writes_z_(cchNameMax) PWSTR pszName, _In_ DWORD cchNameMax, _In_ PCWSTR pszServerName, _In_ PCWSTR pszDescription)
 
EXTERN_C HRESULT WINAPI SHGetComputerDisplayNameW (_In_opt_ PWSTR pszServerName, _In_ DWORD dwFlags, _Out_writes_z_(cchNameMax) PWSTR pszName, _In_ DWORD cchNameMax)
 

Macro Definition Documentation

◆ COMPUTER_DESCRIPTIONS_KEY

#define COMPUTER_DESCRIPTIONS_KEY    L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComputerDescriptions"

Definition at line 1936 of file utils.cpp.

◆ COPY_STREAM_DEFAULT_BUFFER_SIZE

#define COPY_STREAM_DEFAULT_BUFFER_SIZE   0x4000

◆ PATH_VALID_ELEMENT

#define PATH_VALID_ELEMENT
Value:
( \
)
#define PATH_CHAR_CLASS_OTHER_VALID
Definition: path.c:2082
#define PATH_CHAR_CLASS_SPACE
Definition: path.c:2081
#define PATH_CHAR_CLASS_SEMICOLON
Definition: path.c:2079
#define PATH_CHAR_CLASS_COMMA
Definition: path.c:2080
#define PATH_CHAR_CLASS_DOT
Definition: path.c:2076

Definition at line 153 of file utils.cpp.

Function Documentation

◆ Activate_RunDLL()

EXTERN_C BOOL WINAPI Activate_RunDLL ( _In_ HWND  hwnd,
_In_ HINSTANCE  hinst,
_In_ LPCWSTR  cmdline,
_In_ INT  cmdshow 
)

Definition at line 1477 of file utils.cpp.

1482{
1483 DWORD dwProcessID;
1484
1488 UNREFERENCED_PARAMETER(cmdshow);
1489
1490 TRACE("(%p, %p, %s, %d)\n", hwnd, hinst, debugstr_w(cmdline), cmdline);
1491
1493 return AllowSetForegroundWindow(dwProcessID);
1494}
unsigned long DWORD
Definition: ntddk_ex.h:95
#define debugstr_w
Definition: kernel32.h:32
static HINSTANCE hinst
Definition: edit.c:551
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
#define TRACE(s)
Definition: solgame.cpp:4
TCHAR * cmdline
Definition: stretchblt.cpp:32
BOOL WINAPI AllowSetForegroundWindow(DWORD dwProcessId)
Definition: window.c:49
HWND WINAPI GetShellWindow(void)
Definition: input.c:974
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

◆ BindCtx_ContainsObject()

BOOL BindCtx_ContainsObject ( _In_ IBindCtx pBindCtx,
_In_ LPCWSTR  pszName 
)

Definition at line 270 of file utils.cpp.

271{
273 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam(const_cast<LPWSTR>(pszName), &punk)))
274 return FALSE;
275 return TRUE;
276}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define FAILED(hr)
Definition: intsafe.h:51
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CDesktopFolder::_ParseDisplayNameByParent(), CDesktopFolder::ParseDisplayName(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ BindCtx_GetMode()

DWORD BindCtx_GetMode ( _In_ IBindCtx pbc,
_In_ DWORD  dwDefault 
)

Definition at line 278 of file utils.cpp.

279{
280 if (!pbc)
281 return dwDefault;
282
283 BIND_OPTS BindOpts = { sizeof(BindOpts) };
284 HRESULT hr = pbc->GetBindOptions(&BindOpts);
285 if (FAILED(hr))
286 return dwDefault;
287
288 return BindOpts.grfMode;
289}
HRESULT hr
Definition: shlfolder.c:183

Referenced by CDrivesFolder::ParseDisplayName(), CFSFolder::ParseDisplayName(), and CRegFolder::ParseDisplayName().

◆ BindCtx_GetUIWindow()

EXTERN_C HWND BindCtx_GetUIWindow ( _In_ IBindCtx pBindCtx)

Definition at line 537 of file utils.cpp.

538{
539 HWND hWnd = NULL;
540
542 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
543 IUnknown_GetWindow(punk, &hWnd);
544
545 return hWnd;
546}
HWND hWnd
Definition: settings.c:17
#define NULL
Definition: types.h:112
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define L(x)
Definition: ntvdm.h:50

Referenced by SHParseDisplayName().

◆ BindCtx_RegisterObjectParam()

EXTERN_C HRESULT BindCtx_RegisterObjectParam ( _In_ IBindCtx pBindCtx,
_In_ LPOLESTR  pszKey,
_In_opt_ IUnknown punk,
_Out_ LPBC ppbc 
)

Definition at line 597 of file utils.cpp.

602{
603 HRESULT hr = S_OK;
605
606 *ppbc = pBindCtx;
607
608 if (pBindCtx)
609 {
610 pBindCtx->AddRef();
611 }
612 else
613 {
614 hr = CreateBindCtx(0, ppbc);
615 if (FAILED(hr))
616 return hr;
617 }
618
619 if (!punk)
620 punk = pUnknown = new CDummyOleWindow();
621
622 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
623
624 if (pUnknown)
625 pUnknown->Release();
626
627 if (FAILED(hr))
628 {
629 (*ppbc)->Release();
630 *ppbc = NULL;
631 }
632
633 return hr;
634}
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
ULONG Release()
#define S_OK
Definition: intsafe.h:52
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556

Referenced by SHParseDisplayName().

◆ CopyStreamUI()

EXTERN_C HRESULT WINAPI CopyStreamUI ( _In_ IStream pSrc,
_Out_ IStream pDst,
_Inout_opt_ IProgressDialog *  pProgress,
_In_opt_ DWORDLONG  dwlSize 
)

Definition at line 1359 of file utils.cpp.

1364{
1365 HRESULT hr = E_FAIL;
1366 DWORD cbBuff, cbRead, dwSizeToWrite;
1367 DWORDLONG cbDone;
1368 LPVOID pBuff;
1369 CComHeapPtr<BYTE> pHeapPtr;
1370 STATSTG Stat;
1371 BYTE abBuff[1024];
1372
1373 TRACE("(%p, %p, %p, %I64u)\n", pSrc, pDst, pProgress, dwlSize);
1374
1375 if (dwlSize == 0) // Invalid size?
1376 {
1377 // Get the stream size
1378 ZeroMemory(&Stat, sizeof(Stat));
1379 if (FAILED(pSrc->Stat(&Stat, STATFLAG_NONAME)))
1380 pProgress = NULL; // No size info. Disable progress
1381 else
1382 dwlSize = Stat.cbSize.QuadPart;
1383 }
1384
1385 if (!pProgress) // Progress is disabled?
1386 {
1387 ULARGE_INTEGER uliSize;
1388
1389 if (dwlSize > 0)
1390 uliSize.QuadPart = dwlSize;
1391 else
1392 uliSize.HighPart = uliSize.LowPart = INVALID_FILE_SIZE;
1393
1394 return pSrc->CopyTo(pDst, uliSize, NULL, NULL); // One punch
1395 }
1396
1397 // Allocate the buffer if necessary
1398 if (dwlSize > 0 && dwlSize <= sizeof(abBuff))
1399 {
1400 cbBuff = sizeof(abBuff);
1401 pBuff = abBuff;
1402 }
1403 else
1404 {
1405#define COPY_STREAM_DEFAULT_BUFFER_SIZE 0x4000
1407 if (pHeapPtr.AllocateBytes(cbBuff))
1408 {
1409 pBuff = pHeapPtr;
1410 }
1411 else // Low memory?
1412 {
1413 cbBuff = sizeof(abBuff);
1414 pBuff = abBuff;
1415 }
1416#undef COPY_STREAM_DEFAULT_BUFFER_SIZE
1417 }
1418
1419 // Start reading
1421 zero.QuadPart = 0;
1422 pSrc->Seek(zero, 0, NULL);
1423 pDst->Seek(zero, 0, NULL);
1424 cbDone = 0;
1425 pProgress->SetProgress64(cbDone, dwlSize);
1426
1427 // Repeat reading and writing until goal
1428 for (;;)
1429 {
1430 hr = pSrc->Read(pBuff, cbBuff, &cbRead);
1431 if (FAILED(hr))
1432 break;
1433
1434 // Calculate the size to write
1435 if (dwlSize > 0)
1436 dwSizeToWrite = (DWORD)min((DWORDLONG)(dwlSize - cbDone), (DWORDLONG)cbRead);
1437 else
1438 dwSizeToWrite = cbRead;
1439
1440 if (dwSizeToWrite == 0) // No need to write?
1441 {
1442 hr = S_OK;
1443 break;
1444 }
1445
1446 hr = pDst->Write(pBuff, dwSizeToWrite, NULL);
1447 if (hr != S_OK)
1448 break;
1449
1450 cbDone += dwSizeToWrite;
1451
1452 if (pProgress->HasUserCancelled()) // Cancelled?
1453 {
1455 break;
1456 }
1457 pProgress->SetProgress64(cbDone, dwlSize);
1458
1459 if (dwlSize > 0 && cbDone >= dwlSize) // Reached the goal?
1460 {
1461 hr = S_OK;
1462 break;
1463 }
1464 }
1465
1466 return hr;
1467}
bool AllocateBytes(_In_ size_t nBytes)
Definition: atlalloc.h:127
#define E_FAIL
Definition: ddrawi.h:102
#define COPY_STREAM_DEFAULT_BUFFER_SIZE
unsigned long long DWORDLONG
Definition: intsafe.h:93
#define Stat
Definition: syshdrs.h:78
#define min(a, b)
Definition: monoChain.cc:55
#define DWORD
Definition: nt_native.h:44
int zero
Definition: sehframes.cpp:29
$ULONG LowPart
Definition: ntbasedef.h:581
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
$ULONG HighPart
Definition: ntbasedef.h:582
#define ZeroMemory
Definition: winbase.h:1753
#define INVALID_FILE_SIZE
Definition: winbase.h:584
#define ERROR_CANCELLED
Definition: winerror.h:726
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
unsigned char BYTE
Definition: xxhash.c:193

◆ DisplayNameOfW()

EXTERN_C HRESULT WINAPI DisplayNameOfW ( _In_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_ DWORD  dwFlags,
_Out_ LPWSTR  pszBuf,
_In_ UINT  cchBuf 
)

Definition at line 432 of file utils.cpp.

438{
439 *pszBuf = UNICODE_NULL;
440 STRRET sr;
441 HRESULT hr = psf->GetDisplayNameOf(pidl, dwFlags, &sr);
442 if (FAILED(hr))
443 return hr;
444 return StrRetToBufW(&sr, pidl, pszBuf, cchBuf);
445}
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
#define UNICODE_NULL
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

Referenced by CFSDropTarget::_DoDrop(), CDefView::OnNotify(), and SHGetNameAndFlagsW().

◆ DynamicPathCommonPrefixW()

static INT DynamicPathCommonPrefixW ( _In_ LPCWSTR  lpszPath1,
_In_ LPCWSTR  lpszPath2,
_Out_ CStringW strPath 
)
static

Definition at line 1527 of file utils.cpp.

1531{
1532 SIZE_T cchPath1 = wcslen(lpszPath1);
1533 SIZE_T cchPath2 = wcslen(lpszPath2);
1534 LPWSTR lpszPath = strPath.GetBuffer((INT)max(cchPath1, cchPath2) + 16);
1535 INT ret = PathCommonPrefixW(lpszPath1, lpszPath2, lpszPath);
1536 strPath.ReleaseBuffer();
1537 return ret;
1538}
int WINAPI PathCommonPrefixW(const WCHAR *file1, const WCHAR *file2, WCHAR *path)
Definition: path.c:1563
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define max(a, b)
Definition: svc.c:63
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
int ret

Referenced by PathIsEqualOrSubFolder().

◆ DynamicPathRemoveBackslashW()

static VOID DynamicPathRemoveBackslashW ( _Out_ CStringW strPath)
static

Definition at line 1599 of file utils.cpp.

1601{
1602 INT nLength = strPath.GetLength();
1603 if (nLength > 0 && strPath[nLength - 1] == L'\\')
1604 strPath = strPath.Left(nLength - 1);
1605}
WINBASEAPI _In_ DWORD nLength
Definition: wincon.h:682

Referenced by PathIsEqualOrSubFolder().

◆ DynamicSHGetPathFromIDListW()

static HRESULT DynamicSHGetPathFromIDListW ( _In_ LPCITEMIDLIST  pidl,
_Out_ CStringW strPath 
)
static

Definition at line 1544 of file utils.cpp.

1547{
1548 HRESULT hr;
1549
1550 for (UINT cchPath = MAX_PATH;; cchPath *= 2)
1551 {
1552 LPWSTR lpszPath = strPath.GetBuffer(cchPath);
1553 if (!lpszPath)
1554 return E_OUTOFMEMORY;
1555
1556 hr = SHGetPathCchFromIDListW(pidl, lpszPath, cchPath);
1557 strPath.ReleaseBuffer();
1558
1560 break;
1561
1562 if (cchPath >= MAXUINT / 2)
1563 {
1564 hr = E_FAIL;
1565 break;
1566 }
1567 }
1568
1569 if (FAILED(hr))
1570 strPath.Empty();
1571
1572 return hr;
1573}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define MAX_PATH
Definition: compat.h:34
EXTERN_C HRESULT WINAPI SHGetPathCchFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath, SIZE_T cchPathMax)
unsigned int UINT
Definition: ndis.h:50
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:2345

Referenced by DynamicSHGetSpecialFolderPathW().

◆ DynamicSHGetSpecialFolderPathW()

static HRESULT DynamicSHGetSpecialFolderPathW ( _In_ HWND  hwndOwner,
_Out_ CStringW strPath,
_In_ INT  nCSIDL,
_In_ BOOL  bCreate 
)
static

Definition at line 1576 of file utils.cpp.

1581{
1582 LPITEMIDLIST pidl;
1583 HRESULT hr = SHGetSpecialFolderLocation(hwndOwner, nCSIDL, &pidl);
1584 if (SUCCEEDED(hr))
1585 {
1586 hr = DynamicSHGetPathFromIDListW(pidl, strPath);
1587 CoTaskMemFree(pidl);
1588 }
1589
1590 if (FAILED(hr))
1591 strPath.Empty();
1592 else if (bCreate)
1593 CreateDirectoryW(strPath, NULL);
1594
1595 return hr;
1596}
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
static HRESULT DynamicSHGetPathFromIDListW(_In_ LPCITEMIDLIST pidl, _Out_ CStringW &strPath)
Definition: utils.cpp:1544
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3384
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1528
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by PathIsEqualOrSubFolder().

◆ ExtractIconResInfoA()

EXTERN_C WORD WINAPI ExtractIconResInfoA ( _In_ HANDLE  hHandle,
_In_ LPCSTR  lpFileName,
_In_ WORD  wIndex,
_Out_ LPWORD  lpSize,
_Out_ LPHANDLE  lpIcon 
)

Definition at line 675 of file utils.cpp.

681{
682 TRACE("(%p, %s, %u, %p, %p)\n", hHandle, debugstr_a(lpFileName), wIndex, lpSize, lpIcon);
683
684 if (!lpFileName)
685 return 0;
686
687 CStringW strFileNameW(lpFileName);
688 return ExtractIconResInfoW(hHandle, strFileNameW, wIndex, lpSize, lpIcon);
689}
EXTERN_C WORD WINAPI ExtractIconResInfoW(_In_ HANDLE hHandle, _In_ LPCWSTR lpFileName, _In_ WORD wIndex, _Out_ LPWORD lpSize, _Out_ LPHANDLE lpIcon)
Definition: stubs.cpp:652
#define debugstr_a
Definition: kernel32.h:31
_In_ LPCSTR lpFileName
Definition: winbase.h:3112

◆ FindVerbMapEntry()

static const CMVERBMAP * FindVerbMapEntry ( UINT_PTR  CmdId,
const CMVERBMAP pMap 
)
static

Definition at line 1795 of file utils.cpp.

1796{
1797 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1798 {
1799 if (pMap[i].CmdId == CmdId)
1800 return &pMap[i];
1801 }
1802 return NULL;
1803}
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
LPCSTR Verb
Definition: utils.h:88

Referenced by SHELL_GetCommandStringImpl().

◆ GetCommandStringA()

static HRESULT GetCommandStringA ( _In_ IContextMenu pCM,
_In_ UINT_PTR  Id,
_In_ UINT  GCS,
_Out_writes_(cchMax) LPSTR  Buf,
_In_ UINT  cchMax 
)
static

Definition at line 1745 of file utils.cpp.

1746{
1747 HRESULT hr = pCM->GetCommandString(Id, GCS & ~GCS_UNICODE, NULL, Buf, cchMax);
1748 if (FAILED(hr))
1749 {
1751 hr = pCM->GetCommandString(Id, GCS | GCS_UNICODE, NULL, (LPSTR)buf, _countof(buf));
1752 if (SUCCEEDED(hr))
1753 hr = SHUnicodeToAnsi(buf, Buf, cchMax) > 0 ? S_OK : E_FAIL;
1754 }
1755 return hr;
1756}
DWORD Id
UINT cchMax
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2797
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define _countof(array)
Definition: sndvol32.h:70
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by GetDfmCmd().

◆ GetDfmCmd()

UINT GetDfmCmd ( _In_ IContextMenu pCM,
_In_ LPCSTR  verba 
)

Definition at line 1759 of file utils.cpp.

1760{
1761 CHAR buf[MAX_PATH];
1762 if (IS_INTRESOURCE(verba))
1763 {
1764 if (FAILED(GetCommandStringA(pCM, LOWORD(verba), GCS_VERB, buf, _countof(buf))))
1765 return 0;
1766 verba = buf;
1767 }
1768 return MapVerbToDfmCmd(verba); // Returns DFM_CMD_* or 0
1769}
UINT MapVerbToDfmCmd(_In_ LPCSTR verba)
#define IS_INTRESOURCE(x)
Definition: loader.c:613
static HRESULT GetCommandStringA(_In_ IContextMenu *pCM, _In_ UINT_PTR Id, _In_ UINT GCS, _Out_writes_(cchMax) LPSTR Buf, _In_ UINT cchMax)
Definition: utils.cpp:1745
#define LOWORD(l)
Definition: pedump.c:82
char CHAR
Definition: xmlstorage.h:175

Referenced by BrFolder_OnContextMenu().

◆ Int64GetNumFormat()

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 
)
static

Definition at line 1242 of file utils.cpp.

1250{
1251 WCHAR szBuff[20];
1252
1253 if (pSrc)
1254 *pDest = *pSrc;
1255 else
1256 dwNumberFlags = 0;
1257
1258 if (!(dwNumberFlags & FMT_USE_NUMDIGITS))
1259 {
1261 pDest->NumDigits = StrToIntW(szBuff);
1262 }
1263
1264 if (!(dwNumberFlags & FMT_USE_LEADZERO))
1265 {
1267 pDest->LeadingZero = StrToIntW(szBuff);
1268 }
1269
1270 if (!(dwNumberFlags & FMT_USE_GROUPING))
1271 {
1273 pDest->Grouping = StrToIntW(szBuff);
1274 }
1275
1276 if (!(dwNumberFlags & FMT_USE_DECIMAL))
1277 {
1278 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, pszDecimal, cchDecimal);
1279 pDest->lpDecimalSep = pszDecimal;
1280 }
1281
1282 if (!(dwNumberFlags & FMT_USE_THOUSAND))
1283 {
1284 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, pszThousand, cchThousand);
1285 pDest->lpThousandSep = pszThousand;
1286 }
1287
1288 if (!(dwNumberFlags & FMT_USE_NEGNUMBER))
1289 {
1291 pDest->NegativeOrder = StrToIntW(szBuff);
1292 }
1293}
INT WINAPI StrToIntW(LPCWSTR lpString)
Definition: string.c:407
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1666
#define LOCALE_USER_DEFAULT
#define FMT_USE_THOUSAND
Definition: undocshell.h:852
#define FMT_USE_GROUPING
Definition: undocshell.h:850
#define FMT_USE_NUMDIGITS
Definition: undocshell.h:848
#define FMT_USE_NEGNUMBER
Definition: undocshell.h:853
#define FMT_USE_LEADZERO
Definition: undocshell.h:849
#define FMT_USE_DECIMAL
Definition: undocshell.h:851
#define LOCALE_SGROUPING
Definition: winnls.h:51
#define LOCALE_SDECIMAL
Definition: winnls.h:49
#define LOCALE_IDIGITS
Definition: winnls.h:52
#define LOCALE_STHOUSAND
Definition: winnls.h:50
#define LOCALE_INEGNUMBER
Definition: winnls.h:54
#define LOCALE_ILZERO
Definition: winnls.h:53

Referenced by Int64ToString().

◆ Int64ToStr()

static HRESULT Int64ToStr ( _In_ LONGLONG  llValue,
_Out_writes_(cchValue) LPWSTR  pszValue,
_In_ UINT  cchValue 
)
static

Definition at line 1197 of file utils.cpp.

1201{
1202 WCHAR szBuff[40];
1203 UINT ich = 0, ichValue;
1204#if (WINVER >= _WIN32_WINNT_VISTA)
1205 BOOL bMinus = (llValue < 0);
1206
1207 if (bMinus)
1208 llValue = -llValue;
1209#endif
1210
1211 if (cchValue <= 0)
1212 return E_FAIL;
1213
1214 do
1215 {
1216 szBuff[ich++] = (WCHAR)(L'0' + (llValue % 10));
1217 llValue /= 10;
1218 } while (llValue != 0 && ich < _countof(szBuff) - 1);
1219
1220#if (WINVER >= _WIN32_WINNT_VISTA)
1221 if (bMinus && ich < _countof(szBuff))
1222 szBuff[ich++] = '-';
1223#endif
1224
1225 for (ichValue = 0; ich > 0 && ichValue < cchValue; ++ichValue)
1226 {
1227 --ich;
1228 pszValue[ichValue] = szBuff[ich];
1229 }
1230
1231 if (ichValue >= cchValue)
1232 {
1233 pszValue[cchValue - 1] = UNICODE_NULL;
1234 return E_FAIL;
1235 }
1236
1237 pszValue[ichValue] = UNICODE_NULL;
1238 return S_OK;
1239}
unsigned int BOOL
Definition: ntddk_ex.h:94

Referenced by Int64ToString().

◆ Int64ToString()

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 at line 1302 of file utils.cpp.

1309{
1310 INT ret;
1311 NUMBERFMTW NumFormat;
1312 WCHAR szValue[80], szDecimalSep[6], szThousandSep[6];
1313
1314 Int64ToStr(llValue, szValue, _countof(szValue));
1315
1316 if (bUseFormat)
1317 {
1318 Int64GetNumFormat(&NumFormat, pNumberFormat, dwNumberFlags,
1319 szDecimalSep, _countof(szDecimalSep),
1320 szThousandSep, _countof(szThousandSep));
1321 ret = GetNumberFormatW(LOCALE_USER_DEFAULT, 0, szValue, &NumFormat, pszOut, cchOut);
1322 if (ret)
1323 --ret;
1324 return ret;
1325 }
1326
1327 if (FAILED(StringCchCopyW(pszOut, cchOut, szValue)))
1328 return 0;
1329
1330 return lstrlenW(pszOut);
1331}
#define lstrlenW
Definition: compat.h:750
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:1242
static HRESULT Int64ToStr(_In_ LONGLONG llValue, _Out_writes_(cchValue) LPWSTR pszValue, _In_ UINT cchValue)
Definition: utils.cpp:1197
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1208
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149

Referenced by DoTestEntry(), LargeIntegerToString(), and Test_Int64ToString().

◆ InvokeIExecuteCommand()

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 at line 1690 of file utils.cpp.

1697{
1698 if (!pEC)
1699 return E_INVALIDARG;
1700
1701 if (pSite)
1702 IUnknown_SetSite(pEC, pSite);
1703 IUnknown_InitializeCommand(pEC, pszCommandName, pPB);
1704
1706 if (pSIA && SUCCEEDED(pEC->QueryInterface(IID_PPV_ARG(IObjectWithSelection, &pOWS))))
1707 pOWS->SetSelection(pSIA);
1708
1709 DWORD dwKeyState = 0, fMask = pICI ? pICI->fMask : 0;
1710 pEC->SetNoShowUI((fMask & CMIC_MASK_FLAG_NO_UI) != 0);
1711 pEC->SetShowWindow(pICI ? pICI->nShow : SW_SHOW);
1712 if (fMask & CMIC_MASK_SHIFT_DOWN)
1713 dwKeyState |= MK_SHIFT;
1714 if (fMask & CMIC_MASK_CONTROL_DOWN)
1715 dwKeyState |= MK_CONTROL;
1716 pEC->SetKeyState(dwKeyState);
1717 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpDirectoryW)
1718 pEC->SetDirectory(pICI->lpDirectoryW);
1719 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpParametersW)
1720 pEC->SetParameters(pICI->lpParametersW);
1721 if (fMask & CMIC_MASK_PTINVOKE)
1722 pEC->SetPosition(pICI->ptInvoke);
1723
1724 HRESULT hr = pEC->Execute();
1725 if (pSite)
1726 IUnknown_SetSite(pEC, NULL);
1727 return hr;
1728}
#define E_INVALIDARG
Definition: ddrawi.h:101
EXTERN_C HRESULT IUnknown_InitializeCommand(_In_ IUnknown *pUnk, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB)
Definition: utils.cpp:1677
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
#define MK_SHIFT
Definition: winuser.h:2388
#define MK_CONTROL
Definition: winuser.h:2389
#define SW_SHOW
Definition: winuser.h:786
#define IID_PPV_ARG(Itype, ppType)

Referenced by InvokeIExecuteCommandWithDataObject().

◆ InvokeIExecuteCommandWithDataObject()

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 at line 1731 of file utils.cpp.

1738{
1740 HRESULT hr = SHCreateShellItemArrayFromDataObject(pDO, IID_PPV_ARG(IShellItemArray, &pSIA));
1741 return SUCCEEDED(hr) ? InvokeIExecuteCommand(pEC, pszCommandName, pPB, pSIA, pICI, pSite) : hr;
1742}
EXTERN_C HRESULT WINAPI SHCreateShellItemArrayFromDataObject(_In_ IDataObject *pdo, _In_ REFIID riid, _Out_ void **ppv)
Definition: CShellItem.cpp:429
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:1690

Referenced by CDefaultContextMenu::InvokeRegVerb().

◆ IsShutdownAllowed()

BOOL IsShutdownAllowed ( VOID  )

Definition at line 842 of file utils.cpp.

843{
845}
EXTERN_C BOOL WINAPI SHTestTokenPrivilegeW(_In_opt_ HANDLE hToken, _In_ LPCWSTR lpName)
Definition: utils.cpp:786
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:413

Referenced by IsSuspendAllowed().

◆ IsSuspendAllowed()

BOOL WINAPI IsSuspendAllowed ( VOID  )

Definition at line 850 of file utils.cpp.

851{
852 TRACE("()\n");
854}
BOOL IsShutdownAllowed(VOID)
Definition: utils.cpp:842
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID)
Definition: powrprof.c:488

◆ IUnknown_InitializeCommand()

EXTERN_C HRESULT IUnknown_InitializeCommand ( _In_ IUnknown pUnk,
_In_ PCWSTR  pszCommandName,
_In_opt_ IPropertyBag pPB 
)

Definition at line 1677 of file utils.cpp.

1681{
1682 HRESULT hr;
1684 if (SUCCEEDED(hr = pUnk->QueryInterface(IID_PPV_ARG(IInitializeCommand, &pIC))))
1685 hr = pIC->Initialize(pszCommandName, pPB);
1686 return hr;
1687}
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
nsresult QueryInterface(nsIIDRef riid, void **result)

Referenced by InvokeIExecuteCommand(), and CDefaultContextMenu::InvokeRegVerb().

◆ LargeIntegerToString()

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 at line 1340 of file utils.cpp.

1347{
1348 return Int64ToString(pLargeInt->QuadPart, pszOut, cchOut, bUseFormat,
1349 pNumberFormat, dwNumberFlags);
1350}
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:1302

Referenced by DoTestEntry(), and Test_LargeIntegerToString().

◆ OpenEffectiveToken()

static BOOL OpenEffectiveToken ( _In_ DWORD  DesiredAccess,
_Out_ HANDLE phToken 
)
static

Definition at line 239 of file utils.cpp.

242{
243 BOOL ret;
244
245 if (phToken == NULL)
246 {
248 return FALSE;
249 }
250
251 *phToken = NULL;
252
254 if (!ret && GetLastError() == ERROR_NO_TOKEN)
256
257 return ret;
258}
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
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define GetCurrentProcess()
Definition: compat.h:759
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2658
_In_opt_ LPSTR _In_opt_ LPSTR _In_ DWORD _In_ DWORD _Out_opt_ PHANDLE phToken
Definition: winbase.h:2756
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
HANDLE WINAPI GetCurrentThread(void)
Definition: proc.c:1148
#define ERROR_NO_TOKEN
Definition: winerror.h:587

Referenced by SHOpenEffectiveToken().

◆ PathIsDosDevice()

BOOL PathIsDosDevice ( _In_ LPCWSTR  pszName)

Definition at line 172 of file utils.cpp.

173{
177
178 if (lstrcmpiW(szPath, L"NUL") == 0 || lstrcmpiW(szPath, L"PRN") == 0 ||
179 lstrcmpiW(szPath, L"CON") == 0 || lstrcmpiW(szPath, L"AUX") == 0)
180 {
181 return TRUE;
182 }
183
184 if (_wcsnicmp(szPath, L"LPT", 3) == 0 || _wcsnicmp(szPath, L"COM", 3) == 0)
185 {
186 if ((L'0' <= szPath[3] && szPath[3] <= L'9') && szPath[4] == UNICODE_NULL)
187 return TRUE;
188 }
189
190 return FALSE;
191}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
void WINAPI PathRemoveExtensionW(WCHAR *path)
Definition: path.c:1889
LPCWSTR szPath
Definition: env.c:37
_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)

Referenced by CFSFolder::_CreateIDListFromName().

◆ PathIsDotOrDotDotW()

BOOL PathIsDotOrDotDotW ( _In_ LPCWSTR  pszPath)

Definition at line 146 of file utils.cpp.

147{
148 if (pszPath[0] != L'.')
149 return FALSE;
150 return !pszPath[1] || (pszPath[1] == L'.' && !pszPath[2]);
151}

Referenced by PathIsValidElement(), and CFileDefExt::WalkDirTree().

◆ PathIsEqualOrSubFolder()

EXTERN_C BOOL WINAPI PathIsEqualOrSubFolder ( _In_ LPCWSTR  pszPath1OrCSIDL,
_In_ LPCWSTR  pszPath2 
)

Definition at line 1612 of file utils.cpp.

1615{
1616 CStringW strCommon, strPath1;
1617
1618 TRACE("(%s %s)\n", debugstr_w(pszPath1OrCSIDL), debugstr_w(pszPath2));
1619
1620 if (IS_INTRESOURCE(pszPath1OrCSIDL))
1621 {
1623 NULL, strPath1, LOWORD(pszPath1OrCSIDL) | CSIDL_FLAG_DONT_VERIFY, FALSE);
1624 }
1625 else
1626 {
1627 strPath1 = pszPath1OrCSIDL;
1628 }
1629
1631
1632 if (!DynamicPathCommonPrefixW(strPath1, pszPath2, strCommon))
1633 return FALSE;
1634
1635 return strPath1.CompareNoCase(strCommon) == 0;
1636}
int CompareNoCase(_In_z_ PCXSTR psz) const
Definition: cstringt.h:743
static VOID DynamicPathRemoveBackslashW(_Out_ CStringW &strPath)
Definition: utils.cpp:1599
static INT DynamicPathCommonPrefixW(_In_ LPCWSTR lpszPath1, _In_ LPCWSTR lpszPath2, _Out_ CStringW &strPath)
Definition: utils.cpp:1527
static HRESULT DynamicSHGetSpecialFolderPathW(_In_ HWND hwndOwner, _Out_ CStringW &strPath, _In_ INT nCSIDL, _In_ BOOL bCreate)
Definition: utils.cpp:1576
#define CSIDL_FLAG_DONT_VERIFY
Definition: shlobj.h:2242

Referenced by PathIsTemporaryW(), and START_TEST().

◆ PathIsSlowA()

EXTERN_C BOOL WINAPI PathIsSlowA ( _In_ LPCSTR  pszFile,
_In_ DWORD  dwAttr 
)

Definition at line 661 of file utils.cpp.

664{
665 TRACE("(%s, 0x%X)\n", debugstr_a(pszFile), dwAttr);
666 CStringW strFileW(pszFile);
667 return PathIsSlowW(strFileW, dwAttr);
668}
EXTERN_C BOOL WINAPI PathIsSlowW(_In_ LPCWSTR pszFile, _In_ DWORD dwAttr)
Definition: stubs.cpp:764

◆ PathIsValidElement()

BOOL PathIsValidElement ( _In_ LPCWSTR  pszPath)

Definition at line 158 of file utils.cpp.

159{
160 if (!*pszPath || PathIsDotOrDotDotW(pszPath))
161 return FALSE;
162
163 for (LPCWSTR pch = pszPath; *pch; ++pch)
164 {
166 return FALSE;
167 }
168
169 return TRUE;
170}
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
Definition: path.c:2164
#define PATH_VALID_ELEMENT
Definition: utils.cpp:153
BOOL PathIsDotOrDotDotW(_In_ LPCWSTR pszPath)
Definition: utils.cpp:146
#define pch(ap)
Definition: match.c:418
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by Shell_NextElement().

◆ SHBindToObject()

EXTERN_C HRESULT SHBindToObject ( _In_opt_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_ REFIID  riid,
_Out_ void **  ppvObj 
)

Definition at line 370 of file utils.cpp.

375{
376 return SHBindToObjectEx(psf, pidl, NULL, riid, ppvObj);
377}
HRESULT SHBindToObjectEx(_In_opt_ IShellFolder *pShellFolder, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:337
REFIID riid
Definition: atlbase.h:39

Referenced by _BindToObject(), CDesktopFolder::_ParseDisplayNameByParent(), BrFolder_InitTreeView(), CRegItemContextMenu_CreateInstance(), FileOpCallback(), SHELL_GetIDListTarget(), Shell_ParsePrinterName(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ SHBindToObjectEx()

HRESULT SHBindToObjectEx ( _In_opt_ IShellFolder pShellFolder,
_In_ LPCITEMIDLIST  pidl,
_In_opt_ IBindCtx pBindCtx,
_In_ REFIID  riid,
_Out_ void **  ppvObj 
)

Definition at line 337 of file utils.cpp.

343{
344 CComPtr<IShellFolder> psfDesktop;
345
346 *ppvObj = NULL;
347
348 if (!pShellFolder)
349 {
350 SHGetDesktopFolder(&psfDesktop);
351 if (!psfDesktop)
352 return E_FAIL;
353
354 pShellFolder = psfDesktop;
355 }
356
357 HRESULT hr;
358 if (_ILIsDesktop(pidl))
359 hr = pShellFolder->QueryInterface(riid, ppvObj);
360 else
361 hr = pShellFolder->BindToObject(pidl, pBindCtx, riid, ppvObj);
362
363 if (SUCCEEDED(hr) && !*ppvObj)
364 hr = E_FAIL;
365
366 return hr;
367}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

Referenced by SHBindToObject().

◆ SHCoInitializeAnyApartment()

HRESULT SHCoInitializeAnyApartment ( VOID  )

Definition at line 494 of file utils.cpp.

495{
497 if (FAILED(hr))
499 return hr;
500}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:280

Referenced by ShellExecuteExW(), and SHGetNameAndFlagsW().

◆ SHCreatePropertyBag()

EXTERN_C HRESULT WINAPI SHCreatePropertyBag ( _In_ REFIID  riid,
_Out_ void **  ppvObj 
)

Definition at line 903 of file utils.cpp.

904{
906}
#define STGM_READWRITE
Definition: objbase.h:919
EXTERN_C HRESULT WINAPI SHCreatePropertyBagOnMemory(_In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: propbag.cpp:254

◆ SHELL_BuildDisplayMachineName()

static HRESULT SHELL_BuildDisplayMachineName ( _Out_writes_z_(cchNameMax) PWSTR  pszName,
_In_ DWORD  cchNameMax,
_In_ PCWSTR  pszServerName,
_In_ PCWSTR  pszDescription 
)
static

Definition at line 1991 of file utils.cpp.

1996{
1997 if (!pszDescription || !*pszDescription)
1998 return E_FAIL;
1999
2000 PCWSTR pszFormat = (SHRestricted(REST_ALLOWCOMMENTTOGGLE) ? L"%2 (%1)" : L"%1 (%2)");
2001 PCWSTR args[] = { pszDescription , SHELL_SkipServerSlashes(pszServerName) };
2003 pszFormat, 0, 0, pszName, cchNameMax, (va_list *)args) ? S_OK : E_FAIL);
2004}
char * va_list
Definition: acmsvcex.h:78
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
static PCWSTR SHELL_SkipServerSlashes(_In_ PCWSTR pszPath)
Definition: utils.cpp:1926
@ REST_ALLOWCOMMENTTOGGLE
Definition: shlobj.h:1879
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
Definition: match.c:390
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:454
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:457

Referenced by SHGetComputerDisplayNameW().

◆ SHELL_CacheComputerDescription()

static VOID SHELL_CacheComputerDescription ( _In_ PCWSTR  pszServerName,
_In_ PCWSTR  pszDesc 
)
static

Definition at line 1954 of file utils.cpp.

1957{
1958 if (!pszDesc)
1959 return;
1960
1961 SIZE_T cbDesc = (wcslen(pszDesc) + 1) * sizeof(WCHAR);
1963 SHELL_SkipServerSlashes(pszServerName), REG_SZ, pszDesc, (DWORD)cbDesc);
1964}
#define COMPUTER_DESCRIPTIONS_KEY
Definition: utils.cpp:1936
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
Definition: reg.c:1306
#define REG_SZ
Definition: layer.c:22
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by SHGetComputerDisplayNameW().

◆ SHELL_CreateShell32DefaultExtractIcon()

HRESULT SHELL_CreateShell32DefaultExtractIcon ( int  IconIndex,
REFIID  riid,
LPVOID ppvOut 
)

Definition at line 1829 of file utils.cpp.

1830{
1834 return hr;
1835 initIcon->SetNormalIcon(swShell32Name, IconIndex);
1836 return initIcon->QueryInterface(riid, ppvOut);
1837}
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
static const WCHAR IconIndex[]
Definition: install.c:52
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22

Referenced by SHELL_CreateFallbackExtractIconForFolder(), and SHELL_CreateFallbackExtractIconForNoAssocFile().

◆ SHELL_DisplayNameOf()

HRESULT SHELL_DisplayNameOf ( _In_opt_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_opt_ UINT  Flags,
_Out_ PWSTR ppStr 
)

Definition at line 406 of file utils.cpp.

411{
412 HRESULT hr;
413 CComPtr<IShellFolder> psfRoot;
414 if (!psf)
415 {
416 PCUITEMID_CHILD pidlChild;
417 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfRoot), &pidlChild);
418 if (FAILED(hr))
419 return hr;
420 psf = psfRoot;
421 pidl = pidlChild;
422 }
423 STRRET sr;
424 hr = psf->GetDisplayNameOf((PCUITEMID_CHILD)pidl, Flags, &sr);
425 return SUCCEEDED(hr) ? StrRetToStrW(&sr, pidl, ppStr) : hr;
426}
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1631
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1498
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by CFileDefExt::InitMultifilePageThread().

◆ Shell_FailForceReturn()

BOOL Shell_FailForceReturn ( _In_ HRESULT  hr)

Definition at line 320 of file utils.cpp.

321{
323
324 switch (code)
325 {
328 case ERROR_CANCELLED:
329 return TRUE;
330
331 default:
333 }
334}
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
Definition: inflate.c:139
#define ERROR_BAD_NETPATH
Definition: winerror.h:145
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
#define HRESULT_CODE(hr)
Definition: winerror.h:76
#define ERROR_BAD_NET_NAME
Definition: winerror.h:159

Referenced by CDesktopFolder::ParseDisplayName(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ SHELL_GetCachedComputerDescription()

static HRESULT SHELL_GetCachedComputerDescription ( _Out_writes_z_(cchDescMax) PWSTR  pszDesc,
_In_ DWORD  cchDescMax,
_In_ PCWSTR  pszServerName 
)
static

Definition at line 1941 of file utils.cpp.

1945{
1946 cchDescMax *= sizeof(WCHAR);
1948 SHELL_SkipServerSlashes(pszServerName), NULL, pszDesc, &cchDescMax);
1949 return HRESULT_FROM_WIN32(error);
1950}
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
#define error(str)
Definition: mkdosfs.c:1605

Referenced by SHGetComputerDisplayNameW().

◆ SHELL_GetCommandStringImpl()

HRESULT SHELL_GetCommandStringImpl ( SIZE_T  CmdId,
UINT  uFlags,
LPSTR  Buf,
UINT  cchBuf,
const CMVERBMAP pMap 
)

Definition at line 1806 of file utils.cpp.

1807{
1808 const CMVERBMAP* pEntry;
1809 switch (uFlags | GCS_UNICODE)
1810 {
1811 case GCS_VALIDATEW:
1812 case GCS_VERBW:
1813 pEntry = FindVerbMapEntry(CmdId, pMap);
1814 if ((uFlags | GCS_UNICODE) == GCS_VERBW)
1815 {
1816 if (!pEntry)
1817 return E_INVALIDARG;
1818 else if (uFlags & GCS_UNICODE)
1819 return SHAnsiToUnicode(pEntry->Verb, (LPWSTR)Buf, cchBuf) ? S_OK : E_FAIL;
1820 else
1821 return StringCchCopyA(Buf, cchBuf, pEntry->Verb);
1822 }
1823 return pEntry ? S_OK : S_FALSE; // GCS_VALIDATE
1824 }
1825 return E_NOTIMPL;
1826}
#define E_NOTIMPL
Definition: ddrawi.h:99
UINT uFlags
Definition: api.c:59
static const CMVERBMAP * FindVerbMapEntry(UINT_PTR CmdId, const CMVERBMAP *pMap)
Definition: utils.cpp:1795
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2673
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
#define S_FALSE
Definition: winerror.h:2357

Referenced by CCopyAsPathMenu::GetCommandString(), COpenWithMenu::GetCommandString(), CRecycleBinItemContextMenu::GetCommandString(), and CRecycleBin::GetCommandString().

◆ SHELL_GetComputerDescription()

static HRESULT SHELL_GetComputerDescription ( _Out_writes_z_(cchDescMax) PWSTR  pszDesc,
_In_ SIZE_T  cchDescMax,
_In_ PWSTR  pszServerName 
)
static

Definition at line 1968 of file utils.cpp.

1972{
1974 NET_API_STATUS error = NetServerGetInfo(pszServerName, 101, (PBYTE*)&bufptr);
1977 return hr;
1978
1979 PCWSTR comment = bufptr->sv101_comment;
1980 if (comment && comment[0])
1981 StringCchCopyW(pszDesc, cchDescMax, comment);
1982 else
1983 hr = E_FAIL;
1984
1986 return hr;
1987}
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
Definition: apibuf.c:43
NET_API_STATUS WINAPI NetServerGetInfo(LMSTR servername, DWORD level, LPBYTE *bufptr)
Definition: srvsvc.c:369
#define comment(fmt, arg1)
Definition: rebar.c:847
DWORD NET_API_STATUS
Definition: ms-dtyp.idl:91
BYTE * PBYTE
Definition: pedump.c:66
static unsigned int bufptr
Definition: tncon.cpp:77

Referenced by SHGetComputerDisplayNameW().

◆ SHELL_GetIDListTarget()

HRESULT SHELL_GetIDListTarget ( _In_ LPCITEMIDLIST  pidl,
_Out_ PIDLIST_ABSOLUTE ppidl 
)

Definition at line 482 of file utils.cpp.

483{
484 IShellLink *pSL;
485 HRESULT hr = SHBindToObject(NULL, pidl, IID_PPV_ARG(IShellLink, &pSL));
486 if (SUCCEEDED(hr))
487 {
488 hr = pSL->GetIDList(ppidl); // Note: Returns S_FALSE if no target pidl
489 pSL->Release();
490 }
491 return hr;
492}
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:370

Referenced by SHBrowseForFolderW().

◆ SHELL_GetUIObjectOfAbsoluteItem()

EXTERN_C HRESULT SHELL_GetUIObjectOfAbsoluteItem ( _In_opt_ HWND  hWnd,
_In_ PCIDLIST_ABSOLUTE  pidl,
_In_ REFIID  riid,
_Out_ void **  ppvObj 
)

Definition at line 380 of file utils.cpp.

384{
385 if (!ppvObj)
386 return E_INVALIDARG;
387 *ppvObj = NULL;
388 IShellFolder *psf;
389 PCUITEMID_CHILD pidlChild;
390 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
391 if (SUCCEEDED(hr))
392 {
393 hr = psf->GetUIObjectOf(hWnd, 1, &pidlChild, riid, NULL, ppvObj);
394 psf->Release();
395 if (SUCCEEDED(hr))
396 {
397 if (*ppvObj)
398 return hr;
399 hr = E_FAIL;
400 }
401 }
402 return hr;
403}
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)

Referenced by CShellLink::DragEnter(), CSendToMenu::GetUIObjectFromPidl(), CFolderItemVerbs::Init(), SHELL_PidlGetIconLocationW(), and shellex_get_dataobj().

◆ SHELL_MapContextMenuVerbToCmdId()

HRESULT SHELL_MapContextMenuVerbToCmdId ( LPCMINVOKECOMMANDINFO  pICI,
const CMVERBMAP pMap 
)

Definition at line 1772 of file utils.cpp.

1773{
1774 LPCSTR pVerbA = pICI->lpVerb;
1775 CHAR buf[MAX_PATH];
1776 LPCMINVOKECOMMANDINFOEX pICIX = (LPCMINVOKECOMMANDINFOEX)pICI;
1777 if (IsUnicode(*pICIX) && !IS_INTRESOURCE(pICIX->lpVerbW))
1778 {
1779 if (SHUnicodeToAnsi(pICIX->lpVerbW, buf, _countof(buf)))
1780 pVerbA = buf;
1781 }
1782
1783 if (IS_INTRESOURCE(pVerbA))
1784 return LOWORD(pVerbA);
1785 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1786 {
1787 assert(SUCCEEDED((int)(pMap[i].CmdId))); // The id must be >= 0 and ideally in the 0..0x7fff range
1788 if (!lstrcmpiA(pMap[i].Verb, pVerbA) && pVerbA[0])
1789 return pMap[i].CmdId;
1790 }
1791 return E_FAIL;
1792}
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4224
#define assert(x)
Definition: debug.h:53
WORD CmdId
Definition: utils.h:89
const char * LPCSTR
Definition: xmlstorage.h:183

Referenced by CCopyAsPathMenu::InvokeCommand(), COpenWithMenu::InvokeCommand(), CRecycleBinItemContextMenu::InvokeCommand(), and CRecycleBin::InvokeCommand().

◆ SHELL_ReadSingleUnreadMailCount()

static DWORD SHELL_ReadSingleUnreadMailCount ( _In_ HKEY  hKey,
_Out_opt_ PDWORD  pdwCount,
_Out_opt_ PFILETIME  pFileTime,
_Out_writes_opt_(cchShellExecuteCommand) LPWSTR  pszShellExecuteCommand,
_In_ INT  cchShellExecuteCommand 
)
static

Definition at line 910 of file utils.cpp.

916{
917 DWORD dwType, dwCount, cbSize = sizeof(dwCount);
918 DWORD error = SHQueryValueExW(hKey, L"MessageCount", 0, &dwType, &dwCount, &cbSize);
919 if (error)
920 return error;
921 if (pdwCount && dwType == REG_DWORD)
922 *pdwCount = dwCount;
923
924 FILETIME FileTime;
925 cbSize = sizeof(FileTime);
926 error = SHQueryValueExW(hKey, L"TimeStamp", 0, &dwType, &FileTime, &cbSize);
927 if (error)
928 return error;
929 if (pFileTime && dwType == REG_BINARY)
930 *pFileTime = FileTime;
931
932 WCHAR szName[2 * MAX_PATH];
933 cbSize = sizeof(szName);
934 error = SHQueryValueExW(hKey, L"Application", 0, &dwType, szName, &cbSize);
935 if (error)
936 return error;
937
938 if (pszShellExecuteCommand && dwType == REG_SZ &&
939 FAILED(StringCchCopyW(pszShellExecuteCommand, cchShellExecuteCommand, szName)))
940 {
942 }
943
944 return ERROR_SUCCESS;
945}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue, LPDWORD lpReserved, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1461
FxAutoRegKey hKey
#define REG_BINARY
Definition: nt_native.h:1496
static const WCHAR szName[]
Definition: powrprof.c:45
#define REG_DWORD
Definition: sdbapi.c:596

Referenced by SHGetUnreadMailCountW().

◆ SHELL_SkipServerSlashes()

static PCWSTR SHELL_SkipServerSlashes ( _In_ PCWSTR  pszPath)
static

Definition at line 1926 of file utils.cpp.

1928{
1929 PCWSTR pch;
1930 for (pch = pszPath; *pch == L'\\'; ++pch)
1931 ;
1932 return pch;
1933}

Referenced by SHELL_BuildDisplayMachineName(), SHELL_CacheComputerDescription(), SHELL_GetCachedComputerDescription(), and SHGetComputerDisplayNameW().

◆ Shell_TranslateIDListAlias()

HRESULT Shell_TranslateIDListAlias ( _In_ LPCITEMIDLIST  pidl,
_In_ HANDLE  hToken,
_Out_ LPITEMIDLIST ppidlAlias,
_In_ DWORD  dwFlags 
)

Definition at line 261 of file utils.cpp.

266{
267 return E_FAIL; //FIXME
268}

Referenced by CDesktopFolder::ParseDisplayName().

◆ SHEnumerateUnreadMailAccountsW()

EXTERN_C HRESULT WINAPI SHEnumerateUnreadMailAccountsW ( _In_opt_ HKEY  hKeyUser,
_In_ DWORD  dwIndex,
_Out_writes_(cchMailAddress) PWSTR  pszMailAddress,
_In_ INT  cchMailAddress 
)

Definition at line 1137 of file utils.cpp.

1142{
1143 if (!hKeyUser)
1144 hKeyUser = HKEY_CURRENT_USER;
1145
1146 HKEY hKey;
1147 LSTATUS error = RegOpenKeyExW(hKeyUser,
1148 L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
1150 if (error)
1151 return HRESULT_FROM_WIN32(error);
1152
1153 FILETIME FileTime;
1154 error = RegEnumKeyExW(hKey, dwIndex, pszMailAddress, (PDWORD)&cchMailAddress, NULL, NULL,
1155 NULL, &FileTime);
1156 if (error)
1157 *pszMailAddress = UNICODE_NULL;
1158
1160 return error ? HRESULT_FROM_WIN32(error) : S_OK;
1161}
#define RegCloseKey(hKey)
Definition: registry.h:49
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019
DWORD * PDWORD
Definition: pedump.c:68

Referenced by START_TEST().

◆ SheRemoveQuotesA()

EXTERN_C LPSTR WINAPI SheRemoveQuotesA ( LPSTR  psz)

Definition at line 1087 of file utils.cpp.

1088{
1089 PCHAR pch;
1090
1091 if (*psz == '"')
1092 {
1093 for (pch = psz + 1; *pch && *pch != '"'; ++pch)
1094 {
1095 *(pch - 1) = *pch;
1096 }
1097
1098 if (*pch == '"')
1099 *(pch - 1) = ANSI_NULL;
1100 }
1101
1102 return psz;
1103}
#define ANSI_NULL
char * PCHAR
Definition: typedefs.h:51

◆ SheRemoveQuotesW()

EXTERN_C LPWSTR WINAPI SheRemoveQuotesW ( LPWSTR  psz)

Definition at line 1112 of file utils.cpp.

1113{
1114 PWCHAR pch;
1115
1116 if (*psz == L'"')
1117 {
1118 for (pch = psz + 1; *pch && *pch != L'"'; ++pch)
1119 {
1120 *(pch - 1) = *pch;
1121 }
1122
1123 if (*pch == L'"')
1124 *(pch - 1) = UNICODE_NULL;
1125 }
1126
1127 return psz;
1128}
uint16_t * PWCHAR
Definition: typedefs.h:56

◆ SHFindComputer()

EXTERN_C BOOL WINAPI SHFindComputer ( LPCITEMIDLIST  pidlRoot,
LPCITEMIDLIST  pidlSavedSearch 
)

Definition at line 1171 of file utils.cpp.

1172{
1173 UNREFERENCED_PARAMETER(pidlRoot);
1174 UNREFERENCED_PARAMETER(pidlSavedSearch);
1175
1176 TRACE("%p %p\n", pidlRoot, pidlSavedSearch);
1177
1178 IContextMenu *pCM;
1179 HRESULT hr = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1180 IID_IContextMenu, (void **)&pCM);
1181 if (FAILED(hr))
1182 {
1183 ERR("0x%08X\n", hr);
1184 return hr;
1185 }
1186
1187 CMINVOKECOMMANDINFO InvokeInfo = { sizeof(InvokeInfo) };
1188 InvokeInfo.lpParameters = "{996E1EB1-B524-11D1-9120-00A0C98BA67D}";
1189 InvokeInfo.nShow = SW_SHOWNORMAL;
1190 hr = pCM->InvokeCommand(&InvokeInfo);
1191 pCM->Release();
1192
1193 return SUCCEEDED(hr);
1194}
#define ERR(fmt,...)
Definition: precomp.h:57
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT InvokeCommand([in] LPCMINVOKECOMMANDINFO lpici)
#define SW_SHOWNORMAL
Definition: winuser.h:781

Referenced by CTrayWindow::HandleCommand(), CTrayWindow::HandleHotKey(), and StartMenuHandler::ShowSearchComputer().

◆ SHGetAttributes()

DWORD SHGetAttributes ( _In_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_ DWORD  dwAttributes 
)

Definition at line 448 of file utils.cpp.

449{
450 LPCITEMIDLIST pidlLast = pidl;
451 IShellFolder *release = NULL;
452
453 if (!psf)
454 {
455 SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast);
456 if (!psf)
457 return 0;
458 release = psf;
459 }
460
461 DWORD oldAttrs = dwAttributes;
462 if (FAILED(psf->GetAttributesOf(1, &pidlLast, &dwAttributes)))
463 dwAttributes = 0;
464 else
465 dwAttributes &= oldAttrs;
466
467 if ((dwAttributes & SFGAO_FOLDER) &&
468 (dwAttributes & SFGAO_STREAM) &&
469 !(dwAttributes & SFGAO_STORAGEANCESTOR) &&
470 (oldAttrs & SFGAO_STORAGEANCESTOR) &&
471 (SHGetObjectCompatFlags(psf, NULL) & 0x200))
472 {
473 dwAttributes &= ~(SFGAO_STREAM | SFGAO_STORAGEANCESTOR);
474 dwAttributes |= SFGAO_STORAGEANCESTOR;
475 }
476
477 if (release)
478 release->Release();
479 return dwAttributes;
480}
DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid)
Definition: ordinal.c:6482
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by CFSDropTarget::_DoDrop(), BrFolder_InsertItem(), CRegItemContextMenu_CreateInstance(), CDefView::OnCreate(), and SHGetNameAndFlagsW().

◆ SHGetComputerDisplayNameW()

EXTERN_C HRESULT WINAPI SHGetComputerDisplayNameW ( _In_opt_ PWSTR  pszServerName,
_In_ DWORD  dwFlags,
_Out_writes_z_(cchNameMax) PWSTR  pszName,
_In_ DWORD  cchNameMax 
)

Definition at line 2011 of file utils.cpp.

2016{
2017 WCHAR szDesc[256], szCompName[MAX_COMPUTERNAME_LENGTH + 1];
2018
2019 // If no server name is specified, retrieve the local computer name
2020 if (!pszServerName)
2021 {
2022 // Use computer name as server name
2023 DWORD cchCompName = _countof(szCompName);
2024 if (!GetComputerNameW(szCompName, &cchCompName))
2025 return E_FAIL;
2026 pszServerName = szCompName;
2027
2028 // Don't use the cache for the local machine
2030 }
2031
2032 // Get computer description from cache if necessary
2033 HRESULT hr = E_FAIL;
2034 if (!(dwFlags & SHGCDN_NOCACHE))
2035 hr = SHELL_GetCachedComputerDescription(szDesc, _countof(szDesc), pszServerName);
2036
2037 // Actually retrieve the computer description if it is not in the cache
2038 if (FAILED(hr))
2039 {
2040 hr = SHELL_GetComputerDescription(szDesc, _countof(szDesc), pszServerName);
2041 if (FAILED(hr))
2042 szDesc[0] = UNICODE_NULL;
2043
2044 // Cache the description if necessary
2045 if (!(dwFlags & SHGCDN_NOCACHE))
2046 SHELL_CacheComputerDescription(pszServerName, szDesc);
2047 }
2048
2049 // If getting the computer description failed, store the server name only
2050 if (FAILED(hr) || !szDesc[0])
2051 {
2053 return hr; // Bail out if no server name is requested
2054
2055 StringCchCopyW(pszName, cchNameMax, SHELL_SkipServerSlashes(pszServerName));
2056 return S_OK;
2057 }
2058
2059 // If no server name is requested, store the description only
2061 {
2062 StringCchCopyW(pszName, cchNameMax, szDesc);
2063 return S_OK;
2064 }
2065
2066 // Build a string like "Description (SERVERNAME)"
2067 return SHELL_BuildDisplayMachineName(pszName, cchNameMax, pszServerName, szDesc);
2068}
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
static HRESULT SHELL_GetComputerDescription(_Out_writes_z_(cchDescMax) PWSTR pszDesc, _In_ SIZE_T cchDescMax, _In_ PWSTR pszServerName)
Definition: utils.cpp:1968
static HRESULT SHELL_BuildDisplayMachineName(_Out_writes_z_(cchNameMax) PWSTR pszName, _In_ DWORD cchNameMax, _In_ PCWSTR pszServerName, _In_ PCWSTR pszDescription)
Definition: utils.cpp:1991
static VOID SHELL_CacheComputerDescription(_In_ PCWSTR pszServerName, _In_ PCWSTR pszDesc)
Definition: utils.cpp:1954
static HRESULT SHELL_GetCachedComputerDescription(_Out_writes_z_(cchDescMax) PWSTR pszDesc, _In_ DWORD cchDescMax, _In_ PCWSTR pszServerName)
Definition: utils.cpp:1941
#define SHGCDN_NOSERVERNAME
Definition: undocshell.h:1008
#define SHGCDN_NOCACHE
Definition: undocshell.h:1007
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:276

◆ SHGetNameAndFlagsW()

HRESULT SHGetNameAndFlagsW ( _In_ LPCITEMIDLIST  pidl,
_In_ DWORD  dwFlags,
_Out_opt_ LPWSTR  pszText,
_In_ UINT  cchBuf,
_Inout_opt_ DWORD pdwAttributes 
)

Definition at line 503 of file utils.cpp.

509{
510 if (pszText)
511 *pszText = UNICODE_NULL;
512
514
515 CComPtr<IShellFolder> psfFolder;
516 LPCITEMIDLIST ppidlLast;
517 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &ppidlLast);
518 if (SUCCEEDED(hr))
519 {
520 if (pszText)
521 hr = DisplayNameOfW(psfFolder, ppidlLast, dwFlags, pszText, cchBuf);
522
523 if (SUCCEEDED(hr))
524 {
525 if (pdwAttributes)
526 *pdwAttributes = SHGetAttributes(psfFolder, ppidlLast, *pdwAttributes);
527 }
528 }
529
530 if (SUCCEEDED(hrCoInit))
532
533 return hr;
534}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:448
EXTERN_C HRESULT WINAPI DisplayNameOfW(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: utils.cpp:432
HRESULT SHCoInitializeAnyApartment(VOID)
Definition: utils.cpp:494

Referenced by CDrvDefExt::AddMainPage(), DoGetFileTitle(), CShellLink::OnInitDialog(), SHELL_execute(), SHELL_GetCaptionFromDataObject(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ SHGetPathCchFromIDListW()

EXTERN_C HRESULT WINAPI SHGetPathCchFromIDListW ( LPCITEMIDLIST  pidl,
LPWSTR  pszPath,
SIZE_T  cchPathMax 
)

◆ SHGetRealIDL()

EXTERN_C HRESULT WINAPI SHGetRealIDL ( _In_ IShellFolder psf,
_In_ PCUITEMID_CHILD  pidlSimple,
_Outptr_ PITEMID_CHILD ppidlReal 
)

Definition at line 1643 of file utils.cpp.

1647{
1648 HRESULT hr;
1649 STRRET strret;
1651 SFGAOF attrs;
1652
1653 *ppidlReal = NULL;
1654
1655 hr = IShellFolder_GetDisplayNameOf(psf, pidlSimple, SHGDN_INFOLDER | SHGDN_FORPARSING,
1656 &strret, 0);
1658 return hr;
1659
1660 hr = StrRetToBufW(&strret, pidlSimple, szPath, _countof(szPath));
1662 return hr;
1663
1664 attrs = SFGAO_FILESYSTEM;
1665 hr = psf->GetAttributesOf(1, &pidlSimple, &attrs);
1666 if (SUCCEEDED(hr) && !(attrs & SFGAO_FILESYSTEM))
1667 return SHILClone(pidlSimple, ppidlReal);
1668
1669 hr = IShellFolder_ParseDisplayName(psf, NULL, NULL, szPath, NULL, ppidlReal, NULL);
1670 if (hr == E_INVALIDARG || hr == E_NOTIMPL)
1671 return SHILClone(pidlSimple, ppidlReal);
1672
1673 return hr;
1674}
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:133
#define IShellFolder_ParseDisplayName
Definition: utils.cpp:14
#define IShellFolder_GetDisplayNameOf
Definition: utils.cpp:13
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83

Referenced by CDefView::OnChangeNotify().

◆ SHGetShellStyleHInstance()

EXTERN_C HINSTANCE WINAPI SHGetShellStyleHInstance ( VOID  )

Definition at line 861 of file utils.cpp.

862{
865 HRESULT hr;
866 CStringW strShellStyle;
867
868 TRACE("SHGetShellStyleHInstance called\n");
869
870 /* First, attempt to load the shellstyle dll from the current active theme */
872 if (FAILED(hr))
873 goto DoDefault;
874
875 /* Strip the theme filename */
877
878 strShellStyle = szPath;
879 strShellStyle += L"\\Shell\\";
880 strShellStyle += szColorName;
881 strShellStyle += L"\\ShellStyle.dll";
882
884 if (hInst)
885 return hInst;
886
887 /* Otherwise, use the version stored in the System32 directory */
888DoDefault:
889 if (!ExpandEnvironmentStringsW(L"%SystemRoot%\\System32\\ShellStyle.dll",
891 {
892 ERR("Expand failed\n");
893 return NULL;
894 }
896}
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
BOOL WINAPI PathRemoveFileSpecW(WCHAR *path)
Definition: path.c:1088
HRESULT WINAPI GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars)
Definition: system.c:971
static const WCHAR szColorName[]
Definition: system.c:42
HINSTANCE hInst
Definition: dxdiag.c:13
#define LOAD_LIBRARY_AS_DATAFILE
Definition: winbase.h:375

◆ SHGetUnreadMailCountW()

EXTERN_C HRESULT WINAPI SHGetUnreadMailCountW ( _In_opt_ HKEY  hKeyUser,
_In_opt_ PCWSTR  pszMailAddress,
_Out_opt_ PDWORD  pdwCount,
_Inout_opt_ PFILETIME  pFileTime,
_Out_writes_opt_(cchShellExecuteCommand) PWSTR  pszShellExecuteCommand,
_In_ INT  cchShellExecuteCommand 
)

Definition at line 954 of file utils.cpp.

961{
963 HKEY hKey;
964
965 if (!hKeyUser)
966 hKeyUser = HKEY_CURRENT_USER;
967
968 if (pszMailAddress)
969 {
970 CStringW strKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail";
971 strKey += L'\\';
972 strKey += pszMailAddress;
973
974 error = RegOpenKeyExW(hKeyUser, strKey, 0, KEY_QUERY_VALUE, &hKey);
975 if (error)
977
978 error = SHELL_ReadSingleUnreadMailCount(hKey, pdwCount, pFileTime,
979 pszShellExecuteCommand, cchShellExecuteCommand);
980 }
981 else
982 {
983 if (pszShellExecuteCommand || cchShellExecuteCommand)
984 return E_INVALIDARG;
985
986 *pdwCount = 0;
987
988 error = RegOpenKeyExW(hKeyUser, L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
990 if (error)
992
993 for (DWORD dwIndex = 0; !error; ++dwIndex)
994 {
995 WCHAR Name[2 * MAX_PATH];
997 FILETIME LastWritten;
998 error = RegEnumKeyExW(hKey, dwIndex, Name, &cchName, NULL, NULL, NULL, &LastWritten);
999 if (error)
1000 break;
1001
1002 HKEY hSubKey;
1003 error = RegOpenKeyExW(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey);
1004 if (error)
1005 break;
1006
1007 FILETIME FileTime;
1008 DWORD dwCount;
1009 error = SHELL_ReadSingleUnreadMailCount(hSubKey, &dwCount, &FileTime, NULL, 0);
1010 if (!error && (!pFileTime || CompareFileTime(&FileTime, pFileTime) >= 0))
1011 *pdwCount += dwCount;
1012
1013 RegCloseKey(hSubKey);
1014 }
1015
1018 }
1019
1021
1022 return error ? HRESULT_FROM_WIN32(error) : S_OK;
1023}
LPWSTR Name
Definition: desk.c:124
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
static DWORD SHELL_ReadSingleUnreadMailCount(_In_ HKEY hKey, _Out_opt_ PDWORD pdwCount, _Out_opt_ PFILETIME pFileTime, _Out_writes_opt_(cchShellExecuteCommand) LPWSTR pszShellExecuteCommand, _In_ INT cchShellExecuteCommand)
Definition: utils.cpp:910
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2808

Referenced by START_TEST().

◆ SHGetUserDisplayName()

EXTERN_C HRESULT WINAPI SHGetUserDisplayName ( _Out_writes_to_ *, *puSize PWSTR  pName,
_Inout_ PULONG  puSize 
)

Definition at line 1870 of file utils.cpp.

1873{
1874 if (!pName || !puSize)
1875 return E_INVALIDARG;
1876
1877 if (GetUserNameExW(NameDisplay, pName, puSize))
1878 return S_OK;
1879
1880 LONG error = GetLastError(); // for ERROR_NONE_MAPPED
1882
1883 WCHAR UserName[MAX_PATH];
1884 DWORD cchUserName = _countof(UserName);
1885 if (!GetUserNameW(UserName, &cchUserName))
1887
1888 // Was the user name not available in the specified format (NameDisplay)?
1889 if (error == ERROR_NONE_MAPPED)
1890 {
1891 // Try to get the user name by using Network API
1892 PUSER_INFO_2 UserInfo;
1893 DWORD NetError = NetUserGetInfo(NULL, UserName, 2, (PBYTE*)&UserInfo);
1894 if (NetError)
1895 {
1896 hr = HRESULT_FROM_WIN32(NetError);
1897 }
1898 else
1899 {
1900 if (UserInfo->usri2_full_name)
1901 {
1902 hr = StringCchCopyW(pName, *puSize, UserInfo->usri2_full_name);
1903 if (SUCCEEDED(hr))
1904 {
1905 // Include the NUL-terminator
1906 *puSize = lstrlenW(UserInfo->usri2_full_name) + 1;
1907 }
1908 }
1909
1910 NetApiBufferFree(UserInfo);
1911 }
1912 }
1913
1914 if (FAILED(hr))
1915 {
1916 hr = StringCchCopyW(pName, *puSize, UserName);
1917 if (SUCCEEDED(hr))
1918 *puSize = cchUserName;
1919 }
1920
1921 return hr;
1922}
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
Definition: misc.c:291
NET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR servername, LPCWSTR username, DWORD level, LPBYTE *bufptr)
Definition: user.c:3147
static LPSTR pName
Definition: security.c:75
long LONG
Definition: pedump.c:60
BOOLEAN WINAPI GetUserNameExW(EXTENDED_NAME_FORMAT NameFormat, LPWSTR lpNameBuffer, PULONG nSize)
Definition: sspi.c:1079
LPWSTR usri2_full_name
Definition: lmaccess.h:222
#define ERROR_NONE_MAPPED
Definition: winerror.h:814

Referenced by START_TEST().

◆ SHGetUserSessionId()

EXTERN_C DWORD WINAPI SHGetUserSessionId ( _In_opt_ HANDLE  hToken)

Definition at line 716 of file utils.cpp.

717{
718 DWORD dwSessionId, dwLength;
719 BOOL bOpenToken = FALSE;
720
721 TRACE("%p\n", hToken);
722
723 if (!hToken)
724 bOpenToken = SHOpenEffectiveToken(&hToken);
725
726 if (!hToken ||
727 !GetTokenInformation(hToken, TokenSessionId, &dwSessionId, sizeof(dwSessionId), &dwLength))
728 {
729 dwSessionId = 0;
730 }
731
732 if (bOpenToken)
733 CloseHandle(hToken);
734
735 return dwSessionId;
736}
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:411
#define CloseHandle
Definition: compat.h:739
static DWORD DWORD * dwLength
Definition: fusion.c:86
EXTERN_C BOOL WINAPI SHOpenEffectiveToken(_Out_ LPHANDLE phToken)
Definition: utils.cpp:707
@ TokenSessionId
Definition: setypes.h:989

◆ SHILAppend()

HRESULT SHILAppend ( _Inout_ LPITEMIDLIST  pidl,
_Inout_ LPITEMIDLIST ppidl 
)

Definition at line 193 of file utils.cpp.

194{
195 LPITEMIDLIST pidlOld = *ppidl;
196 if (!pidlOld)
197 {
198 *ppidl = pidl;
199 return S_OK;
200 }
201
202 HRESULT hr = SHILCombine(*ppidl, pidl, ppidl);
203 ILFree(pidlOld);
204 ILFree(pidl);
205 return hr;
206}
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045

Referenced by CFSFolder::_ParseSimple(), BrFolder_Treeview_Rename(), and CFSFolder::ParseDisplayName().

◆ SHILClone()

◆ SHInvokePrivilegedFunctionW()

EXTERN_C HRESULT WINAPI SHInvokePrivilegedFunctionW ( _In_ LPCWSTR  pszName,
_In_ PRIVILEGED_FUNCTION  fn,
_In_opt_ LPARAM  lParam 
)

Definition at line 743 of file utils.cpp.

747{
748 TRACE("(%s %p %p)\n", debugstr_w(pszName), fn, lParam);
749
750 if (!pszName || !fn)
751 return E_INVALIDARG;
752
753 HANDLE hToken = NULL;
754 TOKEN_PRIVILEGES NewPriv, PrevPriv;
755 BOOL bAdjusted = FALSE;
756
757 if (SHOpenEffectiveToken(&hToken) &&
758 ::LookupPrivilegeValueW(NULL, pszName, &NewPriv.Privileges[0].Luid))
759 {
760 NewPriv.PrivilegeCount = 1;
762
763 DWORD dwReturnSize;
764 bAdjusted = ::AdjustTokenPrivileges(hToken, FALSE, &NewPriv,
765 sizeof(PrevPriv), &PrevPriv, &dwReturnSize);
766 }
767
768 HRESULT hr = fn(lParam);
769
770 if (bAdjusted)
771 ::AdjustTokenPrivileges(hToken, FALSE, &PrevPriv, 0, NULL, NULL);
772
773 if (hToken)
774 ::CloseHandle(hToken);
775
776 return hr;
777}
LPARAM lParam
Definition: combotst.c:139
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
$ULONG PrivilegeCount
Definition: setypes.h:1035
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]
Definition: setypes.h:1036
static GLenum _GLUfuncptr fn
Definition: wgl_font.c:159
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63

◆ SHIsBadInterfacePtr()

EXTERN_C BOOL WINAPI SHIsBadInterfacePtr ( _In_ LPCVOID  pv,
_In_ UINT_PTR  ucb 
)

Definition at line 1846 of file utils.cpp.

1849{
1850 struct CUnknownVtbl
1851 {
1855 };
1856 struct CUnknown { CUnknownVtbl *lpVtbl; };
1857 const CUnknown *punk = reinterpret_cast<const CUnknown *>(pv);
1858 return !punk || IsBadReadPtr(punk, sizeof(punk->lpVtbl)) ||
1859 IsBadReadPtr(punk->lpVtbl, ucb) ||
1860 IsBadCodePtr((FARPROC)punk->lpVtbl->Release);
1861}
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
_In_ BOOLEAN Release
Definition: cdrom.h:920
int(* FARPROC)()
Definition: compat.h:36
BOOL WINAPI IsBadReadPtr(IN LPCVOID lp, IN UINT_PTR ucb)
Definition: except.c:805
BOOL NTAPI IsBadCodePtr(FARPROC lpfn)
Definition: except.c:872
static HRESULT QueryInterface(REFIID, void **)
Definition: events.c:2587
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
#define REFIID
Definition: guiddef.h:118
uint32_t ULONG
Definition: typedefs.h:59
#define HRESULT
Definition: msvc.h:7

Referenced by START_TEST().

◆ SHIsFileSysBindCtx()

HRESULT SHIsFileSysBindCtx ( _In_ IBindCtx pBindCtx,
_Out_opt_ WIN32_FIND_DATAW pFindData 
)

Definition at line 303 of file utils.cpp.

304{
307
308 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam((LPWSTR)STR_FILE_SYS_BIND_DATA, &punk)))
309 return S_FALSE;
310
311 if (FAILED(punk->QueryInterface(IID_PPV_ARG(IFileSystemBindData, &pBindData))))
312 return S_FALSE;
313
314 if (pFindData)
315 pBindData->GetFindData(pFindData);
316
317 return S_OK;
318}

Referenced by CDesktopFolder::ParseDisplayName(), CDrivesFolder::ParseDisplayName(), and CFSFolder::ParseDisplayName().

◆ SHOpenEffectiveToken()

EXTERN_C BOOL WINAPI SHOpenEffectiveToken ( _Out_ LPHANDLE  phToken)

Definition at line 707 of file utils.cpp.

708{
709 TRACE("%p\n", phToken);
711}
static BOOL OpenEffectiveToken(_In_ DWORD DesiredAccess, _Out_ HANDLE *phToken)
Definition: utils.cpp:239
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:942
#define TOKEN_QUERY
Definition: setypes.h:940

Referenced by SHGetUserSessionId(), SHInvokePrivilegedFunctionW(), and SHTestTokenPrivilegeW().

◆ ShortSizeFormatW()

EXTERN_C LPWSTR WINAPI ShortSizeFormatW ( _In_ DWORD  dwNumber,
_Out_writes_(0x8FFF) LPWSTR  pszBuffer 
)

Definition at line 696 of file utils.cpp.

699{
700 TRACE("(%lu, %p)\n", dwNumber, pszBuffer);
701 return StrFormatByteSizeW(dwNumber, pszBuffer, 0x8FFF);
702}
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2394

◆ SHSetFolderPathA()

EXTERN_C HRESULT WINAPI SHSetFolderPathA ( _In_ INT  csidl,
_In_ HANDLE  hToken,
_In_ DWORD  dwFlags,
_In_ LPCSTR  pszPath 
)

Definition at line 643 of file utils.cpp.

648{
649 TRACE("(%d, %p, 0x%X, %s)\n", csidl, hToken, dwFlags, debugstr_a(pszPath));
650 CStringW strPathW(pszPath);
651 return SHSetFolderPathW(csidl, hToken, dwFlags, strPathW);
652}
EXTERN_C HRESULT WINAPI SHSetFolderPathW(_In_ INT csidl, _In_ HANDLE hToken, _In_ DWORD dwFlags, _In_ LPCWSTR pszPath)
Definition: stubs.cpp:727

◆ SHSetUnreadMailCountW()

EXTERN_C HRESULT WINAPI SHSetUnreadMailCountW ( _In_ PCWSTR  pszMailAddress,
_In_ DWORD  dwCount,
_In_ PCWSTR  pszShellExecuteCommand 
)

Definition at line 1032 of file utils.cpp.

1036{
1037 CString strKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\";
1038 strKey += pszMailAddress;
1039
1040 HKEY hKey;
1041 DWORD dwDisposition;
1043 &hKey, &dwDisposition);
1044 if (error)
1045 return HRESULT_FROM_WIN32(error);
1046
1047 error = RegSetValueExW(hKey, L"MessageCount", 0, REG_DWORD, (PBYTE)&dwCount, sizeof(dwCount));
1048 if (error)
1049 {
1051 return HRESULT_FROM_WIN32(error);
1052 }
1053
1054 FILETIME FileTime;
1055 GetSystemTimeAsFileTime(&FileTime);
1056
1057 error = RegSetValueExW(hKey, L"TimeStamp", 0, REG_BINARY, (PBYTE)&FileTime, sizeof(FileTime));
1058 if (error)
1059 {
1061 return HRESULT_FROM_WIN32(error);
1062 }
1063
1064 WCHAR szBuff[2 * MAX_PATH];
1065 if (!PathUnExpandEnvStringsW(pszShellExecuteCommand, szBuff, _countof(szBuff)))
1066 {
1067 HRESULT hr = StringCchCopyW(szBuff, _countof(szBuff), pszShellExecuteCommand);
1069 {
1071 return hr;
1072 }
1073 }
1074
1075 DWORD cbValue = (lstrlenW(szBuff) + 1) * sizeof(WCHAR);
1076 error = RegSetValueExW(hKey, L"Application", 0, REG_SZ, (PBYTE)szBuff, cbValue);
1077
1079 return (error ? HRESULT_FROM_WIN32(error) : S_OK);
1080}
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
Definition: time.c:128
BOOL WINAPI PathUnExpandEnvStringsW(const WCHAR *path, WCHAR *buffer, UINT buf_len)
Definition: path.c:2648
#define KEY_SET_VALUE
Definition: nt_native.h:1017

Referenced by START_TEST().

◆ SHShouldShowWizards()

EXTERN_C HRESULT WINAPI SHShouldShowWizards ( _In_ IUnknown pUnknown)

Definition at line 216 of file utils.cpp.

217{
218 HRESULT hr;
219 IShellBrowser *pBrowser;
220
221 hr = IUnknown_QueryService(pUnknown, SID_STopWindow, IID_PPV_ARG(IShellBrowser, &pBrowser));
222 if (FAILED(hr))
223 return hr;
224
227 if (state.fWebView &&
228 !SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
229 L"ShowWizardsTEST", FALSE, FALSE))
230 {
231 hr = S_FALSE;
232 }
233
234 pBrowser->Release();
235 return hr;
236}
static int state
Definition: maze.c:121
BOOL WINAPI SHRegGetBoolUSValueW(const WCHAR *subkey, const WCHAR *value, BOOL ignore_hkcu, BOOL default_value)
Definition: registry.c:4139
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_WEBVIEW
Definition: shlobj.h:1628

Referenced by START_TEST().

◆ SHSkipJunctionBinding()

BOOL SHSkipJunctionBinding ( _In_ IBindCtx pbc,
_In_ CLSID pclsid 
)

Definition at line 291 of file utils.cpp.

292{
293 if (!pbc)
294 return FALSE;
295
296 BIND_OPTS BindOps = { sizeof(BindOps) };
297 if (SUCCEEDED(pbc->GetBindOptions(&BindOps)) && BindOps.grfFlags == OLECONTF_LINKS)
298 return TRUE;
299
300 return pclsid && SHSkipJunction(pbc, pclsid);
301}
BOOL WINAPI SHSkipJunction(IBindCtx *pbc, const CLSID *pclsid)
Definition: ordinal.c:4762

Referenced by CDesktopFolder::_ParseDisplayNameByParent().

◆ SHStartNetConnectionDialogA()

EXTERN_C HRESULT WINAPI SHStartNetConnectionDialogA ( _In_ HWND  hwnd,
_In_ LPCSTR  pszRemoteName,
_In_ DWORD  dwType 
)

Definition at line 1503 of file utils.cpp.

1507{
1508 LPCWSTR pszRemoteNameW = NULL;
1509 CStringW strRemoteNameW;
1510
1511 TRACE("(%p, %s, %lu)\n", hwnd, debugstr_a(pszRemoteName), dwType);
1512
1513 if (pszRemoteName)
1514 {
1515 strRemoteNameW = pszRemoteName;
1516 pszRemoteNameW = strRemoteNameW;
1517 }
1518
1519 return SHStartNetConnectionDialogW(hwnd, pszRemoteNameW, dwType);
1520}
EXTERN_C HRESULT WINAPI SHStartNetConnectionDialogW(_In_ HWND hwnd, _In_ LPCWSTR pszRemoteName, _In_ DWORD dwType)
Definition: stubs.cpp:470

Referenced by SHStartNetConnectionDialog().

◆ SHTestTokenPrivilegeW()

EXTERN_C BOOL WINAPI SHTestTokenPrivilegeW ( _In_opt_ HANDLE  hToken,
_In_ LPCWSTR  lpName 
)

Definition at line 786 of file utils.cpp.

789{
790 LUID Luid;
792 PTOKEN_PRIVILEGES pTokenPriv;
793 HANDLE hNewToken = NULL;
794 BOOL ret = FALSE;
795
796 TRACE("(%p, %s)\n", hToken, debugstr_w(lpName));
797
798 if (!lpName)
799 return FALSE;
800
801 if (!hToken)
802 {
803 if (!SHOpenEffectiveToken(&hNewToken))
804 goto Quit;
805
806 if (!hNewToken)
807 return FALSE;
808
809 hToken = hNewToken;
810 }
811
812 if (!LookupPrivilegeValueW(NULL, lpName, &Luid))
813 return FALSE;
814
815 dwLength = 0;
817 goto Quit;
818
820 if (!pTokenPriv)
821 goto Quit;
822
823 if (GetTokenInformation(hToken, TokenPrivileges, pTokenPriv, dwLength, &dwLength))
824 {
825 UINT iPriv, cPrivs;
826 cPrivs = pTokenPriv->PrivilegeCount;
827 for (iPriv = 0; !ret && iPriv < cPrivs; ++iPriv)
828 {
829 ret = RtlEqualLuid(&Luid, &pTokenPriv->Privileges[iPriv].Luid);
830 }
831 }
832
833 LocalFree(pTokenPriv);
834
835Quit:
836 if (hToken == hNewToken)
837 CloseHandle(hNewToken);
838
839 return ret;
840}
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define LPTR
Definition: winbase.h:414
_In_ LPCSTR lpName
Definition: winbase.h:2830
#define RtlEqualLuid(Luid1, Luid2)
Definition: rtlfuncs.h:304
@ TokenPrivileges
Definition: setypes.h:980
struct _TOKEN_PRIVILEGES * PTOKEN_PRIVILEGES

Referenced by IsShutdownAllowed().

◆ StrEndNA()

static PCSTR StrEndNA ( _In_ PCSTR  psz,
_In_ INT_PTR  cch 
)
static

Definition at line 17 of file utils.cpp.

18{
19 PCSTR pch, pchEnd = &psz[cch];
20 for (pch = psz; *pch && pch < pchEnd; pch = CharNextA(pch))
21 ;
22 if (pchEnd < pch) // A double-byte character detected at last?
23 pch -= 2; // The width of a double-byte character is 2
24 return pch;
25}
LPSTR WINAPI CharNextA(const char *ptr)
Definition: string.c:1107
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
const char * PCSTR
Definition: typedefs.h:52

Referenced by StrRStrA().

◆ StrEndNW()

static PCWSTR StrEndNW ( _In_ PCWSTR  psz,
_In_ INT_PTR  cch 
)
static

Definition at line 27 of file utils.cpp.

28{
29 PCWSTR pch, pchEnd = &psz[cch];
30 for (pch = psz; *pch && pch < pchEnd; ++pch)
31 ;
32 return pch;
33}

Referenced by StrRStrW().

◆ StrRStrA()

EXTERN_C PSTR WINAPI StrRStrA ( _In_ PCSTR  pszSrc,
_In_opt_ PCSTR  pszLast,
_In_ PCSTR  pszSearch 
)

Definition at line 40 of file utils.cpp.

44{
45 INT cchSearch = lstrlenA(pszSearch);
46
47 PCSTR pchEnd = pszLast ? pszLast : &pszSrc[lstrlenA(pszSrc)];
48 if (pchEnd == pszSrc)
49 return NULL;
50
51 INT_PTR cchEnd = pchEnd - pszSrc;
52 for (;;)
53 {
54 --pchEnd;
55 --cchEnd;
56 if (!pchEnd)
57 break;
58 if (!StrCmpNA(pchEnd, pszSearch, cchSearch) && pchEnd == StrEndNA(pszSrc, cchEnd))
59 break;
60 if (pchEnd == pszSrc)
61 return NULL;
62 }
63
64 return const_cast<PSTR>(pchEnd);
65}
INT WINAPI StrCmpNA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
Definition: string.c:489
static PCSTR StrEndNA(_In_ PCSTR psz, _In_ INT_PTR cch)
Definition: utils.cpp:17
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
int32_t INT_PTR
Definition: typedefs.h:64
char * PSTR
Definition: typedefs.h:51

Referenced by TEST_StrRStrA().

◆ StrRStrW()

EXTERN_C PWSTR WINAPI StrRStrW ( _In_ PCWSTR  pszSrc,
_In_opt_ PCWSTR  pszLast,
_In_ PCWSTR  pszSearch 
)

Definition at line 72 of file utils.cpp.

76{
77 INT cchSearch = lstrlenW(pszSearch);
78
79 PCWSTR pchEnd = pszLast ? pszLast : &pszSrc[lstrlenW(pszSrc)];
80 if (pchEnd == pszSrc)
81 return NULL;
82
83 INT_PTR cchEnd = pchEnd - pszSrc;
84 for (;;)
85 {
86 --pchEnd;
87 --cchEnd;
88 if (!pchEnd)
89 break;
90 if (!StrCmpNW(pchEnd, pszSearch, cchSearch) && pchEnd == StrEndNW(pszSrc, cchEnd))
91 break;
92 if (pchEnd == pszSrc)
93 return NULL;
94 }
95
96 return const_cast<PWSTR>(pchEnd);
97}
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:500
static PCWSTR StrEndNW(_In_ PCWSTR psz, _In_ INT_PTR cch)
Definition: utils.cpp:27
uint16_t * PWSTR
Definition: typedefs.h:56

Referenced by TEST_StrRStrW().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )