xref: /reactos/sdk/include/reactos/shlwapi_undoc.h (revision fd41270d)
1 /*
2  * ReactOS shlwapi
3  *
4  * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20 
21 #ifndef __SHLWAPI_UNDOC_H
22 #define __SHLWAPI_UNDOC_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif /* defined(__cplusplus) */
27 
28 #define SHELL_NO_POLICY ((DWORD)-1)
29 
30 typedef struct tagPOLICYDATA
31 {
32     DWORD policy;    /* flags value passed to SHRestricted */
33     LPCWSTR appstr;  /* application str such as "Explorer" */
34     LPCWSTR keystr;  /* name of the actual registry key / policy */
35 } POLICYDATA, *LPPOLICYDATA;
36 
37 HANDLE WINAPI SHGlobalCounterCreate(REFGUID guid);
38 PVOID WINAPI SHInterlockedCompareExchange(PVOID *dest, PVOID xchg, PVOID compare);
39 LONG WINAPI SHGlobalCounterGetValue(HANDLE hGlobalCounter);
40 LONG WINAPI SHGlobalCounterIncrement(HANDLE hGlobalCounter);
41 
42 #if FALSE && ((DLL_EXPORT_VERSION) >= _WIN32_WINNT_VISTA)
43 #define SHELL_GCOUNTER_DEFINE_GUID(name, a, b, c, d, e, f, g, h, i, j, k) enum { SHELLUNUSEDCOUNTERGUID_##name }
44 #define SHELL_GCOUNTER_DEFINE_HANDLE(name) enum { SHELLUNUSEDCOUNTERHANDLE_##name }
45 #define SHELL_GCOUNTER_PARAMETERS(handle, id) id
46 #define SHELL_GlobalCounterCreate(refguid, handle) ( (refguid), (handle), (void)0 )
47 #define SHELL_GlobalCounterIsInitialized(handle) ( (handle), TRUE )
48 #define SHELL_GlobalCounterGet(id) SHGlobalCounterGetValue_Vista(id)
49 #define SHELL_GlobalCounterIncrement(id) SHGlobalCounterIncrement_Vista(id)
50 #else
51 #define SHELL_GCOUNTER_DEFINE_GUID(name, a, b, c, d, e, f, g, h, i, j, k) const GUID name = { a, b, c, { d, e, f, g, h, i, j, k } }
52 #define SHELL_GCOUNTER_DEFINE_HANDLE(name) HANDLE name = NULL
53 #define SHELL_GCOUNTER_PARAMETERS(handle, id) handle
54 #define SHELL_GlobalCounterCreate(refguid, handle) \
55   do { \
56     EXTERN_C HANDLE SHELL_GetCachedGlobalCounter(HANDLE *phGlobalCounter, REFGUID rguid); \
57     SHELL_GetCachedGlobalCounter(&(handle), (refguid)); \
58   } while (0)
59 #define SHELL_GlobalCounterIsInitialized(handle) ( (handle) != NULL )
60 #define SHELL_GlobalCounterGet(handle) SHGlobalCounterGetValue(handle)
61 #define SHELL_GlobalCounterIncrement(handle) SHGlobalCounterIncrement(handle)
62 #endif
63 #define SHELL_GCOUNTER_DECLAREPARAMETERS(handle, id) SHELL_GCOUNTER_PARAMETERS(HANDLE handle, SHGLOBALCOUNTER id)
64 
65 DWORD WINAPI
66 SHRestrictionLookup(
67     _In_ DWORD policy,
68     _In_ LPCWSTR key,
69     _In_ const POLICYDATA *polTable,
70     _Inout_ LPDWORD polArr);
71 
72 BOOL WINAPI SHAboutInfoA(LPSTR lpszDest, DWORD dwDestLen);
73 BOOL WINAPI SHAboutInfoW(LPWSTR lpszDest, DWORD dwDestLen);
74 #ifdef UNICODE
75 #define SHAboutInfo SHAboutInfoW
76 #else
77 #define SHAboutInfo SHAboutInfoA
78 #endif
79 
80 HMODULE WINAPI SHPinDllOfCLSID(REFIID refiid);
81 HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT* pCmdText);
82 HRESULT WINAPI IUnknown_Exec(IUnknown* lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT* pvaIn, VARIANT* pvaOut);
83 LONG WINAPI SHSetWindowBits(HWND hwnd, INT offset, UINT wMask, UINT wFlags);
84 HWND WINAPI SHSetParentHwnd(HWND hWnd, HWND hWndParent);
85 HRESULT WINAPI ConnectToConnectionPoint(IUnknown *lpUnkSink, REFIID riid, BOOL bAdviseOnly, IUnknown *lpUnknown, LPDWORD lpCookie, IConnectionPoint **lppCP);
86 BOOL WINAPI SHIsSameObject(IUnknown *lpInt1, IUnknown *lpInt2);
87 BOOL WINAPI SHLoadMenuPopup(HINSTANCE hInst, LPCWSTR szName);
88 void WINAPI SHPropagateMessage(HWND hWnd, UINT uiMsgId, WPARAM wParam, LPARAM lParam, BOOL bSend);
89 DWORD WINAPI SHRemoveAllSubMenus(HMENU hMenu);
90 UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable);
91 DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck);
92 DWORD WINAPI SHRegisterClassA(WNDCLASSA *wndclass);
93 BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, DWORD grfKeyState, PPOINTL lpPt, DWORD* pdwEffect);
94 DWORD WINAPI SHGetCurColorRes(void);
95 HMENU WINAPI SHGetMenuFromID(HMENU hMenu, UINT uID);
96 DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID);
97 DWORD WINAPI SHWaitForSendMessageThread(HANDLE hand, DWORD dwTimeout);
98 DWORD WINAPI SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam);
99 HRESULT WINAPI SHIsExpandableFolder(LPSHELLFOLDER lpFolder, LPCITEMIDLIST pidl);
100 DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef);
101 int WINAPI SHSearchMapInt(const int *lpKeys, const int *lpValues, int iLen, int iKey);
102 VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown);
103 HRESULT WINAPI MayQSForward(IUnknown* lpUnknown, PVOID lpReserved, REFGUID riidCmdGrp, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText);
104 HRESULT WINAPI MayExecForward(IUnknown* lpUnknown, INT iUnk, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
105 HRESULT WINAPI IsQSForward(REFGUID pguidCmdGroup,ULONG cCmds, OLECMD *prgCmds);
106 BOOL WINAPI SHIsChildOrSelf(HWND hParent, HWND hChild);
107 HRESULT WINAPI SHForwardContextMenuMsg(IUnknown* pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult, BOOL useIContextMenu2);
108 VOID WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id);
109 
110 HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID guid, LPCWSTR lpszValue, BOOL bUseHKCU, BOOL bCreate, PHKEY phKey);
111 
112 BOOL WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewItem);
113 BOOL WINAPI SHRemoveDataBlock(LPDBLIST* lppList, DWORD dwSignature);
114 DATABLOCK_HEADER* WINAPI SHFindDataBlock(LPDBLIST lpList, DWORD dwSignature);
115 HRESULT WINAPI SHWriteDataBlockList(IStream* lpStream, LPDBLIST lpList);
116 HRESULT WINAPI SHReadDataBlockList(IStream* lpStream, LPDBLIST* lppList);
117 VOID WINAPI SHFreeDataBlockList(LPDBLIST lpList);
118 
119 LONG
120 WINAPI
121 RegCreateKeyExWrapW(
122     _In_ HKEY hKey,
123     _In_ LPCWSTR lpSubKey,
124     _In_ DWORD Reserved,
125     _In_opt_ LPWSTR lpClass,
126     _In_ DWORD dwOptions,
127     _In_ REGSAM samDesired,
128     _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
129     _Out_ PHKEY phkResult,
130     _Out_opt_ LPDWORD lpdwDisposition);
131 
132 /* Redirected to kernel32.ExpandEnvironmentStringsA/W */
133 DWORD WINAPI SHExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD);
134 DWORD WINAPI SHExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD);
135 #ifdef UNICODE
136 #define SHExpandEnvironmentStrings SHExpandEnvironmentStringsW
137 #else
138 #define SHExpandEnvironmentStrings SHExpandEnvironmentStringsA
139 #endif
140 
141 /* Redirected to userenv.ExpandEnvironmentStringsForUserA/W */
142 #if (WINVER >= 0x0500)
143 BOOL WINAPI SHExpandEnvironmentStringsForUserA(HANDLE, LPCSTR, LPSTR, DWORD);
144 BOOL WINAPI SHExpandEnvironmentStringsForUserW(HANDLE, LPCWSTR, LPWSTR, DWORD);
145 #ifdef UNICODE
146 #define SHExpandEnvironmentStringsForUser SHExpandEnvironmentStringsForUserW
147 #else
148 #define SHExpandEnvironmentStringsForUser SHExpandEnvironmentStringsForUserA
149 #endif
150 #endif
151 
152 
153 BOOL WINAPI SHIsEmptyStream(IStream*);
154 HRESULT WINAPI IStream_Size(IStream *lpStream, ULARGE_INTEGER* lpulSize);
155 HRESULT WINAPI SHInvokeDefaultCommand(HWND,IShellFolder*,LPCITEMIDLIST);
156 HRESULT WINAPI SHPropertyBag_ReadType(IPropertyBag *ppb, LPCWSTR pszPropName, VARIANTARG *pvarg, VARTYPE vt);
157 HRESULT WINAPI SHPropertyBag_ReadBOOL(IPropertyBag *ppb, LPCWSTR pszPropName, BOOL *pbValue);
158 BOOL WINAPI SHPropertyBag_ReadBOOLOld(IPropertyBag *ppb, LPCWSTR pszPropName, BOOL bDefValue);
159 HRESULT WINAPI SHPropertyBag_ReadSHORT(IPropertyBag *ppb, LPCWSTR pszPropName, SHORT *psValue);
160 HRESULT WINAPI SHPropertyBag_ReadInt(IPropertyBag *ppb, LPCWSTR pszPropName, LPINT pnValue);
161 HRESULT WINAPI SHPropertyBag_ReadLONG(IPropertyBag *ppb, LPCWSTR pszPropName, LPLONG pValue);
162 HRESULT WINAPI SHPropertyBag_ReadDWORD(IPropertyBag *ppb, LPCWSTR pszPropName, DWORD *pdwValue);
163 HRESULT WINAPI SHPropertyBag_ReadBSTR(IPropertyBag *ppb, LPCWSTR pszPropName, BSTR *pbstr);
164 HRESULT WINAPI SHPropertyBag_ReadStr(IPropertyBag *ppb, LPCWSTR pszPropName, LPWSTR pszDst, int cchMax);
165 HRESULT WINAPI SHPropertyBag_ReadPOINTL(IPropertyBag *ppb, LPCWSTR pszPropName, POINTL *pptl);
166 HRESULT WINAPI SHPropertyBag_ReadPOINTS(IPropertyBag *ppb, LPCWSTR pszPropName, POINTS *ppts);
167 HRESULT WINAPI SHPropertyBag_ReadRECTL(IPropertyBag *ppb, LPCWSTR pszPropName, RECTL *prcl);
168 HRESULT WINAPI SHPropertyBag_ReadGUID(IPropertyBag *ppb, LPCWSTR pszPropName, GUID *pguid);
169 HRESULT WINAPI SHPropertyBag_ReadStream(IPropertyBag *ppb, LPCWSTR pszPropName, IStream **ppStream);
170 
171 INT WINAPI
172 SHGetPerScreenResName(
173     _Out_writes_(cchBuffer) LPWSTR pszBuffer,
174     _In_ INT cchBuffer,
175     _In_ DWORD dwReserved);
176 
177 HRESULT WINAPI SHPropertyBag_Delete(IPropertyBag *ppb, LPCWSTR pszPropName);
178 HRESULT WINAPI SHPropertyBag_WriteBOOL(IPropertyBag *ppb, LPCWSTR pszPropName, BOOL bValue);
179 HRESULT WINAPI SHPropertyBag_WriteSHORT(IPropertyBag *ppb, LPCWSTR pszPropName, SHORT sValue);
180 HRESULT WINAPI SHPropertyBag_WriteInt(IPropertyBag *ppb, LPCWSTR pszPropName, INT nValue);
181 HRESULT WINAPI SHPropertyBag_WriteLONG(IPropertyBag *ppb, LPCWSTR pszPropName, LONG lValue);
182 HRESULT WINAPI SHPropertyBag_WriteDWORD(IPropertyBag *ppb, LPCWSTR pszPropName, DWORD dwValue);
183 HRESULT WINAPI SHPropertyBag_WriteStr(IPropertyBag *ppb, LPCWSTR pszPropName, LPCWSTR pszValue);
184 HRESULT WINAPI SHPropertyBag_WriteGUID(IPropertyBag *ppb, LPCWSTR pszPropName, const GUID *pguid);
185 HRESULT WINAPI SHPropertyBag_WriteStream(IPropertyBag *ppb, LPCWSTR pszPropName, IStream *pStream);
186 HRESULT WINAPI SHPropertyBag_WritePOINTL(IPropertyBag *ppb, LPCWSTR pszPropName, const POINTL *pptl);
187 HRESULT WINAPI SHPropertyBag_WritePOINTS(IPropertyBag *ppb, LPCWSTR pszPropName, const POINTS *ppts);
188 HRESULT WINAPI SHPropertyBag_WriteRECTL(IPropertyBag *ppb, LPCWSTR pszPropName, const RECTL *prcl);
189 
190 HRESULT WINAPI SHCreatePropertyBagOnMemory(_In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj);
191 
192 HRESULT WINAPI
193 SHCreatePropertyBagOnRegKey(
194     _In_ HKEY hKey,
195     _In_z_ LPCWSTR pszSubKey,
196     _In_ DWORD dwMode,
197     _In_ REFIID riid,
198     _Out_ void **ppvObj);
199 
200 HRESULT WINAPI
201 SHCreatePropertyBagOnProfileSection(
202     _In_z_ LPCWSTR lpFileName,
203     _In_opt_z_ LPCWSTR pszSection,
204     _In_ DWORD dwMode,
205     _In_ REFIID riid,
206     _Out_ void **ppvObj);
207 
208 EXTERN_C HRESULT WINAPI
209 IUnknown_QueryServicePropertyBag(
210     _In_ IUnknown *punk,
211     _In_ long flags,
212     _In_ REFIID riid,
213     _Outptr_ void **ppvObj);
214 
215 HWND WINAPI SHCreateWorkerWindowA(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle,
216                                   DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra);
217 
218 HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle,
219                                   DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra);
220 #ifdef UNICODE
221 #define SHCreateWorkerWindow SHCreateWorkerWindowW
222 #else
223 #define SHCreateWorkerWindow SHCreateWorkerWindowA
224 #endif
225 
226 HRESULT WINAPI IUnknown_SetOwner(IUnknown *iface, IUnknown *pUnk);
227 HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *lpClassId);
228 HRESULT WINAPI IUnknown_QueryServiceExec(IUnknown *lpUnknown, REFIID service, const GUID *group, DWORD cmdId, DWORD cmdOpt, VARIANT *pIn, VARIANT *pOut);
229 HRESULT WINAPI IUnknown_UIActivateIO(IUnknown *unknown, BOOL activate, LPMSG msg);
230 HRESULT WINAPI IUnknown_TranslateAcceleratorOCS(IUnknown *lpUnknown, LPMSG lpMsg, DWORD dwModifiers);
231 HRESULT WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, BOOL fGotFocus);
232 HRESULT WINAPI IUnknown_HandleIRestrict(LPUNKNOWN lpUnknown, PVOID lpArg1, PVOID lpArg2, PVOID lpArg3, PVOID lpArg4);
233 HRESULT WINAPI IUnknown_HasFocusIO(IUnknown * punk);
234 HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown * punk, MSG * pmsg);
235 HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObject, BOOL bFocus);
236 
237 DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, INT iLen);
238 INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen);
239 
240 DWORD WINAPI SHAnsiToUnicodeCP(DWORD dwCp, LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen);
241 DWORD WINAPI SHUnicodeToAnsiCP(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr, int dstlen);
242 
243 PVOID WINAPI SHLockSharedEx(HANDLE hData, DWORD dwProcessId, BOOL bWriteAccess);
244 
245 DWORD WINAPI SHGetValueGoodBootA(HKEY hkey, LPCSTR pSubKey, LPCSTR pValue,
246                                  LPDWORD pwType, LPVOID pvData, LPDWORD pbData);
247 DWORD WINAPI SHGetValueGoodBootW(HKEY hkey, LPCWSTR pSubKey, LPCWSTR pValue,
248                                  LPDWORD pwType, LPVOID pvData, LPDWORD pbData);
249 HRESULT WINAPI SHLoadRegUIStringA(HKEY hkey, LPCSTR value, LPSTR buf, DWORD size);
250 HRESULT WINAPI SHLoadRegUIStringW(HKEY hkey, LPCWSTR value, LPWSTR buf, DWORD size);
251 #ifdef UNICODE
252 #define SHGetValueGoodBoot SHGetValueGoodBootW
253 #define SHLoadRegUIString  SHLoadRegUIStringW
254 #else
255 #define SHGetValueGoodBoot SHGetValueGoodBootA
256 #define SHLoadRegUIString  SHLoadRegUIStringA
257 #endif
258 
259 DWORD WINAPI
260 SHGetIniStringW(
261     _In_z_ LPCWSTR appName,
262     _In_z_ LPCWSTR keyName,
263     _Out_writes_to_(outLen, return + 1) LPWSTR out,
264     _In_ DWORD outLen,
265     _In_z_ LPCWSTR filename);
266 
267 BOOL WINAPI
268 SHSetIniStringW(
269     _In_z_ LPCWSTR appName,
270     _In_z_ LPCWSTR keyName,
271     _In_opt_z_ LPCWSTR str,
272     _In_z_ LPCWSTR filename);
273 
274 DWORD WINAPI
275 SHGetIniStringUTF7W(
276     _In_opt_z_ LPCWSTR lpAppName,
277     _In_z_ LPCWSTR lpKeyName,
278     _Out_writes_to_(nSize, return + 1) _Post_z_ LPWSTR lpReturnedString,
279     _In_ DWORD nSize,
280     _In_z_ LPCWSTR lpFileName);
281 
282 BOOL WINAPI
283 SHSetIniStringUTF7W(
284     _In_z_ LPCWSTR lpAppName,
285     _In_z_ LPCWSTR lpKeyName,
286     _In_opt_z_ LPCWSTR lpString,
287     _In_z_ LPCWSTR lpFileName);
288 
289 enum _shellkey_flags
290 {
291     SHKEY_Root_HKCU = 0x1,
292     SHKEY_Root_HKLM = 0x2,
293     SHKEY_Key_Explorer = 0x00,
294     SHKEY_Key_Shell = 0x10,
295     SHKEY_Key_ShellNoRoam = 0x20,
296     SHKEY_Key_Classes = 0x30,
297     SHKEY_Subkey_Default = 0x0000,
298     SHKEY_Subkey_ResourceName = 0x1000,
299     SHKEY_Subkey_Handlers = 0x2000,
300     SHKEY_Subkey_Associations = 0x3000,
301     SHKEY_Subkey_Volatile = 0x4000,
302     SHKEY_Subkey_MUICache = 0x5000,
303     SHKEY_Subkey_FileExts = 0x6000
304 };
305 
306 HKEY WINAPI SHGetShellKey(DWORD flags, LPCWSTR sub_key, BOOL create);
307 
308 int
309 WINAPIV
310 ShellMessageBoxWrapW(
311   _In_opt_ HINSTANCE hAppInst,
312   _In_opt_ HWND hWnd,
313   _In_ LPCWSTR lpcText,
314   _In_opt_ LPCWSTR lpcTitle,
315   _In_ UINT fuStyle,
316   ...);
317 
318 /* dwWhich flags for PathFileExistsDefExtW, PathFindOnPathExW,
319  * and PathFileExistsDefExtAndAttributesW */
320 #define WHICH_PIF       (1 << 0)
321 #define WHICH_COM       (1 << 1)
322 #define WHICH_EXE       (1 << 2)
323 #define WHICH_BAT       (1 << 3)
324 #define WHICH_LNK       (1 << 4)
325 #define WHICH_CMD       (1 << 5)
326 #define WHICH_OPTIONAL  (1 << 6)
327 
328 #define WHICH_DEFAULT   (WHICH_PIF | WHICH_COM | WHICH_EXE | WHICH_BAT | WHICH_LNK | WHICH_CMD)
329 
330 /* dwClass flags for PathIsValidCharA and PathIsValidCharW */
331 #define PATH_CHAR_CLASS_LETTER      0x00000001
332 #define PATH_CHAR_CLASS_ASTERIX     0x00000002
333 #define PATH_CHAR_CLASS_DOT         0x00000004
334 #define PATH_CHAR_CLASS_BACKSLASH   0x00000008
335 #define PATH_CHAR_CLASS_COLON       0x00000010
336 #define PATH_CHAR_CLASS_SEMICOLON   0x00000020
337 #define PATH_CHAR_CLASS_COMMA       0x00000040
338 #define PATH_CHAR_CLASS_SPACE       0x00000080
339 #define PATH_CHAR_CLASS_OTHER_VALID 0x00000100
340 #define PATH_CHAR_CLASS_DOUBLEQUOTE 0x00000200
341 #define PATH_CHAR_CLASS_INVALID     0x00000000
342 #define PATH_CHAR_CLASS_ANY         0xffffffff
343 
344 BOOL WINAPI PathFileExistsDefExtW(LPWSTR lpszPath, DWORD dwWhich);
345 
346 BOOL WINAPI
347 PathFileExistsDefExtAndAttributesW(
348     _Inout_ LPWSTR pszPath,
349     _In_ DWORD dwWhich,
350     _Out_opt_ LPDWORD pdwFileAttributes);
351 
352 BOOL WINAPI PathFindOnPathExW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs, DWORD dwWhich);
353 VOID WINAPI FixSlashesAndColonW(LPWSTR);
354 BOOL WINAPI PathIsValidCharA(char c, DWORD dwClass);
355 BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD dwClass);
356 BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl, LPWSTR pszPath);
357 
358 BOOL WINAPI
359 IContextMenu_Invoke(
360     _In_ IContextMenu *pContextMenu,
361     _In_ HWND hwnd,
362     _In_ LPCSTR lpVerb,
363     _In_ UINT uFlags);
364 
365 DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid);
366 
367 #define SHACF_WIN95SHLEXEC 0x00000200 /* Geoff Chappell */
368 DWORD WINAPI SHGetAppCompatFlags(DWORD dwMask);
369 
370 /*
371  * HACK! These functions are conflicting with <shobjidl.h> inline functions...
372  * We provide a macro option SHLWAPI_ISHELLFOLDER_HELPERS for using these functions.
373  */
374 #ifdef SHLWAPI_ISHELLFOLDER_HELPERS
375 HRESULT WINAPI
376 IShellFolder_GetDisplayNameOf(
377     _In_ IShellFolder *psf,
378     _In_ LPCITEMIDLIST pidl,
379     _In_ SHGDNF uFlags,
380     _Out_ LPSTRRET lpName,
381     _In_ DWORD dwRetryFlags);
382 
383 /* Flags for IShellFolder_GetDisplayNameOf */
384 #define SFGDNO_RETRYWITHFORPARSING  0x00000001
385 #define SFGDNO_RETRYALWAYS          0x80000000
386 
387 HRESULT WINAPI
388 IShellFolder_ParseDisplayName(
389     _In_ IShellFolder *psf,
390     _In_ HWND hwndOwner,
391     _In_ LPBC pbcReserved,
392     _In_ LPOLESTR lpszDisplayName,
393     _Out_ ULONG *pchEaten,
394     _Out_ PIDLIST_RELATIVE *ppidl,
395     _Out_ ULONG *pdwAttributes);
396 
397 EXTERN_C HRESULT WINAPI
398 IShellFolder_CompareIDs(
399     _In_ IShellFolder *psf,
400     _In_ LPARAM lParam,
401     _In_ PCUIDLIST_RELATIVE pidl1,
402     _In_ PCUIDLIST_RELATIVE pidl2);
403 #endif /* SHLWAPI_ISHELLFOLDER_HELPERS */
404 
405 #ifdef __cplusplus
406 } /* extern "C" */
407 #endif /* defined(__cplusplus) */
408 
409 #endif /* __SHLWAPI_UNDOC_H */
410