ReactOS 0.4.16-dev-2208-g6350669
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
 
struct  tagALIAS_MAPPING
 

Macros

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

Typedefs

typedef struct tagALIAS_MAPPING ALIAS_MAPPING
 
typedef struct tagALIAS_MAPPINGPALIAS_MAPPING
 

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)
 
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)
 
int DCIA_AddEntry (HDCIA hDCIA, REFCLSID rClsId)
 
void DCIA_AddShellExSubkey (HDCIA hDCIA, HKEY hProgId, PCWSTR pszSubkey)
 
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)
 
EXTERN_C BOOL SHELL32_ReparentAsAliasPidl (_In_opt_ HWND hwnd, _In_opt_ HANDLE hToken, _In_ LPCITEMIDLIST pidlTarget, _Out_ LPITEMIDLIST *ppidlNew, _In_ DWORD dwFlags)
 Translate a PIDL to an "alias" PIDL.
 
EXTERN_C HRESULT SHELL32_AliasTranslatePidl (_In_ LPCITEMIDLIST pidl, _Out_ LPITEMIDLIST *ppidlNew, _In_ DWORD dwFlags)
 Translate a PIDL to an "alias" PIDL.
 

Variables

static const ALIAS_MAPPING g_AliasTable []
 PIDL alias table.
 

Macro Definition Documentation

◆ COMPUTER_DESCRIPTIONS_KEY

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

Definition at line 1951 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:2139
#define PATH_CHAR_CLASS_SPACE
Definition: path.c:2138
#define PATH_CHAR_CLASS_SEMICOLON
Definition: path.c:2136
#define PATH_CHAR_CLASS_COMMA
Definition: path.c:2137
#define PATH_CHAR_CLASS_DOT
Definition: path.c:2133

Definition at line 153 of file utils.cpp.

Typedef Documentation

◆ ALIAS_MAPPING

◆ PALIAS_MAPPING

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 1467 of file utils.cpp.

1472{
1473 DWORD dwProcessID;
1474
1478 UNREFERENCED_PARAMETER(cmdshow);
1479
1480 TRACE("(%p, %p, %s, %d)\n", hwnd, hinst, debugstr_w(cmdline), cmdline);
1481
1483 return AllowSetForegroundWindow(dwProcessID);
1484}
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 260 of file utils.cpp.

261{
263 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam(const_cast<LPWSTR>(pszName), &punk)))
264 return FALSE;
265 return TRUE;
266}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define FAILED(hr)
Definition: intsafe.h:51
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
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 268 of file utils.cpp.

269{
270 if (!pbc)
271 return dwDefault;
272
273 BIND_OPTS BindOpts = { sizeof(BindOpts) };
274 HRESULT hr = pbc->GetBindOptions(&BindOpts);
275 if (FAILED(hr))
276 return dwDefault;
277
278 return BindOpts.grfMode;
279}
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 527 of file utils.cpp.

528{
529 HWND hWnd = NULL;
530
532 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
534
535 return hWnd;
536}
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 L(x)
Definition: resources.c:13
#define SUCCEEDED(hr)
Definition: intsafe.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 587 of file utils.cpp.

592{
593 HRESULT hr = S_OK;
595
596 *ppbc = pBindCtx;
597
598 if (pBindCtx)
599 {
600 pBindCtx->AddRef();
601 }
602 else
603 {
604 hr = CreateBindCtx(0, ppbc);
605 if (FAILED(hr))
606 return hr;
607 }
608
609 if (!punk)
610 punk = pUnknown = new CDummyOleWindow();
611
612 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
613
614 if (pUnknown)
615 pUnknown->Release();
616
617 if (FAILED(hr))
618 {
619 (*ppbc)->Release();
620 *ppbc = NULL;
621 }
622
623 return hr;
624}
_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 1349 of file utils.cpp.

1354{
1355 HRESULT hr = E_FAIL;
1356 DWORD cbBuff, cbRead, dwSizeToWrite;
1357 DWORDLONG cbDone;
1358 LPVOID pBuff;
1359 CComHeapPtr<BYTE> pHeapPtr;
1360 STATSTG Stat;
1361 BYTE abBuff[1024];
1362
1363 TRACE("(%p, %p, %p, %I64u)\n", pSrc, pDst, pProgress, dwlSize);
1364
1365 if (dwlSize == 0) // Invalid size?
1366 {
1367 // Get the stream size
1368 ZeroMemory(&Stat, sizeof(Stat));
1369 if (FAILED(pSrc->Stat(&Stat, STATFLAG_NONAME)))
1370 pProgress = NULL; // No size info. Disable progress
1371 else
1372 dwlSize = Stat.cbSize.QuadPart;
1373 }
1374
1375 if (!pProgress) // Progress is disabled?
1376 {
1377 ULARGE_INTEGER uliSize;
1378
1379 if (dwlSize > 0)
1380 uliSize.QuadPart = dwlSize;
1381 else
1382 uliSize.HighPart = uliSize.LowPart = INVALID_FILE_SIZE;
1383
1384 return pSrc->CopyTo(pDst, uliSize, NULL, NULL); // One punch
1385 }
1386
1387 // Allocate the buffer if necessary
1388 if (dwlSize > 0 && dwlSize <= sizeof(abBuff))
1389 {
1390 cbBuff = sizeof(abBuff);
1391 pBuff = abBuff;
1392 }
1393 else
1394 {
1395#define COPY_STREAM_DEFAULT_BUFFER_SIZE 0x4000
1397 if (pHeapPtr.AllocateBytes(cbBuff))
1398 {
1399 pBuff = pHeapPtr;
1400 }
1401 else // Low memory?
1402 {
1403 cbBuff = sizeof(abBuff);
1404 pBuff = abBuff;
1405 }
1406#undef COPY_STREAM_DEFAULT_BUFFER_SIZE
1407 }
1408
1409 // Start reading
1411 zero.QuadPart = 0;
1412 pSrc->Seek(zero, 0, NULL);
1413 pDst->Seek(zero, 0, NULL);
1414 cbDone = 0;
1415 pProgress->SetProgress64(cbDone, dwlSize);
1416
1417 // Repeat reading and writing until goal
1418 for (;;)
1419 {
1420 hr = pSrc->Read(pBuff, cbBuff, &cbRead);
1421 if (FAILED(hr))
1422 break;
1423
1424 // Calculate the size to write
1425 if (dwlSize > 0)
1426 dwSizeToWrite = (DWORD)min((DWORDLONG)(dwlSize - cbDone), (DWORDLONG)cbRead);
1427 else
1428 dwSizeToWrite = cbRead;
1429
1430 if (dwSizeToWrite == 0) // No need to write?
1431 {
1432 hr = S_OK;
1433 break;
1434 }
1435
1436 hr = pDst->Write(pBuff, dwSizeToWrite, NULL);
1437 if (hr != S_OK)
1438 break;
1439
1440 cbDone += dwSizeToWrite;
1441
1442 if (pProgress->HasUserCancelled()) // Cancelled?
1443 {
1445 break;
1446 }
1447 pProgress->SetProgress64(cbDone, dwlSize);
1448
1449 if (dwlSize > 0 && cbDone >= dwlSize) // Reached the goal?
1450 {
1451 hr = S_OK;
1452 break;
1453 }
1454 }
1455
1456 return hr;
1457}
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 ZeroMemory
Definition: minwinbase.h:31
#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 INVALID_FILE_SIZE
Definition: winbase.h:528
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define ERROR_CANCELLED
Definition: winerror.h:1055
unsigned char BYTE
Definition: xxhash.c:193

◆ DCIA_AddEntry()

int DCIA_AddEntry ( HDCIA  hDCIA,
REFCLSID  rClsId 
)

Definition at line 1825 of file utils.cpp.

1826{
1827 for (UINT i = 0;; ++i)
1828 {
1829 const CLSID *pClsId = DCIA_GetEntry(hDCIA, i);
1830 if (!pClsId)
1831 break;
1832 if (IsEqualGUID(*pClsId, rClsId))
1833 return i; // Don't allow duplicates
1834 }
1835 return DSA_AppendItem((HDSA)hDCIA, const_cast<CLSID*>(&rClsId));
1836}
#define DCIA_GetEntry(hDCIA, iItem)
Definition: utils.h:127
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
#define DSA_AppendItem(hdsa, pitem)
Definition: commctrl.h:4832
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
Definition: dsa.c:45

Referenced by DCIA_AddShellExSubkey().

◆ DCIA_AddShellExSubkey()

void DCIA_AddShellExSubkey ( HDCIA  hDCIA,
HKEY  hProgId,
PCWSTR  pszSubkey 
)

Definition at line 1838 of file utils.cpp.

1839{
1840 WCHAR szKey[200];
1841 PathCombineW(szKey, L"shellex", pszSubkey);
1842 HKEY hEnum;
1843 if (RegOpenKeyExW(hProgId, szKey, 0, KEY_READ, &hEnum) != ERROR_SUCCESS)
1844 return;
1845 for (UINT i = 0; RegEnumKeyW(hEnum, i++, szKey, _countof(szKey)) == ERROR_SUCCESS;)
1846 {
1847 CLSID clsid;
1848 if (SUCCEEDED(SHELL_GetShellExtensionRegCLSID(hEnum, szKey, &clsid)))
1849 DCIA_AddEntry(hDCIA, clsid);
1850 }
1851 RegCloseKey(hEnum);
1852}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
int DCIA_AddEntry(HDCIA hDCIA, REFCLSID rClsId)
Definition: utils.cpp:1825
const CLSID * clsid
Definition: msctf.cpp:50
#define KEY_READ
Definition: nt_native.h:1026
#define PathCombineW
Definition: pathcch.h:318
#define _countof(array)
Definition: sndvol32.h:70
HRESULT SHELL_GetShellExtensionRegCLSID(HKEY hKey, LPCWSTR KeyName, CLSID *pClsId)
Definition: propsheet.cpp:13
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CFSDropTarget::_GetEffectFromMenu().

◆ DisplayNameOfW()

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

Definition at line 422 of file utils.cpp.

428{
429 *pszBuf = UNICODE_NULL;
430 STRRET sr;
431 HRESULT hr = psf->GetDisplayNameOf(pidl, dwFlags, &sr);
432 if (FAILED(hr))
433 return hr;
434 return StrRetToBufW(&sr, pidl, pszBuf, cchBuf);
435}
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1660
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define UNICODE_NULL
_In_ UINT cchBuf
Definition: shlwapi.h:378

Referenced by SHGetNameAndFlagsW().

◆ DynamicPathCommonPrefixW()

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

Definition at line 1517 of file utils.cpp.

1521{
1522 SIZE_T cchPath1 = wcslen(lpszPath1);
1523 SIZE_T cchPath2 = wcslen(lpszPath2);
1524 LPWSTR lpszPath = strPath.GetBuffer((INT)max(cchPath1, cchPath2) + 16);
1525 INT ret = PathCommonPrefixW(lpszPath1, lpszPath2, lpszPath);
1526 strPath.ReleaseBuffer();
1527 return ret;
1528}
int WINAPI PathCommonPrefixW(const WCHAR *file1, const WCHAR *file2, WCHAR *path)
Definition: path.c:1620
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
return ret
Definition: mutex.c:146
#define max(a, b)
Definition: svc.c:63
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58

Referenced by PathIsEqualOrSubFolder().

◆ DynamicPathRemoveBackslashW()

static VOID DynamicPathRemoveBackslashW ( _Out_ CStringW strPath)
static

Definition at line 1589 of file utils.cpp.

1591{
1592 INT nLength = strPath.GetLength();
1593 if (nLength > 0 && strPath[nLength - 1] == L'\\')
1594 strPath = strPath.Left(nLength - 1);
1595}
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 1534 of file utils.cpp.

1537{
1538 HRESULT hr;
1539
1540 for (UINT cchPath = MAX_PATH;; cchPath *= 2)
1541 {
1542 LPWSTR lpszPath = strPath.GetBuffer(cchPath);
1543 if (!lpszPath)
1544 return E_OUTOFMEMORY;
1545
1546 hr = SHGetPathCchFromIDListW(pidl, lpszPath, cchPath);
1547 strPath.ReleaseBuffer();
1548
1550 break;
1551
1552 if (cchPath >= MAXUINT / 2)
1553 {
1554 hr = E_FAIL;
1555 break;
1556 }
1557 }
1558
1559 if (FAILED(hr))
1560 strPath.Empty();
1561
1562 return hr;
1563}
#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)
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437

Referenced by DynamicSHGetSpecialFolderPathW().

◆ DynamicSHGetSpecialFolderPathW()

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

Definition at line 1566 of file utils.cpp.

1571{
1572 LPITEMIDLIST pidl;
1573 HRESULT hr = SHGetSpecialFolderLocation(hwndOwner, nCSIDL, &pidl);
1574 if (SUCCEEDED(hr))
1575 {
1576 hr = DynamicSHGetPathFromIDListW(pidl, strPath);
1577 CoTaskMemFree(pidl);
1578 }
1579
1580 if (FAILED(hr))
1581 strPath.Empty();
1582 else if (bCreate)
1583 CreateDirectoryW(strPath, NULL);
1584
1585 return hr;
1586}
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:1534
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:1525
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 665 of file utils.cpp.

671{
672 TRACE("(%p, %s, %u, %p, %p)\n", hHandle, debugstr_a(lpFileName), wIndex, lpSize, lpIcon);
673
674 if (!lpFileName)
675 return 0;
676
677 CStringW strFileNameW(lpFileName);
678 return ExtractIconResInfoW(hHandle, strFileNameW, wIndex, lpSize, lpIcon);
679}
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:2824

◆ FindVerbMapEntry()

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

Definition at line 1781 of file utils.cpp.

1782{
1783 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1784 {
1785 if (pMap[i].CmdId == CmdId)
1786 return &pMap[i];
1787 }
1788 return NULL;
1789}
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 1731 of file utils.cpp.

1732{
1733 HRESULT hr = pCM->GetCommandString(Id, GCS & ~GCS_UNICODE, NULL, Buf, cchMax);
1734 if (FAILED(hr))
1735 {
1737 hr = pCM->GetCommandString(Id, GCS | GCS_UNICODE, NULL, (LPSTR)buf, _countof(buf));
1738 if (SUCCEEDED(hr))
1739 hr = SHUnicodeToAnsi(buf, Buf, cchMax) > 0 ? S_OK : E_FAIL;
1740 }
1741 return hr;
1742}
DWORD Id
UINT cchMax
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2927
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
char * LPSTR
Definition: xmlstorage.h:182

Referenced by GetDfmCmd().

◆ GetDfmCmd()

UINT GetDfmCmd ( _In_ IContextMenu pCM,
_In_ LPCSTR  verba 
)

Definition at line 1745 of file utils.cpp.

1746{
1747 CHAR buf[MAX_PATH];
1748 if (IS_INTRESOURCE(verba))
1749 {
1750 if (FAILED(GetCommandStringA(pCM, LOWORD(verba), GCS_VERB, buf, _countof(buf))))
1751 return 0;
1752 verba = buf;
1753 }
1754 return MapVerbToDfmCmd(verba); // Returns DFM_CMD_* or 0
1755}
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:1731
#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 1232 of file utils.cpp.

1240{
1241 WCHAR szBuff[20];
1242
1243 if (pSrc)
1244 *pDest = *pSrc;
1245 else
1246 dwNumberFlags = 0;
1247
1248 if (!(dwNumberFlags & FMT_USE_NUMDIGITS))
1249 {
1251 pDest->NumDigits = StrToIntW(szBuff);
1252 }
1253
1254 if (!(dwNumberFlags & FMT_USE_LEADZERO))
1255 {
1257 pDest->LeadingZero = StrToIntW(szBuff);
1258 }
1259
1260 if (!(dwNumberFlags & FMT_USE_GROUPING))
1261 {
1263 pDest->Grouping = StrToIntW(szBuff);
1264 }
1265
1266 if (!(dwNumberFlags & FMT_USE_DECIMAL))
1267 {
1268 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, pszDecimal, cchDecimal);
1269 pDest->lpDecimalSep = pszDecimal;
1270 }
1271
1272 if (!(dwNumberFlags & FMT_USE_THOUSAND))
1273 {
1274 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, pszThousand, cchThousand);
1275 pDest->lpThousandSep = pszThousand;
1276 }
1277
1278 if (!(dwNumberFlags & FMT_USE_NEGNUMBER))
1279 {
1281 pDest->NegativeOrder = StrToIntW(szBuff);
1282 }
1283}
INT WINAPI StrToIntW(LPCWSTR lpString)
Definition: string.c:407
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
#define LOCALE_USER_DEFAULT
#define FMT_USE_THOUSAND
Definition: undocshell.h:862
#define FMT_USE_GROUPING
Definition: undocshell.h:860
#define FMT_USE_NUMDIGITS
Definition: undocshell.h:858
#define FMT_USE_NEGNUMBER
Definition: undocshell.h:863
#define FMT_USE_LEADZERO
Definition: undocshell.h:859
#define FMT_USE_DECIMAL
Definition: undocshell.h:861
#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 1187 of file utils.cpp.

1191{
1192 WCHAR szBuff[40];
1193 UINT ich = 0, ichValue;
1194#if (WINVER >= _WIN32_WINNT_VISTA)
1195 BOOL bMinus = (llValue < 0);
1196
1197 if (bMinus)
1198 llValue = -llValue;
1199#endif
1200
1201 if (cchValue <= 0)
1202 return E_FAIL;
1203
1204 do
1205 {
1206 szBuff[ich++] = (WCHAR)(L'0' + (llValue % 10));
1207 llValue /= 10;
1208 } while (llValue != 0 && ich < _countof(szBuff) - 1);
1209
1210#if (WINVER >= _WIN32_WINNT_VISTA)
1211 if (bMinus && ich < _countof(szBuff))
1212 szBuff[ich++] = '-';
1213#endif
1214
1215 for (ichValue = 0; ich > 0 && ichValue < cchValue; ++ichValue)
1216 {
1217 --ich;
1218 pszValue[ichValue] = szBuff[ich];
1219 }
1220
1221 if (ichValue >= cchValue)
1222 {
1223 pszValue[cchValue - 1] = UNICODE_NULL;
1224 return E_FAIL;
1225 }
1226
1227 pszValue[ichValue] = UNICODE_NULL;
1228 return S_OK;
1229}
unsigned int BOOL
Definition: ntddk_ex.h:94
_In_opt_ LPCSTR _In_opt_ LPCSTR pszValue
Definition: shlwapi.h:783

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 1292 of file utils.cpp.

1299{
1300 INT ret;
1301 NUMBERFMTW NumFormat;
1302 WCHAR szValue[80], szDecimalSep[6], szThousandSep[6];
1303
1304 Int64ToStr(llValue, szValue, _countof(szValue));
1305
1306 if (bUseFormat)
1307 {
1308 Int64GetNumFormat(&NumFormat, pNumberFormat, dwNumberFlags,
1309 szDecimalSep, _countof(szDecimalSep),
1310 szThousandSep, _countof(szThousandSep));
1311 ret = GetNumberFormatW(LOCALE_USER_DEFAULT, 0, szValue, &NumFormat, pszOut, cchOut);
1312 if (ret)
1313 --ret;
1314 return ret;
1315 }
1316
1317 if (FAILED(StringCchCopyW(pszOut, cchOut, szValue)))
1318 return 0;
1319
1320 return lstrlenW(pszOut);
1321}
#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:1232
static HRESULT Int64ToStr(_In_ LONGLONG llValue, _Out_writes_(cchValue) LPWSTR pszValue, _In_ UINT cchValue)
Definition: utils.cpp:1187
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 1680 of file utils.cpp.

1687{
1688 if (!pEC)
1689 return E_INVALIDARG;
1690
1691 CScopedSetObjectWithSite site(pEC, pSite);
1692 IUnknown_InitializeCommand(pEC, pszCommandName, pPB);
1693
1695 if (pSIA && SUCCEEDED(pEC->QueryInterface(IID_PPV_ARG(IObjectWithSelection, &pOWS))))
1696 pOWS->SetSelection(pSIA);
1697
1698 DWORD dwKeyState = 0, fMask = pICI ? pICI->fMask : 0;
1699 pEC->SetNoShowUI((fMask & CMIC_MASK_FLAG_NO_UI) != 0);
1700 pEC->SetShowWindow(pICI ? pICI->nShow : SW_SHOW);
1701 if (fMask & CMIC_MASK_SHIFT_DOWN)
1702 dwKeyState |= MK_SHIFT;
1703 if (fMask & CMIC_MASK_CONTROL_DOWN)
1704 dwKeyState |= MK_CONTROL;
1705 pEC->SetKeyState(dwKeyState);
1706 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpDirectoryW)
1707 pEC->SetDirectory(pICI->lpDirectoryW);
1708 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpParametersW)
1709 pEC->SetParameters(pICI->lpParametersW);
1710 if (fMask & CMIC_MASK_PTINVOKE)
1711 pEC->SetPosition(pICI->ptInvoke);
1712
1713 return pEC->Execute();
1714}
#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:1667
static IActiveScriptSite * site
Definition: script.c:149
#define MK_SHIFT
Definition: winuser.h:2405
#define MK_CONTROL
Definition: winuser.h:2406
#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 1717 of file utils.cpp.

1724{
1726 HRESULT hr = SHCreateShellItemArrayFromDataObject(pDO, IID_PPV_ARG(IShellItemArray, &pSIA));
1727 return SUCCEEDED(hr) ? InvokeIExecuteCommand(pEC, pszCommandName, pPB, pSIA, pICI, pSite) : hr;
1728}
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:1680

Referenced by CDefaultContextMenu::InvokeRegVerb().

◆ IsShutdownAllowed()

BOOL IsShutdownAllowed ( VOID  )

Definition at line 832 of file utils.cpp.

833{
835}
EXTERN_C BOOL WINAPI SHTestTokenPrivilegeW(_In_opt_ HANDLE hToken, _In_ LPCWSTR lpName)
Definition: utils.cpp:776
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:423

Referenced by IsSuspendAllowed().

◆ IsSuspendAllowed()

BOOL WINAPI IsSuspendAllowed ( VOID  )

Definition at line 840 of file utils.cpp.

841{
842 TRACE("()\n");
844}
BOOL IsShutdownAllowed(VOID)
Definition: utils.cpp:832
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID)
Definition: powrprof.c:713

◆ IUnknown_InitializeCommand()

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

Definition at line 1667 of file utils.cpp.

1671{
1672 HRESULT hr;
1674 if (SUCCEEDED(hr = pUnk->QueryInterface(IID_PPV_ARG(IInitializeCommand, &pIC))))
1675 hr = pIC->Initialize(pszCommandName, pPB);
1676 return hr;
1677}
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 1330 of file utils.cpp.

1337{
1338 return Int64ToString(pLargeInt->QuadPart, pszOut, cchOut, bUseFormat,
1339 pNumberFormat, dwNumberFlags);
1340}
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:1292

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:2664
_In_opt_ LPSTR _In_opt_ LPSTR _In_ DWORD _In_ DWORD _Out_opt_ PHANDLE phToken
Definition: winbase.h:2469
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
HANDLE WINAPI GetCurrentThread(void)
Definition: proc.c:1148
#define ERROR_NO_TOKEN
Definition: winerror.h:911

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:4265
void WINAPI PathRemoveExtensionW(WCHAR *path)
Definition: path.c:1946
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:195
LPCWSTR szPath
Definition: env.c:37

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 1602 of file utils.cpp.

1605{
1606 CStringW strCommon, strPath1;
1607
1608 TRACE("(%s %s)\n", debugstr_w(pszPath1OrCSIDL), debugstr_w(pszPath2));
1609
1610 if (IS_INTRESOURCE(pszPath1OrCSIDL))
1611 {
1613 NULL, strPath1, LOWORD(pszPath1OrCSIDL) | CSIDL_FLAG_DONT_VERIFY, FALSE);
1614 }
1615 else
1616 {
1617 strPath1 = pszPath1OrCSIDL;
1618 }
1619
1621
1622 if (!DynamicPathCommonPrefixW(strPath1, pszPath2, strCommon))
1623 return FALSE;
1624
1625 return strPath1.CompareNoCase(strCommon) == 0;
1626}
int CompareNoCase(_In_z_ PCXSTR psz) const
Definition: cstringt.h:743
static VOID DynamicPathRemoveBackslashW(_Out_ CStringW &strPath)
Definition: utils.cpp:1589
static INT DynamicPathCommonPrefixW(_In_ LPCWSTR lpszPath1, _In_ LPCWSTR lpszPath2, _Out_ CStringW &strPath)
Definition: utils.cpp:1517
static HRESULT DynamicSHGetSpecialFolderPathW(_In_ HWND hwndOwner, _Out_ CStringW &strPath, _In_ INT nCSIDL, _In_ BOOL bCreate)
Definition: utils.cpp:1566
#define CSIDL_FLAG_DONT_VERIFY
Definition: shlobj.h:2240

Referenced by PathIsTemporaryW(), and START_TEST().

◆ PathIsSlowA()

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

Definition at line 651 of file utils.cpp.

654{
655 TRACE("(%s, 0x%X)\n", debugstr_a(pszFile), dwAttr);
656 CStringW strFileW(pszFile);
657 return PathIsSlowW(strFileW, dwAttr);
658}
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:2221
#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 360 of file utils.cpp.

365{
366 return SHBindToObjectEx(psf, pidl, NULL, riid, ppvObj);
367}
HRESULT SHBindToObjectEx(_In_opt_ IShellFolder *pShellFolder, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:327
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 327 of file utils.cpp.

333{
334 CComPtr<IShellFolder> psfDesktop;
335
336 *ppvObj = NULL;
337
338 if (!pShellFolder)
339 {
340 SHGetDesktopFolder(&psfDesktop);
341 if (!psfDesktop)
342 return E_FAIL;
343
344 pShellFolder = psfDesktop;
345 }
346
347 HRESULT hr;
348 if (_ILIsDesktop(pidl))
349 hr = pShellFolder->QueryInterface(riid, ppvObj);
350 else
351 hr = pShellFolder->BindToObject(pidl, pBindCtx, riid, ppvObj);
352
353 if (SUCCEEDED(hr) && !*ppvObj)
354 hr = E_FAIL;
355
356 return hr;
357}
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 484 of file utils.cpp.

485{
487 if (FAILED(hr))
489 return hr;
490}
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 893 of file utils.cpp.

894{
896}
#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

◆ SHELL32_AliasTranslatePidl()

EXTERN_C HRESULT SHELL32_AliasTranslatePidl ( _In_ LPCITEMIDLIST  pidl,
_Out_ LPITEMIDLIST ppidlNew,
_In_ DWORD  dwFlags 
)

Translate a PIDL to an "alias" PIDL.

Definition at line 2185 of file utils.cpp.

2189{
2190 return SHELL32_ReparentAsAliasPidl(NULL, NULL, pidl, ppidlNew, dwFlags) ? S_OK : E_FAIL;
2191}
EXTERN_C BOOL SHELL32_ReparentAsAliasPidl(_In_opt_ HWND hwnd, _In_opt_ HANDLE hToken, _In_ LPCITEMIDLIST pidlTarget, _Out_ LPITEMIDLIST *ppidlNew, _In_ DWORD dwFlags)
Translate a PIDL to an "alias" PIDL.
Definition: utils.cpp:2124

Referenced by CreateNotificationParamAndSend(), CDesktopFolder::ParseDisplayName(), and SHLogILFromFSIL().

◆ SHELL32_ReparentAsAliasPidl()

EXTERN_C BOOL SHELL32_ReparentAsAliasPidl ( _In_opt_ HWND  hwnd,
_In_opt_ HANDLE  hToken,
_In_ LPCITEMIDLIST  pidlTarget,
_Out_ LPITEMIDLIST ppidlNew,
_In_ DWORD  dwFlags 
)

Translate a PIDL to an "alias" PIDL.

Definition at line 2124 of file utils.cpp.

2130{
2131 if (!pidlTarget || !ppidlNew)
2132 return FALSE;
2133
2134 *ppidlNew = NULL;
2135
2136 for (SIZE_T iEntry = 0; iEntry < _countof(g_AliasTable); ++iEntry)
2137 {
2138 const ALIAS_MAPPING *pEntry = &g_AliasTable[iEntry];
2139
2140 if (!(dwFlags & pEntry->bFlagMask))
2141 continue;
2142
2143 // Get the source root PIDL
2144 LPITEMIDLIST pidlSrcRoot = NULL;
2145 HRESULT hr = SHGetFolderLocation(hwnd, pEntry->nCsidlSrc, hToken, 0, &pidlSrcRoot);
2146 if (FAILED(hr))
2147 continue;
2148
2149 // Check whether the input pidlTarget is under the source folder.
2150 // If it matches, ILFindChild returns the relative PIDL in the pidlTarget.
2151 LPCITEMIDLIST pidlRelative = ILFindChild(pidlSrcRoot, pidlTarget);
2152 if (!pidlRelative) // Not found?
2153 {
2154 ILFree(pidlSrcRoot);
2155 continue;
2156 }
2157
2158 // Found. Get the destination root PIDL
2159 LPITEMIDLIST pidlDestRoot = NULL;
2160 hr = SHGetFolderLocation(hwnd, pEntry->nCsidlDest, hToken, 0, &pidlDestRoot);
2161 if (SUCCEEDED(hr))
2162 {
2163 // Create a new PIDL by combining the destination root PIDL and the relative PIDL
2164 *ppidlNew = ILCombine(pidlDestRoot, pidlRelative);
2165 if (*ppidlNew)
2166 {
2167 // Manipulate specific flags in the PIDL if necessary
2168 if (pEntry->bCommonDesktop && (*ppidlNew)->mkid.cb >= 3)
2169 {
2170 (*ppidlNew)->mkid.abID[0] |= (PT_FS | PT_FS_COMMON_FLAG);
2171 }
2172 }
2173 ILFree(pidlDestRoot);
2174 }
2175
2176 ILFree(pidlSrcRoot);
2177 break; // A match was found, so exit the loop
2178 }
2179
2180 return (*ppidlNew != NULL);
2181}
static const ALIAS_MAPPING g_AliasTable[]
PIDL alias table.
Definition: utils.cpp:2094
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3277
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
#define PT_FS
Definition: lnktool.cpp:40
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
PUIDLIST_RELATIVE WINAPI ILFindChild(PIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
Definition: pidl.c:751
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42

Referenced by SHELL32_AliasTranslatePidl().

◆ 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 2006 of file utils.cpp.

2011{
2012 if (!pszDescription || !*pszDescription)
2013 return E_FAIL;
2014
2015 PCWSTR pszFormat = (SHRestricted(REST_ALLOWCOMMENTTOGGLE) ? L"%2 (%1)" : L"%1 (%2)");
2016 PCWSTR args[] = { pszDescription , SHELL_SkipServerSlashes(pszServerName) };
2018 pszFormat, 0, 0, pszName, cchNameMax, (va_list *)args) ? S_OK : E_FAIL);
2019}
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
char * va_list
Definition: vadefs.h:50
static PCWSTR SHELL_SkipServerSlashes(_In_ PCWSTR pszPath)
Definition: utils.cpp:1941
@ REST_ALLOWCOMMENTTOGGLE
Definition: shlobj.h:1876
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:398
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:401

Referenced by SHGetComputerDisplayNameW().

◆ SHELL_CacheComputerDescription()

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

Definition at line 1969 of file utils.cpp.

1972{
1973 if (!pszDesc)
1974 return;
1975
1976 SIZE_T cbDesc = (wcslen(pszDesc) + 1) * sizeof(WCHAR);
1978 SHELL_SkipServerSlashes(pszServerName), REG_SZ, pszDesc, (DWORD)cbDesc);
1979}
#define COMPUTER_DESCRIPTIONS_KEY
Definition: utils.cpp:1951
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 1815 of file utils.cpp.

1816{
1820 return hr;
1821 initIcon->SetNormalIcon(swShell32Name, IconIndex);
1822 return initIcon->QueryInterface(riid, ppvOut);
1823}
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 396 of file utils.cpp.

401{
402 HRESULT hr;
403 CComPtr<IShellFolder> psfRoot;
404 if (!psf)
405 {
406 PCUITEMID_CHILD pidlChild;
407 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfRoot), &pidlChild);
408 if (FAILED(hr))
409 return hr;
410 psf = psfRoot;
411 pidl = pidlChild;
412 }
413 STRRET sr;
414 hr = psf->GetDisplayNameOf((PCUITEMID_CHILD)pidl, Flags, &sr);
415 return SUCCEEDED(hr) ? StrRetToStrW(&sr, pidl, ppStr) : hr;
416}
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1761
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1504
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 310 of file utils.cpp.

311{
313
314 switch (code)
315 {
318 case ERROR_CANCELLED:
319 return TRUE;
320
321 default:
323 }
324}
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
Definition: inflate.c:139
#define ERROR_BAD_NETPATH
Definition: winerror.h:267
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228
#define HRESULT_CODE(hr)
Definition: winerror.h:188
#define ERROR_BAD_NET_NAME
Definition: winerror.h:281

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 1956 of file utils.cpp.

1960{
1961 cchDescMax *= sizeof(WCHAR);
1963 SHELL_SkipServerSlashes(pszServerName), NULL, pszDesc, &cchDescMax);
1964 return HRESULT_FROM_WIN32(error);
1965}
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 1792 of file utils.cpp.

1793{
1794 const CMVERBMAP* pEntry;
1795 switch (uFlags | GCS_UNICODE)
1796 {
1797 case GCS_VALIDATEW:
1798 case GCS_VERBW:
1799 pEntry = FindVerbMapEntry(CmdId, pMap);
1800 if ((uFlags | GCS_UNICODE) == GCS_VERBW)
1801 {
1802 if (!pEntry)
1803 return E_INVALIDARG;
1804 else if (uFlags & GCS_UNICODE)
1805 return SHAnsiToUnicode(pEntry->Verb, (LPWSTR)Buf, cchBuf) ? S_OK : E_FAIL;
1806 else
1807 return StringCchCopyA(Buf, cchBuf, pEntry->Verb);
1808 }
1809 return pEntry ? S_OK : S_FALSE; // GCS_VALIDATE
1810 }
1811 return E_NOTIMPL;
1812}
#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:1781
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2803
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
#define S_FALSE
Definition: winerror.h:3451

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 1983 of file utils.cpp.

1987{
1989 NET_API_STATUS error = NetServerGetInfo(pszServerName, 101, (PBYTE*)&bufptr);
1992 return hr;
1993
1994 PCWSTR comment = bufptr->sv101_comment;
1995 if (comment && comment[0])
1996 StringCchCopyW(pszDesc, cchDescMax, comment);
1997 else
1998 hr = E_FAIL;
1999
2001 return hr;
2002}
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 472 of file utils.cpp.

473{
474 IShellLink *pSL;
475 HRESULT hr = SHBindToObject(NULL, pidl, IID_PPV_ARG(IShellLink, &pSL));
476 if (SUCCEEDED(hr))
477 {
478 hr = pSL->GetIDList(ppidl); // Note: Returns S_FALSE if no target pidl
479 pSL->Release();
480 }
481 return hr;
482}
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:360

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 370 of file utils.cpp.

374{
375 if (!ppvObj)
376 return E_INVALIDARG;
377 *ppvObj = NULL;
378 IShellFolder *psf;
379 PCUITEMID_CHILD pidlChild;
380 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
381 if (SUCCEEDED(hr))
382 {
383 hr = psf->GetUIObjectOf(hWnd, 1, &pidlChild, riid, NULL, ppvObj);
384 psf->Release();
385 if (SUCCEEDED(hr))
386 {
387 if (*ppvObj)
388 return hr;
389 hr = E_FAIL;
390 }
391 }
392 return hr;
393}
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 1758 of file utils.cpp.

1759{
1760 LPCSTR pVerbA = pICI->lpVerb;
1761 CHAR buf[MAX_PATH];
1762 LPCMINVOKECOMMANDINFOEX pICIX = (LPCMINVOKECOMMANDINFOEX)pICI;
1763 if (IsUnicode(*pICIX) && !IS_INTRESOURCE(pICIX->lpVerbW))
1764 {
1765 if (SHUnicodeToAnsi(pICIX->lpVerbW, buf, _countof(buf)))
1766 pVerbA = buf;
1767 }
1768
1769 if (IS_INTRESOURCE(pVerbA))
1770 return LOWORD(pVerbA);
1771 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1772 {
1773 assert(SUCCEEDED((int)(pMap[i].CmdId))); // The id must be >= 0 and ideally in the 0..0x7fff range
1774 if (!lstrcmpiA(pMap[i].Verb, pVerbA) && pVerbA[0])
1775 return pMap[i].CmdId;
1776 }
1777 return E_FAIL;
1778}
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4227
#define assert(_expr)
Definition: assert.h:32
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 900 of file utils.cpp.

906{
907 DWORD dwType, dwCount, cbSize = sizeof(dwCount);
908 DWORD error = SHQueryValueExW(hKey, L"MessageCount", 0, &dwType, &dwCount, &cbSize);
909 if (error)
910 return error;
911 if (pdwCount && dwType == REG_DWORD)
912 *pdwCount = dwCount;
913
914 FILETIME FileTime;
915 cbSize = sizeof(FileTime);
916 error = SHQueryValueExW(hKey, L"TimeStamp", 0, &dwType, &FileTime, &cbSize);
917 if (error)
918 return error;
919 if (pFileTime && dwType == REG_BINARY)
920 *pFileTime = FileTime;
921
922 WCHAR szName[2 * MAX_PATH];
923 cbSize = sizeof(szName);
924 error = SHQueryValueExW(hKey, L"Application", 0, &dwType, szName, &cbSize);
925 if (error)
926 return error;
927
928 if (pszShellExecuteCommand && dwType == REG_SZ &&
929 FAILED(StringCchCopyW(pszShellExecuteCommand, cchShellExecuteCommand, szName)))
930 {
932 }
933
934 return ERROR_SUCCESS;
935}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h: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:1499
static const WCHAR szName[]
Definition: powrprof.c:45
#define REG_DWORD
Definition: sdbapi.c:615

Referenced by SHGetUnreadMailCountW().

◆ SHELL_SkipServerSlashes()

static PCWSTR SHELL_SkipServerSlashes ( _In_ PCWSTR  pszPath)
static

Definition at line 1941 of file utils.cpp.

1943{
1944 PCWSTR pch;
1945 for (pch = pszPath; *pch == L'\\'; ++pch)
1946 ;
1947 return pch;
1948}

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

◆ SHEnumerateUnreadMailAccountsW()

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

Definition at line 1127 of file utils.cpp.

1132{
1133 if (!hKeyUser)
1134 hKeyUser = HKEY_CURRENT_USER;
1135
1136 HKEY hKey;
1137 LSTATUS error = RegOpenKeyExW(hKeyUser,
1138 L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
1140 if (error)
1141 return HRESULT_FROM_WIN32(error);
1142
1143 FILETIME FileTime;
1144 error = RegEnumKeyExW(hKey, dwIndex, pszMailAddress, (PDWORD)&cchMailAddress, NULL, NULL,
1145 NULL, &FileTime);
1146 if (error)
1147 *pszMailAddress = UNICODE_NULL;
1148
1150 return error ? HRESULT_FROM_WIN32(error) : S_OK;
1151}
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
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:1022
DWORD * PDWORD
Definition: pedump.c:68

Referenced by START_TEST().

◆ SheRemoveQuotesA()

EXTERN_C LPSTR WINAPI SheRemoveQuotesA ( LPSTR  psz)

Definition at line 1077 of file utils.cpp.

1078{
1079 PCHAR pch;
1080
1081 if (*psz == '"')
1082 {
1083 for (pch = psz + 1; *pch && *pch != '"'; ++pch)
1084 {
1085 *(pch - 1) = *pch;
1086 }
1087
1088 if (*pch == '"')
1089 *(pch - 1) = ANSI_NULL;
1090 }
1091
1092 return psz;
1093}
#define ANSI_NULL
char * PCHAR
Definition: typedefs.h:51

◆ SheRemoveQuotesW()

EXTERN_C LPWSTR WINAPI SheRemoveQuotesW ( LPWSTR  psz)

Definition at line 1102 of file utils.cpp.

1103{
1104 PWCHAR pch;
1105
1106 if (*psz == L'"')
1107 {
1108 for (pch = psz + 1; *pch && *pch != L'"'; ++pch)
1109 {
1110 *(pch - 1) = *pch;
1111 }
1112
1113 if (*pch == L'"')
1114 *(pch - 1) = UNICODE_NULL;
1115 }
1116
1117 return psz;
1118}
uint16_t * PWCHAR
Definition: typedefs.h:56

◆ SHFindComputer()

EXTERN_C BOOL WINAPI SHFindComputer ( LPCITEMIDLIST  pidlRoot,
LPCITEMIDLIST  pidlSavedSearch 
)

Definition at line 1161 of file utils.cpp.

1162{
1163 UNREFERENCED_PARAMETER(pidlRoot);
1164 UNREFERENCED_PARAMETER(pidlSavedSearch);
1165
1166 TRACE("%p %p\n", pidlRoot, pidlSavedSearch);
1167
1168 IContextMenu *pCM;
1169 HRESULT hr = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1170 IID_IContextMenu, (void **)&pCM);
1171 if (FAILED(hr))
1172 {
1173 ERR("0x%08X\n", hr);
1174 return hr;
1175 }
1176
1177 CMINVOKECOMMANDINFO InvokeInfo = { sizeof(InvokeInfo) };
1178 InvokeInfo.lpParameters = "{996E1EB1-B524-11D1-9120-00A0C98BA67D}";
1179 InvokeInfo.nShow = SW_SHOWNORMAL;
1180 hr = pCM->InvokeCommand(&InvokeInfo);
1181 pCM->Release();
1182
1183 return SUCCEEDED(hr);
1184}
#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 438 of file utils.cpp.

439{
440 LPCITEMIDLIST pidlLast = pidl;
441 IShellFolder *release = NULL;
442
443 if (!psf)
444 {
445 SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast);
446 if (!psf)
447 return 0;
448 release = psf;
449 }
450
451 DWORD oldAttrs = dwAttributes;
452 if (FAILED(psf->GetAttributesOf(1, &pidlLast, &dwAttributes)))
453 dwAttributes = 0;
454 else
455 dwAttributes &= oldAttrs;
456
457 if ((dwAttributes & SFGAO_FOLDER) &&
458 (dwAttributes & SFGAO_STREAM) &&
459 !(dwAttributes & SFGAO_STORAGEANCESTOR) &&
460 (oldAttrs & SFGAO_STORAGEANCESTOR) &&
461 (SHGetObjectCompatFlags(psf, NULL) & 0x200))
462 {
463 dwAttributes &= ~(SFGAO_STREAM | SFGAO_STORAGEANCESTOR);
464 dwAttributes |= SFGAO_STORAGEANCESTOR;
465 }
466
467 if (release)
468 release->Release();
469 return dwAttributes;
470}
DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid)
Definition: ordinal.c:6499
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 2026 of file utils.cpp.

2031{
2032 WCHAR szDesc[256], szCompName[MAX_COMPUTERNAME_LENGTH + 1];
2033
2034 // If no server name is specified, retrieve the local computer name
2035 if (!pszServerName)
2036 {
2037 // Use computer name as server name
2038 DWORD cchCompName = _countof(szCompName);
2039 if (!GetComputerNameW(szCompName, &cchCompName))
2040 return E_FAIL;
2041 pszServerName = szCompName;
2042
2043 // Don't use the cache for the local machine
2045 }
2046
2047 // Get computer description from cache if necessary
2048 HRESULT hr = E_FAIL;
2049 if (!(dwFlags & SHGCDN_NOCACHE))
2050 hr = SHELL_GetCachedComputerDescription(szDesc, _countof(szDesc), pszServerName);
2051
2052 // Actually retrieve the computer description if it is not in the cache
2053 if (FAILED(hr))
2054 {
2055 hr = SHELL_GetComputerDescription(szDesc, _countof(szDesc), pszServerName);
2056 if (FAILED(hr))
2057 szDesc[0] = UNICODE_NULL;
2058
2059 // Cache the description if necessary
2060 if (!(dwFlags & SHGCDN_NOCACHE))
2061 SHELL_CacheComputerDescription(pszServerName, szDesc);
2062 }
2063
2064 // If getting the computer description failed, store the server name only
2065 if (FAILED(hr) || !szDesc[0])
2066 {
2068 return hr; // Bail out if no server name is requested
2069
2070 StringCchCopyW(pszName, cchNameMax, SHELL_SkipServerSlashes(pszServerName));
2071 return S_OK;
2072 }
2073
2074 // If no server name is requested, store the description only
2076 {
2077 StringCchCopyW(pszName, cchNameMax, szDesc);
2078 return S_OK;
2079 }
2080
2081 // Build a string like "Description (SERVERNAME)"
2082 return SHELL_BuildDisplayMachineName(pszName, cchNameMax, pszServerName, szDesc);
2083}
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:1983
static HRESULT SHELL_BuildDisplayMachineName(_Out_writes_z_(cchNameMax) PWSTR pszName, _In_ DWORD cchNameMax, _In_ PCWSTR pszServerName, _In_ PCWSTR pszDescription)
Definition: utils.cpp:2006
static VOID SHELL_CacheComputerDescription(_In_ PCWSTR pszServerName, _In_ PCWSTR pszDesc)
Definition: utils.cpp:1969
static HRESULT SHELL_GetCachedComputerDescription(_Out_writes_z_(cchDescMax) PWSTR pszDesc, _In_ DWORD cchDescMax, _In_ PCWSTR pszServerName)
Definition: utils.cpp:1956
#define SHGCDN_NOSERVERNAME
Definition: undocshell.h:1018
#define SHGCDN_NOCACHE
Definition: undocshell.h:1017
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:267

◆ SHGetNameAndFlagsW()

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

Definition at line 493 of file utils.cpp.

499{
500 if (pszText)
501 *pszText = UNICODE_NULL;
502
504
505 CComPtr<IShellFolder> psfFolder;
506 LPCITEMIDLIST ppidlLast;
507 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &ppidlLast);
508 if (SUCCEEDED(hr))
509 {
510 if (pszText)
511 hr = DisplayNameOfW(psfFolder, ppidlLast, dwFlags, pszText, cchBuf);
512
513 if (SUCCEEDED(hr))
514 {
515 if (pdwAttributes)
516 *pdwAttributes = SHGetAttributes(psfFolder, ppidlLast, *pdwAttributes);
517 }
518 }
519
520 if (SUCCEEDED(hrCoInit))
522
523 return hr;
524}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:438
EXTERN_C HRESULT WINAPI DisplayNameOfW(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: utils.cpp:422
HRESULT SHCoInitializeAnyApartment(VOID)
Definition: utils.cpp:484

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 1633 of file utils.cpp.

1637{
1638 HRESULT hr;
1639 STRRET strret;
1641 SFGAOF attrs;
1642
1643 *ppidlReal = NULL;
1644
1645 hr = IShellFolder_GetDisplayNameOf(psf, pidlSimple, SHGDN_INFOLDER | SHGDN_FORPARSING,
1646 &strret, 0);
1648 return hr;
1649
1650 hr = StrRetToBufW(&strret, pidlSimple, szPath, _countof(szPath));
1652 return hr;
1653
1654 attrs = SFGAO_FILESYSTEM;
1655 hr = psf->GetAttributesOf(1, &pidlSimple, &attrs);
1656 if (SUCCEEDED(hr) && !(attrs & SFGAO_FILESYSTEM))
1657 return SHILClone(pidlSimple, ppidlReal);
1658
1659 hr = IShellFolder_ParseDisplayName(psf, NULL, NULL, szPath, NULL, ppidlReal, NULL);
1660 if (hr == E_INVALIDARG || hr == E_NOTIMPL)
1661 return SHILClone(pidlSimple, ppidlReal);
1662
1663 return hr;
1664}
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 851 of file utils.cpp.

852{
855 HRESULT hr;
856 CStringW strShellStyle;
857
858 TRACE("SHGetShellStyleHInstance called\n");
859
860 /* First, attempt to load the shellstyle dll from the current active theme */
862 if (FAILED(hr))
863 goto DoDefault;
864
865 /* Strip the theme filename */
867
868 strShellStyle = szPath;
869 strShellStyle += L"\\Shell\\";
870 strShellStyle += szColorName;
871 strShellStyle += L"\\ShellStyle.dll";
872
874 if (hInst)
875 return hInst;
876
877 /* Otherwise, use the version stored in the System32 directory */
878DoDefault:
879 if (!ExpandEnvironmentStringsW(L"%SystemRoot%\\System32\\ShellStyle.dll",
881 {
882 ERR("Expand failed\n");
883 return NULL;
884 }
886}
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:520
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
BOOL WINAPI PathRemoveFileSpecW(WCHAR *path)
Definition: path.c:1145
HRESULT WINAPI GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars)
Definition: system.c:980
static const WCHAR szColorName[]
Definition: system.c:42
HINSTANCE hInst
Definition: dxdiag.c:13
#define LOAD_LIBRARY_AS_DATAFILE
Definition: winbase.h:338

◆ 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 944 of file utils.cpp.

951{
953 HKEY hKey;
954
955 if (!hKeyUser)
956 hKeyUser = HKEY_CURRENT_USER;
957
958 if (pszMailAddress)
959 {
960 CStringW strKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail";
961 strKey += L'\\';
962 strKey += pszMailAddress;
963
964 error = RegOpenKeyExW(hKeyUser, strKey, 0, KEY_QUERY_VALUE, &hKey);
965 if (error)
967
968 error = SHELL_ReadSingleUnreadMailCount(hKey, pdwCount, pFileTime,
969 pszShellExecuteCommand, cchShellExecuteCommand);
970 }
971 else
972 {
973 if (pszShellExecuteCommand || cchShellExecuteCommand)
974 return E_INVALIDARG;
975
976 *pdwCount = 0;
977
978 error = RegOpenKeyExW(hKeyUser, L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
980 if (error)
982
983 for (DWORD dwIndex = 0; !error; ++dwIndex)
984 {
985 WCHAR Name[2 * MAX_PATH];
987 FILETIME LastWritten;
988 error = RegEnumKeyExW(hKey, dwIndex, Name, &cchName, NULL, NULL, NULL, &LastWritten);
989 if (error)
990 break;
991
992 HKEY hSubKey;
993 error = RegOpenKeyExW(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey);
994 if (error)
995 break;
996
997 FILETIME FileTime;
998 DWORD dwCount;
999 error = SHELL_ReadSingleUnreadMailCount(hSubKey, &dwCount, &FileTime, NULL, 0);
1000 if (!error && (!pFileTime || CompareFileTime(&FileTime, pFileTime) >= 0))
1001 *pdwCount += dwCount;
1002
1003 RegCloseKey(hSubKey);
1004 }
1005
1008 }
1009
1011
1012 return error ? HRESULT_FROM_WIN32(error) : S_OK;
1013}
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:900
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2521

Referenced by START_TEST().

◆ SHGetUserDisplayName()

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

Definition at line 1885 of file utils.cpp.

1888{
1889 if (!pName || !puSize)
1890 return E_INVALIDARG;
1891
1892 if (GetUserNameExW(NameDisplay, pName, puSize))
1893 return S_OK;
1894
1895 LONG error = GetLastError(); // for ERROR_NONE_MAPPED
1897
1898 WCHAR UserName[MAX_PATH];
1899 DWORD cchUserName = _countof(UserName);
1900 if (!GetUserNameW(UserName, &cchUserName))
1902
1903 // Was the user name not available in the specified format (NameDisplay)?
1904 if (error == ERROR_NONE_MAPPED)
1905 {
1906 // Try to get the user name by using Network API
1907 PUSER_INFO_2 UserInfo;
1908 DWORD NetError = NetUserGetInfo(NULL, UserName, 2, (PBYTE*)&UserInfo);
1909 if (NetError)
1910 {
1911 hr = HRESULT_FROM_WIN32(NetError);
1912 }
1913 else
1914 {
1915 if (UserInfo->usri2_full_name)
1916 {
1917 hr = StringCchCopyW(pName, *puSize, UserInfo->usri2_full_name);
1918 if (SUCCEEDED(hr))
1919 {
1920 // Include the NUL-terminator
1921 *puSize = lstrlenW(UserInfo->usri2_full_name) + 1;
1922 }
1923 }
1924
1925 NetApiBufferFree(UserInfo);
1926 }
1927 }
1928
1929 if (FAILED(hr))
1930 {
1931 hr = StringCchCopyW(pName, *puSize, UserName);
1932 if (SUCCEEDED(hr))
1933 *puSize = cchUserName;
1934 }
1935
1936 return hr;
1937}
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:1159

Referenced by START_TEST().

◆ SHGetUserSessionId()

EXTERN_C DWORD WINAPI SHGetUserSessionId ( _In_opt_ HANDLE  hToken)

Definition at line 706 of file utils.cpp.

707{
708 DWORD dwSessionId, dwLength;
709 BOOL bOpenToken = FALSE;
710
711 TRACE("%p\n", hToken);
712
713 if (!hToken)
714 bOpenToken = SHOpenEffectiveToken(&hToken);
715
716 if (!hToken ||
717 !GetTokenInformation(hToken, TokenSessionId, &dwSessionId, sizeof(dwSessionId), &dwLength))
718 {
719 dwSessionId = 0;
720 }
721
722 if (bOpenToken)
723 CloseHandle(hToken);
724
725 return dwSessionId;
726}
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:697
@ 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}

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 733 of file utils.cpp.

737{
738 TRACE("(%s %p %p)\n", debugstr_w(pszName), fn, lParam);
739
740 if (!pszName || !fn)
741 return E_INVALIDARG;
742
743 HANDLE hToken = NULL;
744 TOKEN_PRIVILEGES NewPriv, PrevPriv;
745 BOOL bAdjusted = FALSE;
746
747 if (SHOpenEffectiveToken(&hToken) &&
748 ::LookupPrivilegeValueW(NULL, pszName, &NewPriv.Privileges[0].Luid))
749 {
750 NewPriv.PrivilegeCount = 1;
752
753 DWORD dwReturnSize;
754 bAdjusted = ::AdjustTokenPrivileges(hToken, FALSE, &NewPriv,
755 sizeof(PrevPriv), &PrevPriv, &dwReturnSize);
756 }
757
758 HRESULT hr = fn(lParam);
759
760 if (bAdjusted)
761 ::AdjustTokenPrivileges(hToken, FALSE, &PrevPriv, 0, NULL, NULL);
762
763 if (hToken)
764 ::CloseHandle(hToken);
765
766 return hr;
767}
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 1861 of file utils.cpp.

1864{
1865 struct CUnknownVtbl
1866 {
1870 };
1871 struct CUnknown { CUnknownVtbl *lpVtbl; };
1872 const CUnknown *punk = reinterpret_cast<const CUnknown *>(pv);
1873 return !punk || IsBadReadPtr(punk, sizeof(punk->lpVtbl)) ||
1874 IsBadReadPtr(punk->lpVtbl, ucb) ||
1875 IsBadCodePtr((FARPROC)punk->lpVtbl->Release);
1876}
#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:83
#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 293 of file utils.cpp.

294{
297
298 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam((LPWSTR)STR_FILE_SYS_BIND_DATA, &punk)))
299 return S_FALSE;
300
302 return S_FALSE;
303
304 if (pFindData)
305 pBindData->GetFindData(pFindData);
306
307 return S_OK;
308}

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

◆ SHOpenEffectiveToken()

EXTERN_C BOOL WINAPI SHOpenEffectiveToken ( _Out_ LPHANDLE  phToken)

Definition at line 697 of file utils.cpp.

698{
699 TRACE("%p\n", phToken);
701}
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 686 of file utils.cpp.

689{
690 TRACE("(%lu, %p)\n", dwNumber, pszBuffer);
691 return StrFormatByteSizeW(dwNumber, pszBuffer, 0x8FFF);
692}
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2524

◆ SHSetFolderPathA()

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

Definition at line 633 of file utils.cpp.

638{
639 TRACE("(%d, %p, 0x%X, %s)\n", csidl, hToken, dwFlags, debugstr_a(pszPath));
640 CStringW strPathW(pszPath);
641 return SHSetFolderPathW(csidl, hToken, dwFlags, strPathW);
642}
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 1022 of file utils.cpp.

1026{
1027 CString strKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\";
1028 strKey += pszMailAddress;
1029
1030 HKEY hKey;
1031 DWORD dwDisposition;
1033 &hKey, &dwDisposition);
1034 if (error)
1035 return HRESULT_FROM_WIN32(error);
1036
1037 error = RegSetValueExW(hKey, L"MessageCount", 0, REG_DWORD, (PBYTE)&dwCount, sizeof(dwCount));
1038 if (error)
1039 {
1041 return HRESULT_FROM_WIN32(error);
1042 }
1043
1044 FILETIME FileTime;
1045 GetSystemTimeAsFileTime(&FileTime);
1046
1047 error = RegSetValueExW(hKey, L"TimeStamp", 0, REG_BINARY, (PBYTE)&FileTime, sizeof(FileTime));
1048 if (error)
1049 {
1051 return HRESULT_FROM_WIN32(error);
1052 }
1053
1054 WCHAR szBuff[2 * MAX_PATH];
1055 if (!PathUnExpandEnvStringsW(pszShellExecuteCommand, szBuff, _countof(szBuff)))
1056 {
1057 HRESULT hr = StringCchCopyW(szBuff, _countof(szBuff), pszShellExecuteCommand);
1059 {
1061 return hr;
1062 }
1063 }
1064
1065 DWORD cbValue = (lstrlenW(szBuff) + 1) * sizeof(WCHAR);
1066 error = RegSetValueExW(hKey, L"Application", 0, REG_SZ, (PBYTE)szBuff, cbValue);
1067
1069 return (error ? HRESULT_FROM_WIN32(error) : S_OK);
1070}
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:2705
#define KEY_SET_VALUE
Definition: nt_native.h:1020

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:1625

Referenced by START_TEST().

◆ SHSkipJunctionBinding()

BOOL SHSkipJunctionBinding ( _In_ IBindCtx pbc,
_In_ CLSID pclsid 
)

Definition at line 281 of file utils.cpp.

282{
283 if (!pbc)
284 return FALSE;
285
286 BIND_OPTS BindOps = { sizeof(BindOps) };
287 if (SUCCEEDED(pbc->GetBindOptions(&BindOps)) && BindOps.grfFlags == OLECONTF_LINKS)
288 return TRUE;
289
290 return pclsid && SHSkipJunction(pbc, pclsid);
291}
BOOL WINAPI SHSkipJunction(IBindCtx *pbc, const CLSID *pclsid)
Definition: ordinal.c:4779

Referenced by CDesktopFolder::_ParseDisplayNameByParent().

◆ SHStartNetConnectionDialogA()

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

Definition at line 1493 of file utils.cpp.

1497{
1498 LPCWSTR pszRemoteNameW = NULL;
1499 CStringW strRemoteNameW;
1500
1501 TRACE("(%p, %s, %lu)\n", hwnd, debugstr_a(pszRemoteName), dwType);
1502
1503 if (pszRemoteName)
1504 {
1505 strRemoteNameW = pszRemoteName;
1506 pszRemoteNameW = strRemoteNameW;
1507 }
1508
1509 return SHStartNetConnectionDialogW(hwnd, pszRemoteNameW, dwType);
1510}
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 776 of file utils.cpp.

779{
780 LUID Luid;
782 PTOKEN_PRIVILEGES pTokenPriv;
783 HANDLE hNewToken = NULL;
784 BOOL ret = FALSE;
785
786 TRACE("(%p, %s)\n", hToken, debugstr_w(lpName));
787
788 if (!lpName)
789 return FALSE;
790
791 if (!hToken)
792 {
793 if (!SHOpenEffectiveToken(&hNewToken))
794 goto Quit;
795
796 if (!hNewToken)
797 return FALSE;
798
799 hToken = hNewToken;
800 }
801
802 if (!LookupPrivilegeValueW(NULL, lpName, &Luid))
803 return FALSE;
804
805 dwLength = 0;
807 goto Quit;
808
810 if (!pTokenPriv)
811 goto Quit;
812
813 if (GetTokenInformation(hToken, TokenPrivileges, pTokenPriv, dwLength, &dwLength))
814 {
815 UINT iPriv, cPrivs;
816 cPrivs = pTokenPriv->PrivilegeCount;
817 for (iPriv = 0; !ret && iPriv < cPrivs; ++iPriv)
818 {
819 ret = RtlEqualLuid(&Luid, &pTokenPriv->Privileges[iPriv].Luid);
820 }
821 }
822
823 LocalFree(pTokenPriv);
824
825Quit:
826 if (hToken == hNewToken)
827 CloseHandle(hNewToken);
828
829 return ret;
830}
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define LPTR
Definition: minwinbase.h:93
_In_ LPCSTR lpName
Definition: winbase.h:2543
#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
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
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  )

Variable Documentation

◆ g_AliasTable

const ALIAS_MAPPING g_AliasTable[]
static
Initial value:
=
{
{
},
{
},
{
},
{
}
}
#define ALIAS_USER_FOLDER
Definition: shell32_main.h:119
#define ALIAS_DESKTOP
Definition: shell32_main.h:120
#define CSIDL_COMMON_DESKTOPDIRECTORY
Definition: shlobj.h:2203
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2194
#define CSIDL_PERSONAL
Definition: shlobj.h:2184
#define CSIDL_FLAG_NO_ALIAS
Definition: shlobj.h:2239
#define CSIDL_DESKTOP
Definition: shlobj.h:2179
#define CSIDL_COMMON_DOCUMENTS
Definition: shlobj.h:2224

PIDL alias table.

Definition at line 2094 of file utils.cpp.

Referenced by SHELL32_ReparentAsAliasPidl().