ReactOS 0.4.17-dev-573-g8315b8c
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)
 
static INT _SHMergePopupMenus (HMENU hMenu, HMENU hPopupMenu, UINT uIDAdjust, UINT uIDAdjustMax)
 
static HMENU SHLoadPopupMenu (HINSTANCE hInstance, UINT uMenuId)
 
EXTERN_C VOID WINAPI CDefFolderMenu_MergeMenu (_In_ HINSTANCE hInstance, _In_ UINT uMainMerge, _In_ UINT uPopupMerge, _Inout_ LPQCMINFO lpQcmInfo)
 
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)
 
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)
 
SHSTDAPI SHBindToObject (_In_opt_ IShellFolder *pShellFolder, _In_ PCUIDLIST_RELATIVE pidl, _In_opt_ IBindCtx *pBindCtx, _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 WINAPI SHSetLocalizedName (_In_ PCWSTR pszPath, _In_ PCWSTR pszResModule, _In_ INT idsRes)
 
EXTERN_C HRESULT SHELL32_AliasTranslatePidl (_In_ LPCITEMIDLIST pidl, _Out_ LPITEMIDLIST *ppidlNew, _In_ DWORD dwFlags)
 Translate a PIDL to an "alias" PIDL.
 
EXTERN_C BOOL WINAPI LinkWindow_RegisterClass (VOID)
 
EXTERN_C BOOL WINAPI LinkWindow_UnregisterClass (_In_ DWORD dwUnused)
 

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 2009 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:2115
#define PATH_CHAR_CLASS_SPACE
Definition: path.c:2114
#define PATH_CHAR_CLASS_SEMICOLON
Definition: path.c:2112
#define PATH_CHAR_CLASS_COMMA
Definition: path.c:2113
#define PATH_CHAR_CLASS_DOT
Definition: path.c:2109

Definition at line 221 of file utils.cpp.

Typedef Documentation

◆ ALIAS_MAPPING

◆ PALIAS_MAPPING

Function Documentation

◆ _SHMergePopupMenus()

static INT _SHMergePopupMenus ( HMENU  hMenu,
HMENU  hPopupMenu,
UINT  uIDAdjust,
UINT  uIDAdjustMax 
)
static

Definition at line 35 of file utils.cpp.

36{
37 INT maxID = uIDAdjust;
38 const INT itemCount = GetMenuItemCount(hPopupMenu);
39 if (itemCount == -1)
40 return maxID;
41
42 MENUITEMINFOW mii = { sizeof(mii), MIIM_ID | MIIM_SUBMENU };
43 for (INT i = itemCount - 1; i >= 0; --i)
44 {
45 if (!GetMenuItemInfoW(hPopupMenu, i, TRUE, &mii))
46 continue;
47
48 HMENU hTargetSubMenu = SHGetMenuFromID(hMenu, mii.wID);
49 if (!hTargetSubMenu)
50 continue;
51
52 INT currentMax = Shell_MergeMenus(hTargetSubMenu, mii.hSubMenu, 0,
53 uIDAdjust, uIDAdjustMax,
55 maxID = max(maxID, currentMax);
56 }
57
58 return maxID;
59}
#define TRUE
Definition: types.h:120
HMENU WINAPI SHGetMenuFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:1592
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
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2547
#define MM_ADDSEPARATOR
Definition: shlobj.h:2546
#define max(a, b)
Definition: svc.c:63
int32_t INT
Definition: typedefs.h:58
#define MIIM_ID
Definition: winuser.h:733
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define MIIM_SUBMENU
Definition: winuser.h:734
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)

Referenced by CDefFolderMenu_MergeMenu().

◆ Activate_RunDLL()

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

Definition at line 1525 of file utils.cpp.

1530{
1531 DWORD dwProcessID;
1532
1536 UNREFERENCED_PARAMETER(cmdshow);
1537
1538 TRACE("(%p, %p, %s, %d)\n", hwnd, hinst, debugstr_w(cmdline), cmdline);
1539
1541 return AllowSetForegroundWindow(dwProcessID);
1542}
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 328 of file utils.cpp.

329{
331 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam(const_cast<LPWSTR>(pszName), &punk)))
332 return FALSE;
333 return TRUE;
334}
#define FALSE
Definition: types.h:117
#define FAILED(hr)
Definition: intsafe.h:51
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
uint16_t * LPWSTR
Definition: typedefs.h:56

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

◆ BindCtx_GetMode()

DWORD BindCtx_GetMode ( _In_ IBindCtx pbc,
_In_ DWORD  dwDefault 
)

Definition at line 336 of file utils.cpp.

337{
338 if (!pbc)
339 return dwDefault;
340
341 BIND_OPTS BindOpts = { sizeof(BindOpts) };
342 HRESULT hr = pbc->GetBindOptions(&BindOpts);
343 if (FAILED(hr))
344 return dwDefault;
345
346 return BindOpts.grfMode;
347}
HRESULT hr
Definition: delayimp.cpp:582

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

◆ BindCtx_GetUIWindow()

EXTERN_C HWND BindCtx_GetUIWindow ( _In_ IBindCtx pBindCtx)

Definition at line 585 of file utils.cpp.

586{
587 HWND hWnd = NULL;
588
590 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
592
593 return hWnd;
594}
HWND hWnd
Definition: settings.c:17
#define NULL
Definition: types.h:112
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:988
#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 645 of file utils.cpp.

650{
651 HRESULT hr = S_OK;
653
654 *ppbc = pBindCtx;
655
656 if (pBindCtx)
657 {
658 pBindCtx->AddRef();
659 }
660 else
661 {
662 hr = CreateBindCtx(0, ppbc);
663 if (FAILED(hr))
664 return hr;
665 }
666
667 if (!punk)
668 punk = pUnknown = new CDummyOleWindow();
669
670 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
671
672 if (pUnknown)
673 pUnknown->Release();
674
675 if (FAILED(hr))
676 {
677 (*ppbc)->Release();
678 *ppbc = NULL;
679 }
680
681 return hr;
682}
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
ULONG Release()
#define S_OK
Definition: intsafe.h:52
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
Definition: bindctx.c:491

Referenced by SHParseDisplayName().

◆ CDefFolderMenu_MergeMenu()

EXTERN_C VOID WINAPI CDefFolderMenu_MergeMenu ( _In_ HINSTANCE  hInstance,
_In_ UINT  uMainMerge,
_In_ UINT  uPopupMerge,
_Inout_ LPQCMINFO  lpQcmInfo 
)

Definition at line 77 of file utils.cpp.

82{
83 UINT idCmdFirst = lpQcmInfo->idCmdFirst;
84 HMENU hPopupMenu;
85
86 if (uMainMerge)
87 {
88 hPopupMenu = SHLoadPopupMenu(hInstance, uMainMerge);
89 if (hPopupMenu)
90 {
92 idCmdFirst = Shell_MergeMenus(lpQcmInfo->hmenu,
93 hPopupMenu,
94 lpQcmInfo->indexMenu,
95 lpQcmInfo->idCmdFirst,
96 lpQcmInfo->idCmdLast,
97 uFlags);
98 DestroyMenu(hPopupMenu);
99 }
100 }
101
102 if (uPopupMerge)
103 {
104 hPopupMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(uPopupMerge));
105 if (hPopupMenu)
106 {
107 UINT id = _SHMergePopupMenus(lpQcmInfo->hmenu, hPopupMenu,
108 lpQcmInfo->idCmdFirst, lpQcmInfo->idCmdLast);
109 idCmdFirst = max(idCmdFirst, id);
110 DestroyMenu(hPopupMenu);
111 }
112 }
113
114 lpQcmInfo->idCmdFirst = idCmdFirst;
115}
HINSTANCE hInstance
Definition: charmap.c:19
UINT uFlags
Definition: api.c:59
static INT _SHMergePopupMenus(HMENU hMenu, HMENU hPopupMenu, UINT uIDAdjust, UINT uIDAdjustMax)
Definition: utils.cpp:35
static HMENU SHLoadPopupMenu(HINSTANCE hInstance, UINT uMenuId)
Definition: utils.cpp:61
unsigned int UINT
Definition: sysinfo.c:13
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2548
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

◆ CopyStreamUI()

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

Definition at line 1407 of file utils.cpp.

1412{
1413 HRESULT hr = E_FAIL;
1414 DWORD cbBuff, cbRead, dwSizeToWrite;
1415 DWORDLONG cbDone;
1416 LPVOID pBuff;
1417 CComHeapPtr<BYTE> pHeapPtr;
1418 STATSTG Stat;
1419 BYTE abBuff[1024];
1420
1421 TRACE("(%p, %p, %p, %I64u)\n", pSrc, pDst, pProgress, dwlSize);
1422
1423 if (dwlSize == 0) // Invalid size?
1424 {
1425 // Get the stream size
1426 ZeroMemory(&Stat, sizeof(Stat));
1427 if (FAILED(pSrc->Stat(&Stat, STATFLAG_NONAME)))
1428 pProgress = NULL; // No size info. Disable progress
1429 else
1430 dwlSize = Stat.cbSize.QuadPart;
1431 }
1432
1433 if (!pProgress) // Progress is disabled?
1434 {
1435 ULARGE_INTEGER uliSize;
1436
1437 if (dwlSize > 0)
1438 uliSize.QuadPart = dwlSize;
1439 else
1440 uliSize.HighPart = uliSize.LowPart = INVALID_FILE_SIZE;
1441
1442 return pSrc->CopyTo(pDst, uliSize, NULL, NULL); // One punch
1443 }
1444
1445 // Allocate the buffer if necessary
1446 if (dwlSize > 0 && dwlSize <= sizeof(abBuff))
1447 {
1448 cbBuff = sizeof(abBuff);
1449 pBuff = abBuff;
1450 }
1451 else
1452 {
1453#define COPY_STREAM_DEFAULT_BUFFER_SIZE 0x4000
1455 if (pHeapPtr.AllocateBytes(cbBuff))
1456 {
1457 pBuff = pHeapPtr;
1458 }
1459 else // Low memory?
1460 {
1461 cbBuff = sizeof(abBuff);
1462 pBuff = abBuff;
1463 }
1464#undef COPY_STREAM_DEFAULT_BUFFER_SIZE
1465 }
1466
1467 // Start reading
1469 zero.QuadPart = 0;
1470 pSrc->Seek(zero, 0, NULL);
1471 pDst->Seek(zero, 0, NULL);
1472 cbDone = 0;
1473 pProgress->SetProgress64(cbDone, dwlSize);
1474
1475 // Repeat reading and writing until goal
1476 for (;;)
1477 {
1478 hr = pSrc->Read(pBuff, cbBuff, &cbRead);
1479 if (FAILED(hr))
1480 break;
1481
1482 // Calculate the size to write
1483 if (dwlSize > 0)
1484 dwSizeToWrite = (DWORD)min((DWORDLONG)(dwlSize - cbDone), (DWORDLONG)cbRead);
1485 else
1486 dwSizeToWrite = cbRead;
1487
1488 if (dwSizeToWrite == 0) // No need to write?
1489 {
1490 hr = S_OK;
1491 break;
1492 }
1493
1494 hr = pDst->Write(pBuff, dwSizeToWrite, NULL);
1495 if (hr != S_OK)
1496 break;
1497
1498 cbDone += dwSizeToWrite;
1499
1500 if (pProgress->HasUserCancelled()) // Cancelled?
1501 {
1503 break;
1504 }
1505 pProgress->SetProgress64(cbDone, dwlSize);
1506
1507 if (dwlSize > 0 && cbDone >= dwlSize) // Reached the goal?
1508 {
1509 hr = S_OK;
1510 break;
1511 }
1512 }
1513
1514 return hr;
1515}
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 1883 of file utils.cpp.

1884{
1885 for (UINT i = 0;; ++i)
1886 {
1887 const CLSID *pClsId = DCIA_GetEntry(hDCIA, i);
1888 if (!pClsId)
1889 break;
1890 if (IsEqualGUID(*pClsId, rClsId))
1891 return i; // Don't allow duplicates
1892 }
1893 return DSA_AppendItem((HDSA)hDCIA, const_cast<CLSID*>(&rClsId));
1894}
#define DCIA_GetEntry(hDCIA, iItem)
Definition: utils.h:127
#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 1896 of file utils.cpp.

1897{
1898 WCHAR szKey[200];
1899 PathCombineW(szKey, L"shellex", pszSubkey);
1900 HKEY hEnum;
1901 if (RegOpenKeyExW(hProgId, szKey, 0, KEY_READ, &hEnum) != ERROR_SUCCESS)
1902 return;
1903 for (UINT i = 0; RegEnumKeyW(hEnum, i++, szKey, _countof(szKey)) == ERROR_SUCCESS;)
1904 {
1905 CLSID clsid;
1906 if (SUCCEEDED(SHELL_GetShellExtensionRegCLSID(hEnum, szKey, &clsid)))
1907 DCIA_AddEntry(hDCIA, clsid);
1908 }
1909 RegCloseKey(hEnum);
1910}
#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:1883
const CLSID * clsid
Definition: msctf.cpp:50
#define KEY_READ
Definition: nt_native.h:1026
#define PathCombineW
Definition: pathcch.h:318
short WCHAR
Definition: pedump.c:58
#define _countof(array)
Definition: sndvol32.h:70
HRESULT SHELL_GetShellExtensionRegCLSID(HKEY hKey, LPCWSTR KeyName, CLSID *pClsId)
Definition: propsheet.cpp:13

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

486{
487 *pszBuf = UNICODE_NULL;
488 STRRET sr;
489 HRESULT hr = psf->GetDisplayNameOf(pidl, dwFlags, &sr);
490 if (FAILED(hr))
491 return hr;
492 return StrRetToBufW(&sr, pidl, pszBuf, cchBuf);
493}
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:248
_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 1575 of file utils.cpp.

1579{
1580 SIZE_T cchPath1 = wcslen(lpszPath1);
1581 SIZE_T cchPath2 = wcslen(lpszPath2);
1582 LPWSTR lpszPath = strPath.GetBuffer((INT)max(cchPath1, cchPath2) + 16);
1583 INT ret = PathCommonPrefixW(lpszPath1, lpszPath2, lpszPath);
1584 strPath.ReleaseBuffer();
1585 return ret;
1586}
int WINAPI PathCommonPrefixW(const WCHAR *file1, const WCHAR *file2, WCHAR *path)
Definition: path.c:1596
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
return ret
Definition: mutex.c:146
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by PathIsEqualOrSubFolder().

◆ DynamicPathRemoveBackslashW()

static VOID DynamicPathRemoveBackslashW ( _Out_ CStringW strPath)
static

Definition at line 1647 of file utils.cpp.

1649{
1650 INT nLength = strPath.GetLength();
1651 if (nLength > 0 && strPath[nLength - 1] == L'\\')
1652 strPath = strPath.Left(nLength - 1);
1653}
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 1592 of file utils.cpp.

1595{
1596 HRESULT hr;
1597
1598 for (UINT cchPath = MAX_PATH;; cchPath *= 2)
1599 {
1600 LPWSTR lpszPath = strPath.GetBuffer(cchPath);
1601 if (!lpszPath)
1602 return E_OUTOFMEMORY;
1603
1604 hr = SHGetPathCchFromIDListW(pidl, lpszPath, cchPath);
1605 strPath.ReleaseBuffer();
1606
1608 break;
1609
1610 if (cchPath >= MAXUINT / 2)
1611 {
1612 hr = E_FAIL;
1613 break;
1614 }
1615 }
1616
1617 if (FAILED(hr))
1618 strPath.Empty();
1619
1620 return hr;
1621}
#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 1624 of file utils.cpp.

1629{
1630 LPITEMIDLIST pidl;
1631 HRESULT hr = SHGetSpecialFolderLocation(hwndOwner, nCSIDL, &pidl);
1632 if (SUCCEEDED(hr))
1633 {
1634 hr = DynamicSHGetPathFromIDListW(pidl, strPath);
1635 CoTaskMemFree(pidl);
1636 }
1637
1638 if (FAILED(hr))
1639 strPath.Empty();
1640 else if (bCreate)
1641 CreateDirectoryW(strPath, NULL);
1642
1643 return hr;
1644}
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:58
static HRESULT DynamicSHGetPathFromIDListW(_In_ LPCITEMIDLIST pidl, _Out_ CStringW &strPath)
Definition: utils.cpp:1592
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3385
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1536
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 723 of file utils.cpp.

729{
730 TRACE("(%p, %s, %u, %p, %p)\n", hHandle, debugstr_a(lpFileName), wIndex, lpSize, lpIcon);
731
732 if (!lpFileName)
733 return 0;
734
735 CStringW strFileNameW(lpFileName);
736 return ExtractIconResInfoW(hHandle, strFileNameW, wIndex, lpSize, lpIcon);
737}
EXTERN_C WORD WINAPI ExtractIconResInfoW(_In_ HANDLE hHandle, _In_ LPCWSTR lpFileName, _In_ WORD wIndex, _Out_ LPWORD lpSize, _Out_ LPHANDLE lpIcon)
Definition: stubs.cpp:639
#define debugstr_a
Definition: kernel32.h:31
_In_ LPCSTR lpFileName
Definition: winbase.h:2800

◆ FindVerbMapEntry()

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

Definition at line 1839 of file utils.cpp.

1840{
1841 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1842 {
1843 if (pMap[i].CmdId == CmdId)
1844 return &pMap[i];
1845 }
1846 return NULL;
1847}
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 1789 of file utils.cpp.

1790{
1791 HRESULT hr = pCM->GetCommandString(Id, GCS & ~GCS_UNICODE, NULL, Buf, cchMax);
1792 if (FAILED(hr))
1793 {
1795 hr = pCM->GetCommandString(Id, GCS | GCS_UNICODE, NULL, (LPSTR)buf, _countof(buf));
1796 if (SUCCEEDED(hr))
1797 hr = SHUnicodeToAnsi(buf, Buf, cchMax) > 0 ? S_OK : E_FAIL;
1798 }
1799 return hr;
1800}
DWORD Id
UINT cchMax
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
Definition: main.c:1756
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
char * LPSTR
Definition: typedefs.h:51

Referenced by GetDfmCmd().

◆ GetDfmCmd()

UINT GetDfmCmd ( _In_ IContextMenu pCM,
_In_ LPCSTR  verba 
)

Definition at line 1803 of file utils.cpp.

1804{
1805 CHAR buf[MAX_PATH];
1806 if (IS_INTRESOURCE(verba))
1807 {
1808 if (FAILED(GetCommandStringA(pCM, LOWORD(verba), GCS_VERB, buf, _countof(buf))))
1809 return 0;
1810 verba = buf;
1811 }
1812 return MapVerbToDfmCmd(verba); // Returns DFM_CMD_* or 0
1813}
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:1789
#define LOWORD(l)
Definition: pedump.c:82
char CHAR
Definition: pedump.c:57

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

1298{
1299 WCHAR szBuff[20];
1300
1301 if (pSrc)
1302 *pDest = *pSrc;
1303 else
1304 dwNumberFlags = 0;
1305
1306 if (!(dwNumberFlags & FMT_USE_NUMDIGITS))
1307 {
1309 pDest->NumDigits = StrToIntW(szBuff);
1310 }
1311
1312 if (!(dwNumberFlags & FMT_USE_LEADZERO))
1313 {
1315 pDest->LeadingZero = StrToIntW(szBuff);
1316 }
1317
1318 if (!(dwNumberFlags & FMT_USE_GROUPING))
1319 {
1321 pDest->Grouping = StrToIntW(szBuff);
1322 }
1323
1324 if (!(dwNumberFlags & FMT_USE_DECIMAL))
1325 {
1326 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, pszDecimal, cchDecimal);
1327 pDest->lpDecimalSep = pszDecimal;
1328 }
1329
1330 if (!(dwNumberFlags & FMT_USE_THOUSAND))
1331 {
1332 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, pszThousand, cchThousand);
1333 pDest->lpThousandSep = pszThousand;
1334 }
1335
1336 if (!(dwNumberFlags & FMT_USE_NEGNUMBER))
1337 {
1339 pDest->NegativeOrder = StrToIntW(szBuff);
1340 }
1341}
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:907
#define FMT_USE_GROUPING
Definition: undocshell.h:905
#define FMT_USE_NUMDIGITS
Definition: undocshell.h:903
#define FMT_USE_NEGNUMBER
Definition: undocshell.h:908
#define FMT_USE_LEADZERO
Definition: undocshell.h:904
#define FMT_USE_DECIMAL
Definition: undocshell.h:906
#define LOCALE_SGROUPING
Definition: winnls.h:54
#define LOCALE_SDECIMAL
Definition: winnls.h:52
#define LOCALE_IDIGITS
Definition: winnls.h:55
#define LOCALE_STHOUSAND
Definition: winnls.h:53
#define LOCALE_INEGNUMBER
Definition: winnls.h:57
#define LOCALE_ILZERO
Definition: winnls.h:56

Referenced by Int64ToString().

◆ Int64ToStr()

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

Definition at line 1245 of file utils.cpp.

1249{
1250 WCHAR szBuff[40];
1251 UINT ich = 0, ichValue;
1252#if (WINVER >= _WIN32_WINNT_VISTA)
1253 BOOL bMinus = (llValue < 0);
1254
1255 if (bMinus)
1256 llValue = -llValue;
1257#endif
1258
1259 if (cchValue <= 0)
1260 return E_FAIL;
1261
1262 do
1263 {
1264 szBuff[ich++] = (WCHAR)(L'0' + (llValue % 10));
1265 llValue /= 10;
1266 } while (llValue != 0 && ich < _countof(szBuff) - 1);
1267
1268#if (WINVER >= _WIN32_WINNT_VISTA)
1269 if (bMinus && ich < _countof(szBuff))
1270 szBuff[ich++] = '-';
1271#endif
1272
1273 for (ichValue = 0; ich > 0 && ichValue < cchValue; ++ichValue)
1274 {
1275 --ich;
1276 pszValue[ichValue] = szBuff[ich];
1277 }
1278
1279 if (ichValue >= cchValue)
1280 {
1281 pszValue[cchValue - 1] = UNICODE_NULL;
1282 return E_FAIL;
1283 }
1284
1285 pszValue[ichValue] = UNICODE_NULL;
1286 return S_OK;
1287}
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 1350 of file utils.cpp.

1357{
1358 INT ret;
1359 NUMBERFMTW NumFormat;
1360 WCHAR szValue[80], szDecimalSep[6], szThousandSep[6];
1361
1362 Int64ToStr(llValue, szValue, _countof(szValue));
1363
1364 if (bUseFormat)
1365 {
1366 Int64GetNumFormat(&NumFormat, pNumberFormat, dwNumberFlags,
1367 szDecimalSep, _countof(szDecimalSep),
1368 szThousandSep, _countof(szThousandSep));
1369 ret = GetNumberFormatW(LOCALE_USER_DEFAULT, 0, szValue, &NumFormat, pszOut, cchOut);
1370 if (ret)
1371 --ret;
1372 return ret;
1373 }
1374
1375 if (FAILED(StringCchCopyW(pszOut, cchOut, szValue)))
1376 return 0;
1377
1378 return lstrlenW(pszOut);
1379}
#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:1290
static HRESULT Int64ToStr(_In_ LONGLONG llValue, _Out_writes_(cchValue) LPWSTR pszValue, _In_ UINT cchValue)
Definition: utils.cpp:1245
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1130
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 1738 of file utils.cpp.

1745{
1746 if (!pEC)
1747 return E_INVALIDARG;
1748
1749 CScopedSetObjectWithSite site(pEC, pSite);
1750 IUnknown_InitializeCommand(pEC, pszCommandName, pPB);
1751
1753 if (pSIA && SUCCEEDED(pEC->QueryInterface(IID_PPV_ARG(IObjectWithSelection, &pOWS))))
1754 pOWS->SetSelection(pSIA);
1755
1756 DWORD dwKeyState = 0, fMask = pICI ? pICI->fMask : 0;
1757 pEC->SetNoShowUI((fMask & CMIC_MASK_FLAG_NO_UI) != 0);
1758 pEC->SetShowWindow(pICI ? pICI->nShow : SW_SHOW);
1759 if (fMask & CMIC_MASK_SHIFT_DOWN)
1760 dwKeyState |= MK_SHIFT;
1761 if (fMask & CMIC_MASK_CONTROL_DOWN)
1762 dwKeyState |= MK_CONTROL;
1763 pEC->SetKeyState(dwKeyState);
1764 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpDirectoryW)
1765 pEC->SetDirectory(pICI->lpDirectoryW);
1766 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpParametersW)
1767 pEC->SetParameters(pICI->lpParametersW);
1768 if (fMask & CMIC_MASK_PTINVOKE)
1769 pEC->SetPosition(pICI->ptInvoke);
1770
1771 return pEC->Execute();
1772}
#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:1725
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 1775 of file utils.cpp.

1782{
1784 HRESULT hr = SHCreateShellItemArrayFromDataObject(pDO, IID_PPV_ARG(IShellItemArray, &pSIA));
1785 return SUCCEEDED(hr) ? InvokeIExecuteCommand(pEC, pszCommandName, pPB, pSIA, pICI, pSite) : hr;
1786}
EXTERN_C HRESULT WINAPI SHCreateShellItemArrayFromDataObject(_In_ IDataObject *pdo, _In_ REFIID riid, _Out_ void **ppv)
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:1738

Referenced by CDefaultContextMenu::InvokeRegVerb().

◆ IsShutdownAllowed()

BOOL IsShutdownAllowed ( VOID  )

Definition at line 890 of file utils.cpp.

891{
893}
EXTERN_C BOOL WINAPI SHTestTokenPrivilegeW(_In_opt_ HANDLE hToken, _In_ LPCWSTR lpName)
Definition: utils.cpp:834
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:427

Referenced by IsSuspendAllowed().

◆ IsSuspendAllowed()

BOOL WINAPI IsSuspendAllowed ( VOID  )

Definition at line 898 of file utils.cpp.

899{
900 TRACE("()\n");
902}
BOOL IsShutdownAllowed(VOID)
Definition: utils.cpp:890
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 1725 of file utils.cpp.

1729{
1730 HRESULT hr;
1732 if (SUCCEEDED(hr = pUnk->QueryInterface(IID_PPV_ARG(IInitializeCommand, &pIC))))
1733 hr = pIC->Initialize(pszCommandName, pPB);
1734 return hr;
1735}
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 1388 of file utils.cpp.

1395{
1396 return Int64ToString(pLargeInt->QuadPart, pszOut, cchOut, bUseFormat,
1397 pNumberFormat, dwNumberFlags);
1398}
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:1350

Referenced by DoTestEntry(), and Test_LargeIntegerToString().

◆ LinkWindow_RegisterClass()

EXTERN_C BOOL WINAPI LinkWindow_RegisterClass ( VOID  )

Definition at line 2334 of file utils.cpp.

2335{
2336 INITCOMMONCONTROLSEX iccx = { sizeof(iccx), ICC_LINK_CLASS };
2337 InitCommonControlsEx(&iccx);
2338
2339 WNDCLASSEXW wcx = { sizeof(wcx) };
2340 if (!GetClassInfoExW(NULL, L"SysLink", &wcx))
2341 return FALSE;
2342
2343 /* Superclassing! */
2344 wcx.lpszClassName = L"Link Window";
2346}
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:904
#define ICC_LINK_CLASS
Definition: commctrl.h:74
LPCWSTR lpszClassName
Definition: winuser.h:3334
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define ERROR_CLASS_ALREADY_EXISTS
Definition: winerror.h:1236
BOOL WINAPI GetClassInfoExW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSEXW)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)

◆ LinkWindow_UnregisterClass()

EXTERN_C BOOL WINAPI LinkWindow_UnregisterClass ( _In_ DWORD  dwUnused)

Definition at line 2351 of file utils.cpp.

2352{
2353 /* Do nothing. This is correct. */
2354 return TRUE;
2355}

◆ OpenEffectiveToken()

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

Definition at line 307 of file utils.cpp.

310{
311 BOOL ret;
312
313 if (phToken == NULL)
314 {
316 return FALSE;
317 }
318
319 *phToken = NULL;
320
322 if (!ret && GetLastError() == ERROR_NO_TOKEN)
324
325 return ret;
326}
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:2445
HANDLE WINAPI GetCurrentThread(void)
Definition: proc.c:1145
#define ERROR_NO_TOKEN
Definition: winerror.h:911

Referenced by SHOpenEffectiveToken().

◆ PathIsDosDevice()

BOOL PathIsDosDevice ( _In_ LPCWSTR  pszName)

Definition at line 240 of file utils.cpp.

241{
245
246 if (lstrcmpiW(szPath, L"NUL") == 0 || lstrcmpiW(szPath, L"PRN") == 0 ||
247 lstrcmpiW(szPath, L"CON") == 0 || lstrcmpiW(szPath, L"AUX") == 0)
248 {
249 return TRUE;
250 }
251
252 if (_wcsnicmp(szPath, L"LPT", 3) == 0 || _wcsnicmp(szPath, L"COM", 3) == 0)
253 {
254 if ((L'0' <= szPath[3] && szPath[3] <= L'9') && szPath[4] == UNICODE_NULL)
255 return TRUE;
256 }
257
258 return FALSE;
259}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
void WINAPI PathRemoveExtensionW(WCHAR *path)
Definition: path.c:1922
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:200
LPCWSTR szPath
Definition: env.c:37

Referenced by CFSFolder::_CreateIDListFromName().

◆ PathIsDotOrDotDotW()

BOOL PathIsDotOrDotDotW ( _In_ LPCWSTR  pszPath)

Definition at line 214 of file utils.cpp.

215{
216 if (pszPath[0] != L'.')
217 return FALSE;
218 return !pszPath[1] || (pszPath[1] == L'.' && !pszPath[2]);
219}

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

◆ PathIsEqualOrSubFolder()

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

Definition at line 1660 of file utils.cpp.

1663{
1664 CStringW strCommon, strPath1;
1665
1666 TRACE("(%s %s)\n", debugstr_w(pszPath1OrCSIDL), debugstr_w(pszPath2));
1667
1668 if (IS_INTRESOURCE(pszPath1OrCSIDL))
1669 {
1671 NULL, strPath1, LOWORD(pszPath1OrCSIDL) | CSIDL_FLAG_DONT_VERIFY, FALSE);
1672 }
1673 else
1674 {
1675 strPath1 = pszPath1OrCSIDL;
1676 }
1677
1679
1680 if (!DynamicPathCommonPrefixW(strPath1, pszPath2, strCommon))
1681 return FALSE;
1682
1683 return strPath1.CompareNoCase(strCommon) == 0;
1684}
int CompareNoCase(_In_z_ PCXSTR psz) const
Definition: cstringt.h:743
static VOID DynamicPathRemoveBackslashW(_Out_ CStringW &strPath)
Definition: utils.cpp:1647
static INT DynamicPathCommonPrefixW(_In_ LPCWSTR lpszPath1, _In_ LPCWSTR lpszPath2, _Out_ CStringW &strPath)
Definition: utils.cpp:1575
static HRESULT DynamicSHGetSpecialFolderPathW(_In_ HWND hwndOwner, _Out_ CStringW &strPath, _In_ INT nCSIDL, _In_ BOOL bCreate)
Definition: utils.cpp:1624
#define CSIDL_FLAG_DONT_VERIFY
Definition: shlobj.h:2252

Referenced by PathIsTemporaryW(), and START_TEST().

◆ PathIsSlowA()

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

Definition at line 709 of file utils.cpp.

712{
713 TRACE("(%s, 0x%X)\n", debugstr_a(pszFile), dwAttr);
714 CStringW strFileW(pszFile);
715 return PathIsSlowW(strFileW, dwAttr);
716}
EXTERN_C BOOL WINAPI PathIsSlowW(_In_ LPCWSTR pszFile, _In_ DWORD dwAttr)
Definition: stubs.cpp:751

◆ PathIsValidElement()

BOOL PathIsValidElement ( _In_ LPCWSTR  pszPath)

Definition at line 226 of file utils.cpp.

227{
228 if (!*pszPath || PathIsDotOrDotDotW(pszPath))
229 return FALSE;
230
231 for (LPCWSTR pch = pszPath; *pch; ++pch)
232 {
234 return FALSE;
235 }
236
237 return TRUE;
238}
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
Definition: path.c:2197
#define PATH_VALID_ELEMENT
Definition: utils.cpp:221
BOOL PathIsDotOrDotDotW(_In_ LPCWSTR pszPath)
Definition: utils.cpp:214
#define pch(ap)
Definition: match.c:418
const uint16_t * LPCWSTR
Definition: typedefs.h:57

Referenced by Shell_NextElement().

◆ SHBindToObject()

SHSTDAPI SHBindToObject ( _In_opt_ IShellFolder pShellFolder,
_In_ PCUIDLIST_RELATIVE  pidl,
_In_opt_ IBindCtx pBindCtx,
_In_ REFIID  riid,
_Out_ void **  ppvObj 
)

Definition at line 395 of file utils.cpp.

401{
402 CComPtr<IShellFolder> psfDesktop;
403
404 *ppvObj = NULL;
405
406 if (!pShellFolder)
407 {
408 SHGetDesktopFolder(&psfDesktop);
409 if (!psfDesktop)
410 return E_FAIL;
411
412 pShellFolder = psfDesktop;
413 }
414
415 HRESULT hr;
416 if (_ILIsDesktop(pidl))
417 hr = pShellFolder->QueryInterface(riid, ppvObj);
418 else
419 hr = pShellFolder->BindToObject(pidl, pBindCtx, riid, ppvObj);
420
421 if (SUCCEEDED(hr) && !*ppvObj)
422 hr = E_FAIL;
423
424 return hr;
425}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
REFIID riid
Definition: atlbase.h:39
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

Referenced by SHELL_GetIDListTarget().

◆ SHCoInitializeAnyApartment()

HRESULT SHCoInitializeAnyApartment ( VOID  )

Definition at line 542 of file utils.cpp.

543{
545 if (FAILED(hr))
547 return hr;
548}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:279
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:281

Referenced by ShellExecuteExW(), SHGetNameAndFlagsW(), and SHSetLocalizedName().

◆ SHCreatePropertyBag()

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

Definition at line 951 of file utils.cpp.

952{
954}
#define STGM_READWRITE
Definition: objbase.h:938
EXTERN_C HRESULT WINAPI SHCreatePropertyBagOnMemory(_In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: propbag.cpp:260

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

2325{
2326 return SHELL32_ReparentAsAliasPidl(NULL, NULL, pidl, ppidlNew, dwFlags) ? S_OK : E_FAIL;
2327}
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:2182

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

2188{
2189 if (!pidlTarget || !ppidlNew)
2190 return FALSE;
2191
2192 *ppidlNew = NULL;
2193
2194 for (SIZE_T iEntry = 0; iEntry < _countof(g_AliasTable); ++iEntry)
2195 {
2196 const ALIAS_MAPPING *pEntry = &g_AliasTable[iEntry];
2197
2198 if (!(dwFlags & pEntry->bFlagMask))
2199 continue;
2200
2201 // Get the source root PIDL
2202 LPITEMIDLIST pidlSrcRoot = NULL;
2203 HRESULT hr = SHGetFolderLocation(hwnd, pEntry->nCsidlSrc, hToken, 0, &pidlSrcRoot);
2204 if (FAILED(hr))
2205 continue;
2206
2207 // Check whether the input pidlTarget is under the source folder.
2208 // If it matches, ILFindChild returns the relative PIDL in the pidlTarget.
2209 LPCITEMIDLIST pidlRelative = ILFindChild(pidlSrcRoot, pidlTarget);
2210 if (!pidlRelative) // Not found?
2211 {
2212 ILFree(pidlSrcRoot);
2213 continue;
2214 }
2215
2216 // Found. Get the destination root PIDL
2217 LPITEMIDLIST pidlDestRoot = NULL;
2218 hr = SHGetFolderLocation(hwnd, pEntry->nCsidlDest, hToken, 0, &pidlDestRoot);
2219 if (SUCCEEDED(hr))
2220 {
2221 // Create a new PIDL by combining the destination root PIDL and the relative PIDL
2222 *ppidlNew = ILCombine(pidlDestRoot, pidlRelative);
2223 if (*ppidlNew)
2224 {
2225 // Manipulate specific flags in the PIDL if necessary
2226 if (pEntry->bCommonDesktop && (*ppidlNew)->mkid.cb >= 3)
2227 {
2228 (*ppidlNew)->mkid.abID[0] |= (PT_FS | PT_FS_COMMON_FLAG);
2229 }
2230 }
2231 ILFree(pidlDestRoot);
2232 }
2233
2234 ILFree(pidlSrcRoot);
2235 break; // A match was found, so exit the loop
2236 }
2237
2238 return (*ppidlNew != NULL);
2239}
static const ALIAS_MAPPING g_AliasTable[]
PIDL alias table.
Definition: utils.cpp:2152
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3278
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 2064 of file utils.cpp.

2069{
2070 if (!pszDescription || !*pszDescription)
2071 return E_FAIL;
2072
2073 PCWSTR pszFormat = (SHRestricted(REST_ALLOWCOMMENTTOGGLE) ? L"%2 (%1)" : L"%1 (%2)");
2074 PCWSTR args[] = { pszDescription , SHELL_SkipServerSlashes(pszServerName) };
2076 pszFormat, 0, 0, pszName, cchNameMax, (va_list *)args) ? S_OK : E_FAIL);
2077}
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:1999
@ REST_ALLOWCOMMENTTOGGLE
Definition: shlobj.h:1888
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 2027 of file utils.cpp.

2030{
2031 if (!pszDesc)
2032 return;
2033
2034 SIZE_T cbDesc = (wcslen(pszDesc) + 1) * sizeof(WCHAR);
2036 SHELL_SkipServerSlashes(pszServerName), REG_SZ, pszDesc, (DWORD)cbDesc);
2037}
DWORD WINAPI SHSetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD type, const void *data, DWORD data_len)
Definition: main.c:2292
#define COMPUTER_DESCRIPTIONS_KEY
Definition: utils.cpp:2009
#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 1873 of file utils.cpp.

1874{
1878 return hr;
1879 initIcon->SetNormalIcon(swShell32Name, IconIndex);
1880 return initIcon->QueryInterface(riid, ppvOut);
1881}
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
static const WCHAR IconIndex[]
Definition: install.c:52
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
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 454 of file utils.cpp.

459{
460 HRESULT hr;
461 CComPtr<IShellFolder> psfRoot;
462 if (!psf)
463 {
464 PCUITEMID_CHILD pidlChild;
465 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfRoot), &pidlChild);
466 if (FAILED(hr))
467 return hr;
468 psf = psfRoot;
469 pidl = pidlChild;
470 }
471 STRRET sr;
472 hr = psf->GetDisplayNameOf((PCUITEMID_CHILD)pidl, Flags, &sr);
473 return SUCCEEDED(hr) ? StrRetToStrW(&sr, pidl, ppStr) : hr;
474}
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:349
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 CFolderItems::IncludeItem(), CFileDefExt::InitMultifilePageThread(), and CFolder::NewFolder().

◆ Shell_FailForceReturn()

BOOL Shell_FailForceReturn ( _In_ HRESULT  hr)

Definition at line 378 of file utils.cpp.

379{
381
382 switch (code)
383 {
386 case ERROR_CANCELLED:
387 return TRUE;
388
389 default:
391 }
392}
#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 2014 of file utils.cpp.

2018{
2019 cchDescMax *= sizeof(WCHAR);
2021 SHELL_SkipServerSlashes(pszServerName), NULL, pszDesc, &cchDescMax);
2022 return HRESULT_FROM_WIN32(error);
2023}
DWORD WINAPI SHGetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len)
Definition: main.c:2222
#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 1850 of file utils.cpp.

1851{
1852 const CMVERBMAP* pEntry;
1853 switch (uFlags | GCS_UNICODE)
1854 {
1855 case GCS_VALIDATEW:
1856 case GCS_VERBW:
1857 pEntry = FindVerbMapEntry(CmdId, pMap);
1858 if ((uFlags | GCS_UNICODE) == GCS_VERBW)
1859 {
1860 if (!pEntry)
1861 return E_INVALIDARG;
1862 else if (uFlags & GCS_UNICODE)
1863 return SHAnsiToUnicode(pEntry->Verb, (LPWSTR)Buf, cchBuf) ? S_OK : E_FAIL;
1864 else
1865 return StringCchCopyA(Buf, cchBuf, pEntry->Verb);
1866 }
1867 return pEntry ? S_OK : S_FALSE; // GCS_VALIDATE
1868 }
1869 return E_NOTIMPL;
1870}
#define E_NOTIMPL
Definition: ddrawi.h:99
DWORD WINAPI SHAnsiToUnicode(const char *src, WCHAR *dest, int dest_len)
Definition: main.c:1801
static const CMVERBMAP * FindVerbMapEntry(UINT_PTR CmdId, const CMVERBMAP *pMap)
Definition: utils.cpp:1839
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 2041 of file utils.cpp.

2045{
2047 NET_API_STATUS error = NetServerGetInfo(pszServerName, 101, (PBYTE*)&bufptr);
2050 return hr;
2051
2052 PCWSTR comment = bufptr->sv101_comment;
2053 if (comment && comment[0])
2054 StringCchCopyW(pszDesc, cchDescMax, comment);
2055 else
2056 hr = E_FAIL;
2057
2059 return hr;
2060}
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 530 of file utils.cpp.

531{
532 IShellLink *pSL;
533 HRESULT hr = SHBindToObject(NULL, pidl, NULL, IID_PPV_ARG(IShellLink, &pSL));
534 if (SUCCEEDED(hr))
535 {
536 hr = pSL->GetIDList(ppidl); // Note: Returns S_FALSE if no target pidl
537 pSL->Release();
538 }
539 return hr;
540}
SHSTDAPI SHBindToObject(_In_opt_ IShellFolder *pShellFolder, _In_ PCUIDLIST_RELATIVE pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:395

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

432{
433 if (!ppvObj)
434 return E_INVALIDARG;
435 *ppvObj = NULL;
436 IShellFolder *psf;
437 PCUITEMID_CHILD pidlChild;
438 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
439 if (SUCCEEDED(hr))
440 {
441 hr = psf->GetUIObjectOf(hWnd, 1, &pidlChild, riid, NULL, ppvObj);
442 psf->Release();
443 if (SUCCEEDED(hr))
444 {
445 if (*ppvObj)
446 return hr;
447 hr = E_FAIL;
448 }
449 }
450 return hr;
451}
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(), CFolder::GetUIObjectFromVariant(), CFolderItemVerbs::Init(), SHELL_PidlGetIconLocationW(), and shellex_get_dataobj().

◆ SHELL_MapContextMenuVerbToCmdId()

HRESULT SHELL_MapContextMenuVerbToCmdId ( LPCMINVOKECOMMANDINFO  pICI,
const CMVERBMAP pMap 
)

Definition at line 1816 of file utils.cpp.

1817{
1818 LPCSTR pVerbA = pICI->lpVerb;
1819 CHAR buf[MAX_PATH];
1820 LPCMINVOKECOMMANDINFOEX pICIX = (LPCMINVOKECOMMANDINFOEX)pICI;
1821 if (IsUnicode(*pICIX) && !IS_INTRESOURCE(pICIX->lpVerbW))
1822 {
1823 if (SHUnicodeToAnsi(pICIX->lpVerbW, buf, _countof(buf)))
1824 pVerbA = buf;
1825 }
1826
1827 if (IS_INTRESOURCE(pVerbA))
1828 return LOWORD(pVerbA);
1829 for (SIZE_T i = 0; pMap[i].Verb; ++i)
1830 {
1831 assert(SUCCEEDED((int)(pMap[i].CmdId))); // The id must be >= 0 and ideally in the 0..0x7fff range
1832 if (!lstrcmpiA(pMap[i].Verb, pVerbA) && pVerbA[0])
1833 return pMap[i].CmdId;
1834 }
1835 return E_FAIL;
1836}
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4133
#define assert(_expr)
Definition: assert.h:32
WORD CmdId
Definition: utils.h:89
const char * LPCSTR
Definition: typedefs.h:52

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

964{
965 DWORD dwType, dwCount, cbSize = sizeof(dwCount);
966 DWORD error = SHQueryValueExW(hKey, L"MessageCount", 0, &dwType, &dwCount, &cbSize);
967 if (error)
968 return error;
969 if (pdwCount && dwType == REG_DWORD)
970 *pdwCount = dwCount;
971
972 FILETIME FileTime;
973 cbSize = sizeof(FileTime);
974 error = SHQueryValueExW(hKey, L"TimeStamp", 0, &dwType, &FileTime, &cbSize);
975 if (error)
976 return error;
977 if (pFileTime && dwType == REG_BINARY)
978 *pFileTime = FileTime;
979
980 WCHAR szName[2 * MAX_PATH];
981 cbSize = sizeof(szName);
982 error = SHQueryValueExW(hKey, L"Application", 0, &dwType, szName, &cbSize);
983 if (error)
984 return error;
985
986 if (pszShellExecuteCommand && dwType == REG_SZ &&
987 FAILED(StringCchCopyW(pszShellExecuteCommand, cchShellExecuteCommand, szName)))
988 {
990 }
991
992 return ERROR_SUCCESS;
993}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
DWORD WINAPI SHQueryValueExW(HKEY hkey, const WCHAR *name, DWORD *reserved, DWORD *type, void *buff, DWORD *buff_len)
Definition: main.c:2101
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 1999 of file utils.cpp.

2001{
2002 PCWSTR pch;
2003 for (pch = pszPath; *pch == L'\\'; ++pch)
2004 ;
2005 return pch;
2006}

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

1190{
1191 if (!hKeyUser)
1192 hKeyUser = HKEY_CURRENT_USER;
1193
1194 HKEY hKey;
1195 LSTATUS error = RegOpenKeyExW(hKeyUser,
1196 L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
1198 if (error)
1199 return HRESULT_FROM_WIN32(error);
1200
1201 FILETIME FileTime;
1202 error = RegEnumKeyExW(hKey, dwIndex, pszMailAddress, (PDWORD)&cchMailAddress, NULL, NULL,
1203 NULL, &FileTime);
1204 if (error)
1205 *pszMailAddress = UNICODE_NULL;
1206
1208 return error ? HRESULT_FROM_WIN32(error) : S_OK;
1209}
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 1135 of file utils.cpp.

1136{
1137 PCHAR pch;
1138
1139 if (*psz == '"')
1140 {
1141 for (pch = psz + 1; *pch && *pch != '"'; ++pch)
1142 {
1143 *(pch - 1) = *pch;
1144 }
1145
1146 if (*pch == '"')
1147 *(pch - 1) = ANSI_NULL;
1148 }
1149
1150 return psz;
1151}
#define ANSI_NULL
char * PCHAR
Definition: typedefs.h:51

◆ SheRemoveQuotesW()

EXTERN_C LPWSTR WINAPI SheRemoveQuotesW ( LPWSTR  psz)

Definition at line 1160 of file utils.cpp.

1161{
1162 PWCHAR pch;
1163
1164 if (*psz == L'"')
1165 {
1166 for (pch = psz + 1; *pch && *pch != L'"'; ++pch)
1167 {
1168 *(pch - 1) = *pch;
1169 }
1170
1171 if (*pch == L'"')
1172 *(pch - 1) = UNICODE_NULL;
1173 }
1174
1175 return psz;
1176}
uint16_t * PWCHAR
Definition: typedefs.h:56

◆ SHFindComputer()

EXTERN_C BOOL WINAPI SHFindComputer ( LPCITEMIDLIST  pidlRoot,
LPCITEMIDLIST  pidlSavedSearch 
)

Definition at line 1219 of file utils.cpp.

1220{
1221 UNREFERENCED_PARAMETER(pidlRoot);
1222 UNREFERENCED_PARAMETER(pidlSavedSearch);
1223
1224 TRACE("%p %p\n", pidlRoot, pidlSavedSearch);
1225
1226 IContextMenu *pCM;
1227 HRESULT hr = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1228 IID_IContextMenu, (void **)&pCM);
1229 if (FAILED(hr))
1230 {
1231 ERR("0x%08X\n", hr);
1232 return hr;
1233 }
1234
1235 CMINVOKECOMMANDINFO InvokeInfo = { sizeof(InvokeInfo) };
1236 InvokeInfo.lpParameters = "{996E1EB1-B524-11D1-9120-00A0C98BA67D}";
1237 InvokeInfo.nShow = SW_SHOWNORMAL;
1238 hr = pCM->InvokeCommand(&InvokeInfo);
1239 pCM->Release();
1240
1241 return SUCCEEDED(hr);
1242}
#define ERR(fmt,...)
Definition: precomp.h:57
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
HRESULT InvokeCommand([in] LPCMINVOKECOMMANDINFO lpici)
#define SW_SHOWNORMAL
Definition: winuser.h:781

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

◆ SHGetAttributes()

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

Definition at line 496 of file utils.cpp.

497{
498 LPCITEMIDLIST pidlLast = pidl;
499 IShellFolder *release = NULL;
500
501 if (!psf)
502 {
503 SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast);
504 if (!psf)
505 return 0;
506 release = psf;
507 }
508
509 DWORD oldAttrs = dwAttributes;
510 if (FAILED(psf->GetAttributesOf(1, &pidlLast, &dwAttributes)))
511 dwAttributes = 0;
512 else
513 dwAttributes &= oldAttrs;
514
515 if ((dwAttributes & SFGAO_FOLDER) &&
516 (dwAttributes & SFGAO_STREAM) &&
517 !(dwAttributes & SFGAO_STORAGEANCESTOR) &&
518 (oldAttrs & SFGAO_STORAGEANCESTOR) &&
519 (SHGetObjectCompatFlags(psf, NULL) & 0x200))
520 {
521 dwAttributes &= ~(SFGAO_STREAM | SFGAO_STORAGEANCESTOR);
522 dwAttributes |= SFGAO_STORAGEANCESTOR;
523 }
524
525 if (release)
526 release->Release();
527 return dwAttributes;
528}
DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid)
Definition: ordinal.c:5727
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by CFSDropTarget::_DoDrop(), BrFolder_InsertItem(), CRegItemContextMenu_CreateInstance(), CFolderItem::HasAttribute(), CFolder::NewFolder(), 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 2084 of file utils.cpp.

2089{
2090 WCHAR szDesc[256], szCompName[MAX_COMPUTERNAME_LENGTH + 1];
2091
2092 // If no server name is specified, retrieve the local computer name
2093 if (!pszServerName)
2094 {
2095 // Use computer name as server name
2096 DWORD cchCompName = _countof(szCompName);
2097 if (!GetComputerNameW(szCompName, &cchCompName))
2098 return E_FAIL;
2099 pszServerName = szCompName;
2100
2101 // Don't use the cache for the local machine
2103 }
2104
2105 // Get computer description from cache if necessary
2106 HRESULT hr = E_FAIL;
2107 if (!(dwFlags & SHGCDN_NOCACHE))
2108 hr = SHELL_GetCachedComputerDescription(szDesc, _countof(szDesc), pszServerName);
2109
2110 // Actually retrieve the computer description if it is not in the cache
2111 if (FAILED(hr))
2112 {
2113 hr = SHELL_GetComputerDescription(szDesc, _countof(szDesc), pszServerName);
2114 if (FAILED(hr))
2115 szDesc[0] = UNICODE_NULL;
2116
2117 // Cache the description if necessary
2118 if (!(dwFlags & SHGCDN_NOCACHE))
2119 SHELL_CacheComputerDescription(pszServerName, szDesc);
2120 }
2121
2122 // If getting the computer description failed, store the server name only
2123 if (FAILED(hr) || !szDesc[0])
2124 {
2126 return hr; // Bail out if no server name is requested
2127
2128 StringCchCopyW(pszName, cchNameMax, SHELL_SkipServerSlashes(pszServerName));
2129 return S_OK;
2130 }
2131
2132 // If no server name is requested, store the description only
2134 {
2135 StringCchCopyW(pszName, cchNameMax, szDesc);
2136 return S_OK;
2137 }
2138
2139 // Build a string like "Description (SERVERNAME)"
2140 return SHELL_BuildDisplayMachineName(pszName, cchNameMax, pszServerName, szDesc);
2141}
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:2041
static HRESULT SHELL_BuildDisplayMachineName(_Out_writes_z_(cchNameMax) PWSTR pszName, _In_ DWORD cchNameMax, _In_ PCWSTR pszServerName, _In_ PCWSTR pszDescription)
Definition: utils.cpp:2064
static VOID SHELL_CacheComputerDescription(_In_ PCWSTR pszServerName, _In_ PCWSTR pszDesc)
Definition: utils.cpp:2027
static HRESULT SHELL_GetCachedComputerDescription(_Out_writes_z_(cchDescMax) PWSTR pszDesc, _In_ DWORD cchDescMax, _In_ PCWSTR pszServerName)
Definition: utils.cpp:2014
#define SHGCDN_NOSERVERNAME
Definition: undocshell.h:1070
#define SHGCDN_NOCACHE
Definition: undocshell.h:1069
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:268

◆ SHGetNameAndFlagsW()

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

Definition at line 551 of file utils.cpp.

557{
558 if (pszText)
559 *pszText = UNICODE_NULL;
560
562
563 CComPtr<IShellFolder> psfFolder;
564 LPCITEMIDLIST ppidlLast;
565 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &ppidlLast);
566 if (SUCCEEDED(hr))
567 {
568 if (pszText)
569 hr = DisplayNameOfW(psfFolder, ppidlLast, dwFlags, pszText, cchBuf);
570
571 if (SUCCEEDED(hr))
572 {
573 if (pdwAttributes)
574 *pdwAttributes = SHGetAttributes(psfFolder, ppidlLast, *pdwAttributes);
575 }
576 }
577
578 if (SUCCEEDED(hrCoInit))
580
581 return hr;
582}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:496
EXTERN_C HRESULT WINAPI DisplayNameOfW(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: utils.cpp:480
HRESULT SHCoInitializeAnyApartment(VOID)
Definition: utils.cpp:542

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

1695{
1696 HRESULT hr;
1697 STRRET strret;
1699 SFGAOF attrs;
1700
1701 *ppidlReal = NULL;
1702
1703 hr = IShellFolder_GetDisplayNameOf(psf, pidlSimple, SHGDN_INFOLDER | SHGDN_FORPARSING,
1704 &strret, 0);
1706 return hr;
1707
1708 hr = StrRetToBufW(&strret, pidlSimple, szPath, _countof(szPath));
1710 return hr;
1711
1712 attrs = SFGAO_FILESYSTEM;
1713 hr = psf->GetAttributesOf(1, &pidlSimple, &attrs);
1714 if (SUCCEEDED(hr) && !(attrs & SFGAO_FILESYSTEM))
1715 return SHILClone(pidlSimple, ppidlReal);
1716
1717 hr = IShellFolder_ParseDisplayName(psf, NULL, NULL, szPath, NULL, ppidlReal, NULL);
1718 if (hr == E_INVALIDARG || hr == E_NOTIMPL)
1719 return SHILClone(pidlSimple, ppidlReal);
1720
1721 return hr;
1722}
#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 909 of file utils.cpp.

910{
913 HRESULT hr;
914 CStringW strShellStyle;
915
916 TRACE("SHGetShellStyleHInstance called\n");
917
918 /* First, attempt to load the shellstyle dll from the current active theme */
920 if (FAILED(hr))
921 goto DoDefault;
922
923 /* Strip the theme filename */
925
926 strShellStyle = szPath;
927 strShellStyle += L"\\Shell\\";
928 strShellStyle += szColorName;
929 strShellStyle += L"\\ShellStyle.dll";
930
932 if (hInst)
933 return hInst;
934
935 /* Otherwise, use the version stored in the System32 directory */
936DoDefault:
937 if (!ExpandEnvironmentStringsW(L"%SystemRoot%\\System32\\ShellStyle.dll",
939 {
940 ERR("Expand failed\n");
941 return NULL;
942 }
944}
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:492
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
BOOL WINAPI PathRemoveFileSpecW(WCHAR *path)
Definition: path.c:1121
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 1002 of file utils.cpp.

1009{
1010 LSTATUS error;
1011 HKEY hKey;
1012
1013 if (!hKeyUser)
1014 hKeyUser = HKEY_CURRENT_USER;
1015
1016 if (pszMailAddress)
1017 {
1018 CStringW strKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail";
1019 strKey += L'\\';
1020 strKey += pszMailAddress;
1021
1022 error = RegOpenKeyExW(hKeyUser, strKey, 0, KEY_QUERY_VALUE, &hKey);
1023 if (error)
1024 return HRESULT_FROM_WIN32(error);
1025
1026 error = SHELL_ReadSingleUnreadMailCount(hKey, pdwCount, pFileTime,
1027 pszShellExecuteCommand, cchShellExecuteCommand);
1028 }
1029 else
1030 {
1031 if (pszShellExecuteCommand || cchShellExecuteCommand)
1032 return E_INVALIDARG;
1033
1034 *pdwCount = 0;
1035
1036 error = RegOpenKeyExW(hKeyUser, L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
1038 if (error)
1039 return HRESULT_FROM_WIN32(error);
1040
1041 for (DWORD dwIndex = 0; !error; ++dwIndex)
1042 {
1043 WCHAR Name[2 * MAX_PATH];
1045 FILETIME LastWritten;
1046 error = RegEnumKeyExW(hKey, dwIndex, Name, &cchName, NULL, NULL, NULL, &LastWritten);
1047 if (error)
1048 break;
1049
1050 HKEY hSubKey;
1051 error = RegOpenKeyExW(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey);
1052 if (error)
1053 break;
1054
1055 FILETIME FileTime;
1056 DWORD dwCount;
1057 error = SHELL_ReadSingleUnreadMailCount(hSubKey, &dwCount, &FileTime, NULL, 0);
1058 if (!error && (!pFileTime || CompareFileTime(&FileTime, pFileTime) >= 0))
1059 *pdwCount += dwCount;
1060
1061 RegCloseKey(hSubKey);
1062 }
1063
1066 }
1067
1069
1070 return error ? HRESULT_FROM_WIN32(error) : S_OK;
1071}
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:958
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2497

Referenced by START_TEST().

◆ SHGetUserDisplayName()

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

Definition at line 1943 of file utils.cpp.

1946{
1947 if (!pName || !puSize)
1948 return E_INVALIDARG;
1949
1950 if (GetUserNameExW(NameDisplay, pName, puSize))
1951 return S_OK;
1952
1953 LONG error = GetLastError(); // for ERROR_NONE_MAPPED
1955
1956 WCHAR UserName[MAX_PATH];
1957 DWORD cchUserName = _countof(UserName);
1958 if (!GetUserNameW(UserName, &cchUserName))
1960
1961 // Was the user name not available in the specified format (NameDisplay)?
1962 if (error == ERROR_NONE_MAPPED)
1963 {
1964 // Try to get the user name by using Network API
1965 PUSER_INFO_2 UserInfo;
1966 DWORD NetError = NetUserGetInfo(NULL, UserName, 2, (PBYTE*)&UserInfo);
1967 if (NetError)
1968 {
1969 hr = HRESULT_FROM_WIN32(NetError);
1970 }
1971 else
1972 {
1973 if (UserInfo->usri2_full_name)
1974 {
1975 hr = StringCchCopyW(pName, *puSize, UserInfo->usri2_full_name);
1976 if (SUCCEEDED(hr))
1977 {
1978 // Include the NUL-terminator
1979 *puSize = lstrlenW(UserInfo->usri2_full_name) + 1;
1980 }
1981 }
1982
1983 NetApiBufferFree(UserInfo);
1984 }
1985 }
1986
1987 if (FAILED(hr))
1988 {
1989 hr = StringCchCopyW(pName, *puSize, UserName);
1990 if (SUCCEEDED(hr))
1991 *puSize = cchUserName;
1992 }
1993
1994 return hr;
1995}
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:86
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 764 of file utils.cpp.

765{
766 DWORD dwSessionId, dwLength;
767 BOOL bOpenToken = FALSE;
768
769 TRACE("%p\n", hToken);
770
771 if (!hToken)
772 bOpenToken = SHOpenEffectiveToken(&hToken);
773
774 if (!hToken ||
775 !GetTokenInformation(hToken, TokenSessionId, &dwSessionId, sizeof(dwSessionId), &dwLength))
776 {
777 dwSessionId = 0;
778 }
779
780 if (bOpenToken)
781 CloseHandle(hToken);
782
783 return dwSessionId;
784}
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:755
@ TokenSessionId
Definition: setypes.h:989

◆ SHILAppend()

HRESULT SHILAppend ( _Inout_ LPITEMIDLIST  pidl,
_Inout_ LPITEMIDLIST ppidl 
)

Definition at line 261 of file utils.cpp.

262{
263 LPITEMIDLIST pidlOld = *ppidl;
264 if (!pidlOld)
265 {
266 *ppidl = pidl;
267 return S_OK;
268 }
269
270 HRESULT hr = SHILCombine(*ppidl, pidl, ppidl);
271 ILFree(pidlOld);
272 ILFree(pidl);
273 return hr;
274}

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

◆ SHInvokePrivilegedFunctionW()

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

Definition at line 791 of file utils.cpp.

795{
796 TRACE("(%s %p %p)\n", debugstr_w(pszName), fn, lParam);
797
798 if (!pszName || !fn)
799 return E_INVALIDARG;
800
801 HANDLE hToken = NULL;
802 TOKEN_PRIVILEGES NewPriv, PrevPriv;
803 BOOL bAdjusted = FALSE;
804
805 if (SHOpenEffectiveToken(&hToken) &&
806 ::LookupPrivilegeValueW(NULL, pszName, &NewPriv.Privileges[0].Luid))
807 {
808 NewPriv.PrivilegeCount = 1;
810
811 DWORD dwReturnSize;
812 bAdjusted = ::AdjustTokenPrivileges(hToken, FALSE, &NewPriv,
813 sizeof(PrevPriv), &PrevPriv, &dwReturnSize);
814 }
815
816 HRESULT hr = fn(lParam);
817
818 if (bAdjusted)
819 ::AdjustTokenPrivileges(hToken, FALSE, &PrevPriv, 0, NULL, NULL);
820
821 if (hToken)
822 ::CloseHandle(hToken);
823
824 return hr;
825}
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 1919 of file utils.cpp.

1922{
1923 struct CUnknownVtbl
1924 {
1928 };
1929 struct CUnknown { CUnknownVtbl *lpVtbl; };
1930 const CUnknown *punk = reinterpret_cast<const CUnknown *>(pv);
1931 return !punk || IsBadReadPtr(punk, sizeof(punk->lpVtbl)) ||
1932 IsBadReadPtr(punk->lpVtbl, ucb) ||
1933 IsBadCodePtr((FARPROC)punk->lpVtbl->Release);
1934}
#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 361 of file utils.cpp.

362{
365
366 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam((LPWSTR)STR_FILE_SYS_BIND_DATA, &punk)))
367 return S_FALSE;
368
370 return S_FALSE;
371
372 if (pFindData)
373 pBindData->GetFindData(pFindData);
374
375 return S_OK;
376}

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

◆ SHLoadPopupMenu()

static HMENU SHLoadPopupMenu ( HINSTANCE  hInstance,
UINT  uMenuId 
)
static

Definition at line 61 of file utils.cpp.

62{
63 HMENU hMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(uMenuId));
64 if (!hMenu)
65 return NULL;
66 HMENU hSubMenu = GetSubMenu(hMenu, 0);
67 RemoveMenu(hMenu, 0, MF_BYPOSITION);
68 DestroyMenu(hMenu);
69 return hSubMenu;
70}
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)

Referenced by CDefFolderMenu_MergeMenu().

◆ SHOpenEffectiveToken()

EXTERN_C BOOL WINAPI SHOpenEffectiveToken ( _Out_ LPHANDLE  phToken)

Definition at line 755 of file utils.cpp.

756{
757 TRACE("%p\n", phToken);
759}
static BOOL OpenEffectiveToken(_In_ DWORD DesiredAccess, _Out_ HANDLE *phToken)
Definition: utils.cpp:307
#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 744 of file utils.cpp.

747{
748 TRACE("(%lu, %p)\n", dwNumber, pszBuffer);
749 return StrFormatByteSizeW(dwNumber, pszBuffer, 0x8FFF);
750}
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:854

◆ SHSetFolderPathA()

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

Definition at line 691 of file utils.cpp.

696{
697 TRACE("(%d, %p, 0x%X, %s)\n", csidl, hToken, dwFlags, debugstr_a(pszPath));
698 CStringW strPathW(pszPath);
699 return SHSetFolderPathW(csidl, hToken, dwFlags, strPathW);
700}
EXTERN_C HRESULT WINAPI SHSetFolderPathW(_In_ INT csidl, _In_ HANDLE hToken, _In_ DWORD dwFlags, _In_ LPCWSTR pszPath)
Definition: stubs.cpp:714

◆ SHSetLocalizedName()

EXTERN_C HRESULT WINAPI SHSetLocalizedName ( _In_ PCWSTR  pszPath,
_In_ PCWSTR  pszResModule,
_In_ INT  idsRes 
)

Definition at line 2248 of file utils.cpp.

2252{
2253 HRESULT hr;
2254 IShellFolder *pDesktop = NULL, *pParent = NULL;
2255 LPITEMIDLIST pidl = NULL;
2256 LPCITEMIDLIST pidlLast;
2258 INT cchShortMax, cchShort, cchName;
2259 PWSTR pszShortPath = NULL, pszName = NULL;
2260
2263 return hr;
2264
2265 hr = SHGetDesktopFolder(&pDesktop);
2267 goto Cleanup;
2268
2269 hr = pDesktop->ParseDisplayName(NULL, NULL, (PWSTR)pszPath, NULL, &pidl, NULL);
2271 goto Cleanup;
2272
2273 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &pParent), &pidlLast);
2275 goto Cleanup;
2276
2278 cchShortMax = lstrlenW(pszResModule) + 1;
2279 pszShortPath = (PWSTR)HeapAlloc(hProcessHeap, 0, cchShortMax * sizeof(WCHAR));
2280 if (!pszShortPath)
2281 {
2282 hr = E_OUTOFMEMORY;
2283 goto Cleanup;
2284 }
2285
2286 cchShort = GetShortPathNameW(pszResModule, pszShortPath, cchShortMax);
2287 if (cchShort)
2288 pszResModule = pszShortPath;
2289 else
2290 cchShort = cchShortMax;
2291
2292 /* 14 == '@' + ',' + '-' + (digits of max width 10) + NUL */
2293 cchName = cchShort + 14;
2294 pszName = (PWSTR)HeapAlloc(hProcessHeap, 0, cchName * sizeof(WCHAR));
2295 if (!pszName)
2296 {
2297 hr = E_OUTOFMEMORY;
2298 goto Cleanup;
2299 }
2300
2301 wnsprintfW(pszName, cchName, L"@%s,%d", pszResModule, -idsRes);
2302 hr = pParent->SetNameOf(NULL, pidlLast, pszName, 0, NULL);
2303
2304Cleanup:
2305 if (pszName)
2306 HeapFree(hProcessHeap, 0, pszName);
2307 if (pszShortPath)
2308 HeapFree(hProcessHeap, 0, pszShortPath);
2309 if (pParent)
2310 pParent->Release();
2311 if (pidl)
2312 SHFree(pidl);
2313 if (pDesktop)
2314 pDesktop->Release();
2316 return hr;
2317}
virtual ULONG Release(__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
Definition: fxobject.hpp:853
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
DWORD WINAPI GetShortPathNameW(IN LPCWSTR lpszLongPath, OUT LPWSTR lpszShortPath, IN DWORD cchBuffer)
Definition: path.c:1752
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
int WINAPIV wnsprintfW(LPWSTR lpOut, int cchLimitIn, LPCWSTR lpFmt,...)
Definition: wsprintf.c:564
static const WCHAR Cleanup[]
Definition: register.c:80
HANDLE hProcessHeap
Definition: explorer.cpp:25
FxObject * pParent
Definition: fxdpcapi.cpp:86
HRESULT ParseDisplayName([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
uint16_t * PWSTR
Definition: typedefs.h:56

◆ SHSetUnreadMailCountW()

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

Definition at line 1080 of file utils.cpp.

1084{
1085 CString strKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\";
1086 strKey += pszMailAddress;
1087
1088 HKEY hKey;
1089 DWORD dwDisposition;
1091 &hKey, &dwDisposition);
1092 if (error)
1093 return HRESULT_FROM_WIN32(error);
1094
1095 error = RegSetValueExW(hKey, L"MessageCount", 0, REG_DWORD, (PBYTE)&dwCount, sizeof(dwCount));
1096 if (error)
1097 {
1099 return HRESULT_FROM_WIN32(error);
1100 }
1101
1102 FILETIME FileTime;
1103 GetSystemTimeAsFileTime(&FileTime);
1104
1105 error = RegSetValueExW(hKey, L"TimeStamp", 0, REG_BINARY, (PBYTE)&FileTime, sizeof(FileTime));
1106 if (error)
1107 {
1109 return HRESULT_FROM_WIN32(error);
1110 }
1111
1112 WCHAR szBuff[2 * MAX_PATH];
1113 if (!PathUnExpandEnvStringsW(pszShellExecuteCommand, szBuff, _countof(szBuff)))
1114 {
1115 HRESULT hr = StringCchCopyW(szBuff, _countof(szBuff), pszShellExecuteCommand);
1117 {
1119 return hr;
1120 }
1121 }
1122
1123 DWORD cbValue = (lstrlenW(szBuff) + 1) * sizeof(WCHAR);
1124 error = RegSetValueExW(hKey, L"Application", 0, REG_SZ, (PBYTE)szBuff, cbValue);
1125
1127 return (error ? HRESULT_FROM_WIN32(error) : S_OK);
1128}
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:2681
#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 284 of file utils.cpp.

285{
286 HRESULT hr;
287 IShellBrowser *pBrowser;
288
289 hr = IUnknown_QueryService(pUnknown, SID_STopWindow, IID_PPV_ARG(IShellBrowser, &pBrowser));
290 if (FAILED(hr))
291 return hr;
292
295 if (state.fWebView &&
296 !SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
297 L"ShowWizardsTEST", FALSE, FALSE))
298 {
299 hr = S_FALSE;
300 }
301
302 pBrowser->Release();
303 return hr;
304}
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 *obj, REFGUID sid, REFIID iid, void **out)
Definition: main.c:181
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_WEBVIEW
Definition: shlobj.h:1637

Referenced by START_TEST().

◆ SHSkipJunctionBinding()

BOOL SHSkipJunctionBinding ( _In_ IBindCtx pbc,
_In_ CLSID pclsid 
)

Definition at line 349 of file utils.cpp.

350{
351 if (!pbc)
352 return FALSE;
353
354 BIND_OPTS BindOps = { sizeof(BindOps) };
355 if (SUCCEEDED(pbc->GetBindOptions(&BindOps)) && BindOps.grfFlags == OLECONTF_LINKS)
356 return TRUE;
357
358 return pclsid && SHSkipJunction(pbc, pclsid);
359}
BOOL WINAPI SHSkipJunction(IBindCtx *pbc, const CLSID *pclsid)
Definition: ordinal.c:4022

Referenced by CDesktopFolder::_ParseDisplayNameByParent().

◆ SHStartNetConnectionDialogA()

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

Definition at line 1551 of file utils.cpp.

1555{
1556 LPCWSTR pszRemoteNameW = NULL;
1557 CStringW strRemoteNameW;
1558
1559 TRACE("(%p, %s, %lu)\n", hwnd, debugstr_a(pszRemoteName), dwType);
1560
1561 if (pszRemoteName)
1562 {
1563 strRemoteNameW = pszRemoteName;
1564 pszRemoteNameW = strRemoteNameW;
1565 }
1566
1567 return SHStartNetConnectionDialogW(hwnd, pszRemoteNameW, dwType);
1568}
EXTERN_C HRESULT WINAPI SHStartNetConnectionDialogW(_In_ HWND hwnd, _In_ LPCWSTR pszRemoteName, _In_ DWORD dwType)
Definition: stubs.cpp:457

Referenced by SHStartNetConnectionDialog().

◆ SHTestTokenPrivilegeW()

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

Definition at line 834 of file utils.cpp.

837{
838 LUID Luid;
840 PTOKEN_PRIVILEGES pTokenPriv;
841 HANDLE hNewToken = NULL;
842 BOOL ret = FALSE;
843
844 TRACE("(%p, %s)\n", hToken, debugstr_w(lpName));
845
846 if (!lpName)
847 return FALSE;
848
849 if (!hToken)
850 {
851 if (!SHOpenEffectiveToken(&hNewToken))
852 goto Quit;
853
854 if (!hNewToken)
855 return FALSE;
856
857 hToken = hNewToken;
858 }
859
860 if (!LookupPrivilegeValueW(NULL, lpName, &Luid))
861 return FALSE;
862
863 dwLength = 0;
865 goto Quit;
866
868 if (!pTokenPriv)
869 goto Quit;
870
871 if (GetTokenInformation(hToken, TokenPrivileges, pTokenPriv, dwLength, &dwLength))
872 {
873 UINT iPriv, cPrivs;
874 cPrivs = pTokenPriv->PrivilegeCount;
875 for (iPriv = 0; !ret && iPriv < cPrivs; ++iPriv)
876 {
877 ret = RtlEqualLuid(&Luid, &pTokenPriv->Privileges[iPriv].Luid);
878 }
879 }
880
881 LocalFree(pTokenPriv);
882
883Quit:
884 if (hToken == hNewToken)
885 CloseHandle(hNewToken);
886
887 return ret;
888}
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:2519
#define RtlEqualLuid(Luid1, Luid2)
Definition: rtlfuncs.h:304
@ TokenPrivileges
Definition: setypes.h:980
struct _TOKEN_PRIVILEGES * PTOKEN_PRIVILEGES

Referenced by IsShutdownAllowed(), and CStartMenuSite::ShowUndockMenuItem().

◆ 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:1151
_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 122 of file utils.cpp.

126{
127 INT cchSearch = lstrlenA(pszSearch);
128
129 PCSTR pchEnd = pszLast ? pszLast : &pszSrc[lstrlenA(pszSrc)];
130 if (pchEnd == pszSrc)
131 return NULL;
132
133 INT_PTR cchEnd = pchEnd - pszSrc;
134 for (;;)
135 {
136 --pchEnd;
137 --cchEnd;
138 if (!pchEnd)
139 break;
140 if (!StrCmpNA(pchEnd, pszSearch, cchSearch) && pchEnd == StrEndNA(pszSrc, cchEnd))
141 break;
142 if (pchEnd == pszSrc)
143 return NULL;
144 }
145
146 return const_cast<PSTR>(pchEnd);
147}
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 154 of file utils.cpp.

158{
159 INT cchSearch = lstrlenW(pszSearch);
160
161 PCWSTR pchEnd = pszLast ? pszLast : &pszSrc[lstrlenW(pszSrc)];
162 if (pchEnd == pszSrc)
163 return NULL;
164
165 INT_PTR cchEnd = pchEnd - pszSrc;
166 for (;;)
167 {
168 --pchEnd;
169 --cchEnd;
170 if (!pchEnd)
171 break;
172 if (!StrCmpNW(pchEnd, pszSearch, cchSearch) && pchEnd == StrEndNW(pszSrc, cchEnd))
173 break;
174 if (pchEnd == pszSrc)
175 return NULL;
176 }
177
178 return const_cast<PWSTR>(pchEnd);
179}
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

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:2215
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2206
#define CSIDL_PERSONAL
Definition: shlobj.h:2196
#define CSIDL_FLAG_NO_ALIAS
Definition: shlobj.h:2251
#define CSIDL_DESKTOP
Definition: shlobj.h:2191
#define CSIDL_COMMON_DOCUMENTS
Definition: shlobj.h:2236

PIDL alias table.

Definition at line 2152 of file utils.cpp.

Referenced by SHELL32_ReparentAsAliasPidl().