ReactOS 0.4.17-dev-1266-g5d5a280
utility.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS shdocvw
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: Utility routines
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include "objects.h"
10#include <strsafe.h>
11
12#include <wine/debug.h>
14
15static inline INT_PTR
17{
18 MENUITEMINFOW mii;
19 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem); /* USER32 version agnostic */
20 mii.fMask = MIIM_ID; /* GetMenuItemID does not handle sub-menus, this does */
21 mii.cch = 0;
22 return GetMenuItemInfoW(hMenu, Pos, TRUE, &mii) ? mii.wID : -1;
23}
24
25static inline BOOL
27{
28 MENUITEMINFOW mii;
29 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem); /* USER32 version agnostic */
30 mii.fMask = MIIM_FTYPE;
31 mii.cch = 0;
32 return GetMenuItemInfoW(hMenu, Pos, TRUE, &mii) && (mii.fType & MFT_SEPARATOR);
33}
34
37{
38#if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA && 0 // FIXME: SHELL32 not ready yet
39 return SHGetIDListFromObject(punk, ppidl);
40#else
41 HRESULT hr;
42 IPersistFolder2 *pf2;
44 {
45 hr = pf2->GetCurFolder(ppidl);
46 pf2->Release();
47 }
48 IPersistIDList *pil;
50 {
51 hr = pil->GetIDList(ppidl);
52 pil->Release();
53 }
54 return hr;
55#endif
56}
57
59{
60 IShellFolder *psf;
62 if (FAILED(hr))
63 return hr;
64 hr = psf->CompareIDs(lParam, a, b);
65 psf->Release();
66 return hr;
67}
68
71{
73}
74
77{
78 HRESULT hr;
79 WCHAR wide[MAX_PATH];
80 if (SUCCEEDED(hr = pcm->GetCommandString(idCmd, GCS_VERBW, NULL, (LPSTR)wide, _countof(wide))))
81 return !lstrcmpiW(wide, Verb);
82
83 CHAR ansi[_countof(wide)], buf[MAX_PATH];
85 {
86 if (SUCCEEDED(hr = pcm->GetCommandString(idCmd, GCS_VERBA, NULL, ansi, _countof(ansi))))
87 return !lstrcmpiA(ansi, buf);
88 }
89 return FALSE;
90}
91
92static int
94{
95 for (UINT i = 0, c = GetMenuItemCount(hMenu); i < c; ++i)
96 {
97 INT_PTR id = GetMenuItemIdByPos(hMenu, i);
98 if (id != -1 && SHELL_IsVerb(pcm, id - idCmdFirst, Verb))
99 return i;
100 }
101 return -1;
102}
103
106{
107 int nPos = SHELL_FindVerbPos(pcm, idCmdFirst, hMenu, Verb);
108 if (nPos < 0)
109 return;
110 int nCount = GetMenuItemCount(hMenu);
111 BOOL bSepBefore = nPos && IsMenuSeparator(hMenu, nPos - 1);
112 BOOL bSepAfter = IsMenuSeparator(hMenu, nPos + 1);
113 if (DeleteMenu(hMenu, nPos, MF_BYPOSITION))
114 {
115 if ((bSepBefore && bSepAfter) || (bSepAfter && nPos == 0))
116 DeleteMenu(hMenu, nPos, MF_BYPOSITION);
117 else if (bSepBefore && nPos + 1 == nCount)
118 DeleteMenu(hMenu, nPos - 1, MF_BYPOSITION);
119 }
120}
121
124{
125 return (pidl == NULL || pidl->mkid.cb == 0);
126}
127
128/*************************************************************************
129 * IEILIsEqual [SHDOCVW.219]
130 */
133 _In_ LPCITEMIDLIST pidl1,
134 _In_ LPCITEMIDLIST pidl2,
135 _In_ BOOL bUnknown)
136{
137 UINT cb1 = ILGetSize(pidl1), cb2 = ILGetSize(pidl2);
138 if (cb1 == cb2 && memcmp(pidl1, pidl2, cb1) == 0)
139 return TRUE;
140
141 FIXME("%p, %p\n", pidl1, pidl2);
142 return FALSE;
143}
144
145static VOID
147{
148#define PATH_VALID_ELEMENT ( \
149 PATH_CHAR_CLASS_DOT | PATH_CHAR_CLASS_SEMICOLON | PATH_CHAR_CLASS_COMMA | \
150 PATH_CHAR_CLASS_SPACE | PATH_CHAR_CLASS_OTHER_VALID \
151)
152 PWCHAR pch, pchSrc;
153 for (pch = pchSrc = pszDisplayName; *pchSrc; ++pchSrc)
154 {
156 *pch++ = *pchSrc;
157 }
158 *pch = UNICODE_NULL;
159}
160
161static HRESULT
163 _In_ LPCWSTR pszLnkFileName,
164 _In_ PCIDLIST_ABSOLUTE pidlTarget,
165 _In_opt_ LPCWSTR pszDescription)
166{
167 HRESULT hr;
168
169 CComPtr<IShellLink> psl;
170 hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
171 IID_PPV_ARG(IShellLink, &psl));
173 return hr;
174
175 psl->SetIDList(pidlTarget);
176
177 if (pszDescription)
178 psl->SetDescription(pszDescription);
179
180 CComPtr<IPersistFile> ppf;
183 return hr;
184
185 return ppf->Save(pszLnkFileName, TRUE);
186}
187
189{
195};
196
197static LRESULT
199 _In_ HWND hwnd,
200 _In_ UINT uMsg,
203{
205 NMHDR *pHdr = (NMHDR*)lParam;
206 if (uMsg == WM_NOTIFY)
207 data.IgnoreChanges |= (pHdr->code == NM_CLICK || pHdr->code == NM_SETFOCUS); // Ignore changes from the tree
208 if (uMsg == WM_COMMAND && HIWORD(wParam) == EN_SETFOCUS)
209 data.IgnoreChanges = (HWND)lParam != data.hEdit; // Ignore changes in the tree rename edit
210 if (uMsg == WM_COMMAND && HIWORD(wParam) == EN_UPDATE && (HWND)lParam == data.hEdit && !data.IgnoreChanges)
211 {
212 SendMessageW(data.hEdit, WM_GETTEXT, MAX_PATH, (LPARAM)data.pszName); // Save user input
213 BOOL bad = FALSE;
214 for (PWSTR p = data.pszName; *p; ++p)
217 }
218 return CallWindowProcW(data.pOrgProc, hwnd, uMsg, wParam, lParam);
219}
220
221static int CALLBACK
223 _In_ HWND hwnd,
224 _In_ UINT uMsg,
226 _In_ LPARAM lpData)
227{
229 switch (uMsg)
230 {
231 case BFFM_INITIALIZED:
234 data.hEdit = FindWindowExW(hwnd, NULL, L"EDIT", NULL);
235 SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)data.pszCaption);
237 SendMessageW(data.hEdit, WM_SETTEXT, 0, (LPARAM)data.pszName); // Initialize
238 break;
239 case BFFM_SELCHANGED:
240 SendMessageW(data.hEdit, WM_SETTEXT, 0, (LPARAM)data.pszName); // Restore
241 break;
243 return TRUE;
244 }
245 return 0;
246}
247
248static HRESULT
250 _In_ HWND hwnd,
252 _Inout_ PWSTR pszTitle,
253 _In_ PCWSTR pszText)
254{
255 CComHeapPtr<ITEMIDLIST> pidlBaseDir, pidl;
256 HRESULT hr = SHParseDisplayName(pszDir, NULL, &pidlBaseDir, 0, NULL);
257 if (FAILED(hr))
258 return hr;
259
262 WCHAR szBuf[MAX_PATH];
263 *szBuf = UNICODE_NULL;
264 BROWSEINFOW info = { hwnd, pidlBaseDir, szBuf, pszText, flags, AddFavoriteDialogCallback, (LPARAM)&data };
266 if (!pidlResult)
267 return S_FALSE;
268 pidl.Attach(pidlResult);
269 return SHGetPathFromIDListW(pidl, pszDir) ? S_OK : E_FAIL;
270}
271
272/*************************************************************************
273 * AddUrlToFavorites [SHDOCVW.106]
274 */
277 _In_ HWND hwnd,
278 _In_ LPCWSTR pszUrlW,
279 _In_ LPCWSTR pszTitleW, // This parameter is not optional on Windows even though MSDN says so
280 _In_ BOOL NoUI)
281{
282 TRACE("%p, %s, %s, %d\n", hwnd, wine_dbgstr_w(pszUrlW), wine_dbgstr_w(pszTitleW), NoUI);
283
284 if (!pszUrlW || !pszTitleW)
285 return E_INVALIDARG;
286
287 CCoInit CoInit;
288 HRESULT hr = S_OK;
289 BOOL IsUrl = PathIsURLW(pszUrlW);
290 PCWSTR pszExt = IsUrl ? L".url" : L".lnk";
293
294 WCHAR szDir[MAX_PATH];
296 return E_FAIL;
297
298 if (!NoUI)
299 {
300 PCWSTR pszText = IsUrl ? pszUrlW : PathFindFileNameW(pszUrlW);
301 if ((hr = AddFavoriteDialog(hwnd, szDir, szTitle, pszText)) == S_FALSE)
302 return hr;
303 }
305
306 WCHAR szLnk[MAX_PATH * 2];
307 if (SUCCEEDED(hr))
308 hr = StringCchPrintfW(szLnk, _countof(szLnk), L"%s\\%s%s", szDir, szTitle, pszExt);
309
310 if (IsUrl && SUCCEEDED(hr))
311 {
312 // TODO: For the !NoUI case, we should ask the user if they want to overwrite if the file already exists
313 hr = WritePrivateProfileStringW(L"InternetShortcut", L"URL", pszUrlW, szLnk) ? S_OK : E_FAIL;
314 }
315 else if (SUCCEEDED(hr))
316 {
317 BOOL bMustCopy;
318 if (NoUI)
319 hr = SHGetNewLinkInfoW(pszUrlW, szDir, szLnk, &bMustCopy, 0) ? S_OK : E_FAIL;
320
321 CComHeapPtr<ITEMIDLIST> pidl;
323 hr = SHParseDisplayName(pszUrlW, NULL, &pidl, 0, NULL);
325 hr = SHDOCVW_CreateShortcut(szLnk, pidl, NULL);
326 }
327
328 if (FAILED(hr) && !NoUI)
330 return hr;
331}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define IID_PPV_ARG(Itype, ppType)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define EXTERN_C
Definition: basetyps.h:12
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1464
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_FAIL
Definition: ddrawi.h:102
ush Pos
Definition: deflate.h:92
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
HANDLE HWND
Definition: compat.h:19
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
Definition: profile.c:1453
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4133
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
Definition: path.c:1677
BOOL WINAPI PathIsURLW(const WCHAR *path)
Definition: path.c:3214
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
Definition: path.c:2197
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
Definition: main.c:1756
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:4394
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define L(x)
Definition: resources.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
const GLubyte * c
Definition: glext.h:8905
GLbitfield flags
Definition: glext.h:7161
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat GLfloat p
Definition: glext.h:8902
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
HRESULT GetCommandString([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
HRESULT GetCurFolder([out] PIDLIST_ABSOLUTE *ppidl)
HRESULT GetIDList([out] PIDLIST_ABSOLUTE *ppidl)
HRESULT CompareIDs([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define c
Definition: ke_i.h:80
#define wine_dbgstr_w
Definition: kernel32.h:34
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
#define pch(ap)
Definition: match.c:418
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define _Inout_
Definition: no_sal2.h:162
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define UNICODE_NULL
short WCHAR
Definition: pedump.c:58
char CHAR
Definition: pedump.c:57
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1682
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1548
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:941
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
#define NM_CLICK
Definition: commctrl.h:130
#define NM_SETFOCUS
Definition: commctrl.h:135
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
#define GetWindowLongPtrW
Definition: winuser.h:4983
#define MIIM_ID
Definition: winuser.h:733
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define EN_SETFOCUS
Definition: winuser.h:2056
#define EN_UPDATE
Definition: winuser.h:2057
#define WM_COMMAND
Definition: winuser.h:1768
#define MIIM_FTYPE
Definition: winuser.h:740
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_GETTEXT
Definition: winuser.h:1646
#define MFT_SEPARATOR
Definition: winuser.h:755
#define WM_NEXTDLGCTL
Definition: winuser.h:1671
#define WM_SETTEXT
Definition: winuser.h:1645
HWND WINAPI FindWindowExW(_In_opt_ HWND, _In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:3014
#define SetWindowLongPtrW
Definition: winuser.h:5512
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_NOTIFY
Definition: richedit.h:61
_In_ LPCSTR pszDir
Definition: shellapi.h:612
BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, UINT uFlags)
Definition: shellord.c:2735
#define SHELL_ErrorBox
Definition: shellutils.h:126
#define BFFM_SELCHANGED
Definition: shlobj.h:1282
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1262
#define CSIDL_FAVORITES
Definition: shlobj.h:2226
#define BFFM_VALIDATEFAILED
Definition: shlobj.h:1302
#define BFFM_ENABLEOK
Definition: shlobj.h:1289
#define BIF_USENEWUI
Definition: shlobj.h:1269
#define BFFM_INITIALIZED
Definition: shlobj.h:1281
#define BIF_EDITBOX
Definition: shlobj.h:1266
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
UINT code
Definition: winuser.h:3267
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
uint16_t * PWSTR
Definition: typedefs.h:56
int32_t INT_PTR
Definition: typedefs.h:64
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
uint16_t * LPWSTR
Definition: typedefs.h:56
char * LPSTR
Definition: typedefs.h:51
uint16_t * PWCHAR
Definition: typedefs.h:56
#define HIWORD(l)
Definition: typedefs.h:247
EXTERN_C HRESULT WINAPI AddUrlToFavorites(_In_ HWND hwnd, _In_ LPCWSTR pszUrlW, _In_ LPCWSTR pszTitleW, _In_ BOOL NoUI)
Definition: utility.cpp:276
#define PATH_VALID_ELEMENT
EXTERN_C BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: utility.cpp:123
static HRESULT AddFavoriteDialog(_In_ HWND hwnd, _Inout_ PWSTR pszDir, _Inout_ PWSTR pszTitle, _In_ PCWSTR pszText)
Definition: utility.cpp:249
static INT_PTR GetMenuItemIdByPos(HMENU hMenu, UINT Pos)
Definition: utility.cpp:16
static BOOL IsMenuSeparator(HMENU hMenu, UINT Pos)
Definition: utility.cpp:26
static int CALLBACK AddFavoriteDialogCallback(_In_ HWND hwnd, _In_ UINT uMsg, _In_ LPARAM lParam, _In_ LPARAM lpData)
Definition: utility.cpp:222
static HRESULT SHELL_CompareAbsoluteIDs(LPARAM lParam, PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
Definition: utility.cpp:58
EXTERN_C BOOL WINAPI IEILIsEqual(_In_ LPCITEMIDLIST pidl1, _In_ LPCITEMIDLIST pidl2, _In_ BOOL bUnknown)
Definition: utility.cpp:132
static HRESULT SHDOCVW_CreateShortcut(_In_ LPCWSTR pszLnkFileName, _In_ PCIDLIST_ABSOLUTE pidlTarget, _In_opt_ LPCWSTR pszDescription)
Definition: utility.cpp:162
static VOID SHDOCVW_PathDeleteInvalidChars(LPWSTR pszDisplayName)
Definition: utility.cpp:146
EXTERN_C VOID SHELL_RemoveVerb(IContextMenu *pcm, UINT idCmdFirst, HMENU hMenu, LPCWSTR Verb)
Definition: utility.cpp:105
EXTERN_C BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb)
Definition: utility.cpp:76
EXTERN_C BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
Definition: utility.cpp:70
static int SHELL_FindVerbPos(IContextMenu *pcm, UINT idCmdFirst, HMENU hMenu, LPCWSTR Verb)
Definition: utility.cpp:93
EXTERN_C HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: utility.cpp:36
static LRESULT AddFavoriteDialogProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Definition: utility.cpp:198
static UINT WPARAM LPARAM BOOL ansi
Definition: misc.c:135
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451