1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_SHLWAPI
7 #define _INC_SHLWAPI
8 
9 #include <_mingw_unicode.h>
10 #include <winapifamily.h>
11 
12 #ifndef NOSHLWAPI
13 
14 #include <objbase.h>
15 #include <shtypes.h>
16 
17 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
18 #ifndef WINSHLWAPI
19 #if !defined(_SHLWAPI_)
20 #define LWSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT WINAPI
21 #define LWSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type WINAPI
22 #define LWSTDAPIV EXTERN_C DECLSPEC_IMPORT HRESULT STDAPIVCALLTYPE
23 #define LWSTDAPIV_(type) EXTERN_C DECLSPEC_IMPORT type STDAPIVCALLTYPE
24 #else
25 #define LWSTDAPI STDAPI
26 #define LWSTDAPI_(type) STDAPI_(type)
27 #define LWSTDAPIV STDAPIV
28 #define LWSTDAPIV_(type) STDAPIV_(type)
29 #endif
30 #endif
31 
32 #ifndef _WINRESRC_
33 #ifndef _WIN32_IE
34 #define _WIN32_IE 0x0601
35 #endif
36 #endif
37 
38 #include <pshpack8.h>
39 
40 #ifndef __IBindCtx_FWD_DEFINED__
41 #define __IBindCtx_FWD_DEFINED__
42   typedef interface IBindCtx IBindCtx;
43 #endif
44 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 
49 #ifndef NO_SHLWAPI_STRFCNS
50   LWSTDAPI_(LPSTR) StrChrA(LPCSTR lpStart,WORD wMatch);
51   LWSTDAPI_(LPWSTR) StrChrW(LPCWSTR lpStart,WCHAR wMatch);
52   LWSTDAPI_(LPSTR) StrChrIA(LPCSTR lpStart,WORD wMatch);
53   LWSTDAPI_(LPWSTR) StrChrIW(LPCWSTR lpStart,WCHAR wMatch);
54   LWSTDAPI_(PCWSTR) StrChrNW(PCWSTR pszStart, WCHAR wMatch, UINT cchMax);
55   LWSTDAPI_(PCWSTR) StrChrNIW(PCWSTR pszStart, WCHAR wMatch, UINT cchMax);
56   LWSTDAPI_(int) StrCmpNA(LPCSTR lpStr1,LPCSTR lpStr2,int nChar);
57   LWSTDAPI_(int) StrCmpNW(LPCWSTR lpStr1,LPCWSTR lpStr2,int nChar);
58   LWSTDAPI_(int) StrCmpNIA(LPCSTR lpStr1,LPCSTR lpStr2,int nChar);
59   LWSTDAPI_(int) StrCmpNIW(LPCWSTR lpStr1,LPCWSTR lpStr2,int nChar);
60 
61   LWSTDAPI_(int) StrCmpNCA(LPCSTR pszStr1, LPCSTR pszStr2, int nChar);
62   LWSTDAPI_(int) StrCmpNCW(LPCWSTR pszStr1, LPCWSTR pszStr2, int nChar);
63 
64 #define StrCmpNC __MINGW_NAME_AW(StrCmpNC)
65 
66   LWSTDAPI_(int)  StrCmpNICA(LPCSTR pszStr1, LPCSTR pszStr2, int nChar);
67   LWSTDAPI_(int)  StrCmpNICW(LPCWSTR pszStr1, LPCWSTR pszStr2, int nChar);
68 
69 #define StrCmpNIC __MINGW_NAME_AW(StrCmpNIC)
70 
71   LWSTDAPI_(int) StrCSpnA(LPCSTR lpStr,LPCSTR lpSet);
72   LWSTDAPI_(int) StrCSpnW(LPCWSTR lpStr,LPCWSTR lpSet);
73   LWSTDAPI_(int) StrCSpnIA(LPCSTR lpStr,LPCSTR lpSet);
74   LWSTDAPI_(int) StrCSpnIW(LPCWSTR lpStr,LPCWSTR lpSet);
75   LWSTDAPI_(LPSTR) StrDupA(LPCSTR lpSrch);
76   LWSTDAPI_(LPWSTR) StrDupW(LPCWSTR lpSrch);
77   LWSTDAPI_(LPSTR) StrFormatByteSizeA(DWORD dw,LPSTR szBuf,UINT uiBufSize);
78   LWSTDAPI_(LPSTR) StrFormatByteSize64A(LONGLONG qdw,LPSTR szBuf,UINT uiBufSize);
79   LWSTDAPI_(LPWSTR) StrFormatByteSizeW(LONGLONG qdw,LPWSTR szBuf,UINT uiBufSize);
80   LWSTDAPI_(LPWSTR) StrFormatKBSizeW(LONGLONG qdw,LPWSTR szBuf,UINT uiBufSize);
81   LWSTDAPI_(LPSTR) StrFormatKBSizeA(LONGLONG qdw,LPSTR szBuf,UINT uiBufSize);
82   LWSTDAPI_(int) StrFromTimeIntervalA(LPSTR pszOut,UINT cchMax,DWORD dwTimeMS,int digits);
83   LWSTDAPI_(int) StrFromTimeIntervalW(LPWSTR pszOut,UINT cchMax,DWORD dwTimeMS,int digits);
84   LWSTDAPI_(WINBOOL) StrIsIntlEqualA(WINBOOL fCaseSens,LPCSTR lpString1,LPCSTR lpString2,int nChar);
85   LWSTDAPI_(WINBOOL) StrIsIntlEqualW(WINBOOL fCaseSens,LPCWSTR lpString1,LPCWSTR lpString2,int nChar);
86   LWSTDAPI_(LPSTR) StrNCatA(LPSTR psz1,LPCSTR psz2,int cchMax);
87   LWSTDAPI_(LPWSTR) StrNCatW(LPWSTR psz1,LPCWSTR psz2,int cchMax);
88   LWSTDAPI_(LPSTR) StrPBrkA(LPCSTR psz,LPCSTR pszSet);
89   LWSTDAPI_(LPWSTR) StrPBrkW(LPCWSTR psz,LPCWSTR pszSet);
90   LWSTDAPI_(LPSTR) StrRChrA(LPCSTR lpStart,LPCSTR lpEnd,WORD wMatch);
91   LWSTDAPI_(LPWSTR) StrRChrW(LPCWSTR lpStart,LPCWSTR lpEnd,WCHAR wMatch);
92   LWSTDAPI_(LPSTR) StrRChrIA(LPCSTR lpStart,LPCSTR lpEnd,WORD wMatch);
93   LWSTDAPI_(LPWSTR) StrRChrIW(LPCWSTR lpStart,LPCWSTR lpEnd,WCHAR wMatch);
94   LWSTDAPI_(LPSTR) StrRStrIA(LPCSTR lpSource,LPCSTR lpLast,LPCSTR lpSrch);
95   LWSTDAPI_(LPWSTR) StrRStrIW(LPCWSTR lpSource,LPCWSTR lpLast,LPCWSTR lpSrch);
96   LWSTDAPI_(int) StrSpnA(LPCSTR psz,LPCSTR pszSet);
97   LWSTDAPI_(int) StrSpnW(LPCWSTR psz,LPCWSTR pszSet);
98   LWSTDAPI_(LPSTR) StrStrA(LPCSTR lpFirst,LPCSTR lpSrch);
99   LWSTDAPI_(LPWSTR) StrStrW(LPCWSTR lpFirst,LPCWSTR lpSrch);
100   LWSTDAPI_(LPSTR) StrStrIA(LPCSTR lpFirst,LPCSTR lpSrch);
101   LWSTDAPI_(LPWSTR) StrStrIW(LPCWSTR lpFirst,LPCWSTR lpSrch);
102   LWSTDAPI_(PCWSTR) StrStrNW(PCWSTR pszFirst, PCWSTR pszSrch, UINT cchMax);
103   LWSTDAPI_(PCWSTR) StrStrNIW(PCWSTR pszFirst, PCWSTR pszSrch, UINT cchMax);
104   LWSTDAPI_(int) StrToIntA(LPCSTR lpSrc);
105   LWSTDAPI_(int) StrToIntW(LPCWSTR lpSrc);
106 
107 #define STIF_DEFAULT __MSABI_LONG(0x00000000)
108 #define STIF_SUPPORT_HEX __MSABI_LONG(0x00000001)
109   typedef int STIF_FLAGS;
110 
111   LWSTDAPI_(WINBOOL) StrToIntExA(LPCSTR pszString,STIF_FLAGS dwFlags,int *piRet);
112   LWSTDAPI_(WINBOOL) StrToIntExW(LPCWSTR pszString,STIF_FLAGS dwFlags,int *piRet);
113 #if (_WIN32_IE >= 0x0600)
114   LWSTDAPI_(WINBOOL) StrToInt64ExA(LPCSTR pszString,STIF_FLAGS dwFlags,LONGLONG *pllRet);
115   LWSTDAPI_(WINBOOL) StrToInt64ExW(LPCWSTR pszString,STIF_FLAGS dwFlags,LONGLONG *pllRet);
116 #endif
117   LWSTDAPI_(WINBOOL) StrTrimA(LPSTR psz,LPCSTR pszTrimChars);
118   LWSTDAPI_(WINBOOL) StrTrimW(LPWSTR psz,LPCWSTR pszTrimChars);
119   LWSTDAPI_(LPWSTR) StrCatW(LPWSTR psz1,LPCWSTR psz2);
120   LWSTDAPI_(int) StrCmpW(LPCWSTR psz1,LPCWSTR psz2);
121   LWSTDAPI_(int) StrCmpIW(LPCWSTR psz1,LPCWSTR psz2);
122   LWSTDAPI_(LPWSTR) StrCpyW(LPWSTR psz1,LPCWSTR psz2);
123   LWSTDAPI_(LPWSTR) StrCpyNW(LPWSTR psz1,LPCWSTR psz2,int cchMax);
124   LWSTDAPI_(LPWSTR) StrCatBuffW(LPWSTR pszDest,LPCWSTR pszSrc,int cchDestBuffSize);
125   LWSTDAPI_(LPSTR) StrCatBuffA(LPSTR pszDest,LPCSTR pszSrc,int cchDestBuffSize);
126   LWSTDAPI_(WINBOOL) ChrCmpIA(WORD w1,WORD w2);
127   LWSTDAPI_(WINBOOL) ChrCmpIW(WCHAR w1,WCHAR w2);
128   LWSTDAPI_(int) wvnsprintfA(LPSTR lpOut,int cchLimitIn,LPCSTR lpFmt,va_list arglist);
129   LWSTDAPI_(int) wvnsprintfW(LPWSTR lpOut,int cchLimitIn,LPCWSTR lpFmt,va_list arglist);
130   LWSTDAPIV_(int) wnsprintfA(LPSTR lpOut,int cchLimitIn,LPCSTR lpFmt,...);
131   LWSTDAPIV_(int) wnsprintfW(LPWSTR lpOut,int cchLimitIn,LPCWSTR lpFmt,...);
132 
133 #define StrIntlEqNA(s1,s2,nChar) StrIsIntlEqualA(TRUE,s1,s2,nChar)
134 #define StrIntlEqNW(s1,s2,nChar) StrIsIntlEqualW(TRUE,s1,s2,nChar)
135 #define StrIntlEqNIA(s1,s2,nChar) StrIsIntlEqualA(FALSE,s1,s2,nChar)
136 #define StrIntlEqNIW(s1,s2,nChar) StrIsIntlEqualW(FALSE,s1,s2,nChar)
137 
138 #define StrRetToStr __MINGW_NAME_AW(StrRetToStr)
139 #define StrRetToBuf __MINGW_NAME_AW(StrRetToBuf)
140 #define SHStrDup __MINGW_NAME_AW(SHStrDup)
141 
142   LWSTDAPI StrRetToStrA(STRRET *pstr,LPCITEMIDLIST pidl,LPSTR *ppsz);
143   LWSTDAPI StrRetToStrW(STRRET *pstr,LPCITEMIDLIST pidl,LPWSTR *ppsz);
144   LWSTDAPI StrRetToBufA(STRRET *pstr,LPCITEMIDLIST pidl,LPSTR pszBuf,UINT cchBuf);
145   LWSTDAPI StrRetToBufW(STRRET *pstr,LPCITEMIDLIST pidl,LPWSTR pszBuf,UINT cchBuf);
146   LWSTDAPI StrRetToBSTR(STRRET *pstr,LPCITEMIDLIST pidl,BSTR *pbstr);
147   LWSTDAPI SHStrDupA(LPCSTR psz,WCHAR **ppwsz);
148   LWSTDAPI SHStrDupW(LPCWSTR psz,WCHAR **ppwsz);
149 
150 #ifdef __cplusplus
SHLocalStrDupW(PCWSTR psz,PWSTR * ppsz)151   inline HRESULT SHLocalStrDupW(PCWSTR psz, PWSTR *ppsz) {
152     *ppsz = StrDupW(psz);
153     return *ppsz ? S_OK : E_OUTOFMEMORY;
154   }
155 
SHLocalStrDupA(PCSTR psz,PSTR * ppsz)156   inline HRESULT SHLocalStrDupA(PCSTR psz, PSTR *ppsz) {
157     *ppsz = StrDupA(psz);
158     return *ppsz ? S_OK : E_OUTOFMEMORY;
159   }
160 
161 #define SHLocalStrDup __MINGW_NAME_AW(SHLocalStrDup)
162 #endif
163 
164   LWSTDAPI_(int) StrCmpLogicalW(LPCWSTR psz1,LPCWSTR psz2);
165   LWSTDAPI_(DWORD) StrCatChainW(LPWSTR pszDst,DWORD cchDst,DWORD ichAt,LPCWSTR pszSrc);
166   LWSTDAPI SHLoadIndirectString(LPCWSTR pszSource,LPWSTR pszOutBuf,UINT cchOutBuf,void **ppvReserved);
167 
168 #if (_WIN32_IE >= 0x0603)
169   LWSTDAPI_(WINBOOL) IsCharSpaceA(CHAR wch);
170   LWSTDAPI_(WINBOOL) IsCharSpaceW(WCHAR wch);
171 
172 #define IsCharSpace __MINGW_NAME_AW(IsCharSpace)
173 
174   LWSTDAPI_(int) StrCmpCA(LPCSTR pszStr1,LPCSTR pszStr2);
175   LWSTDAPI_(int) StrCmpCW(LPCWSTR pszStr1,LPCWSTR pszStr2);
176 
177 #define StrCmpC __MINGW_NAME_AW(StrCmpC)
178 
179   LWSTDAPI_(int) StrCmpICA(LPCSTR pszStr1,LPCSTR pszStr2);
180   LWSTDAPI_(int) StrCmpICW(LPCWSTR pszStr1,LPCWSTR pszStr2);
181 
182 #define StrCmpIC __MINGW_NAME_AW(StrCmpIC)
183 #endif
184 
185 #define StrChr __MINGW_NAME_AW(StrChr)
186 #define StrRChr __MINGW_NAME_AW(StrRChr)
187 #define StrChrI __MINGW_NAME_AW(StrChrI)
188 #define StrRChrI __MINGW_NAME_AW(StrRChrI)
189 #define StrCmpN __MINGW_NAME_AW(StrCmpN)
190 #define StrCmpNI __MINGW_NAME_AW(StrCmpNI)
191 #define StrStr __MINGW_NAME_AW(StrStr)
192 
193 #define StrStrI __MINGW_NAME_AW(StrStrI)
194 #define StrDup __MINGW_NAME_AW(StrDup)
195 #define StrRStrI __MINGW_NAME_AW(StrRStrI)
196 #define StrCSpn __MINGW_NAME_AW(StrCSpn)
197 #define StrCSpnI __MINGW_NAME_AW(StrCSpnI)
198 #define StrSpn __MINGW_NAME_AW(StrSpn)
199 #define StrToInt __MINGW_NAME_AW(StrToInt)
200 #define StrPBrk __MINGW_NAME_AW(StrPBrk)
201 #define StrToIntEx __MINGW_NAME_AW(StrToIntEx)
202 
203 #if (_WIN32_IE >= 0x0600)
204 #define StrToInt64Ex __MINGW_NAME_AW(StrToInt64Ex)
205 #endif
206 
207 #define StrFromTimeInterval __MINGW_NAME_AW(StrFromTimeInterval)
208 #define StrIntlEqN __MINGW_NAME_AW(StrIntlEqN)
209 #define StrIntlEqNI __MINGW_NAME_AW(StrIntlEqNI)
210 #define StrFormatByteSize __MINGW_NAME_AW(StrFormatByteSize)
211 #define StrFormatKBSize __MINGW_NAME_AW(StrFormatKBSize)
212 
213 #define StrNCat __MINGW_NAME_AW(StrNCat)
214 #define StrTrim __MINGW_NAME_AW(StrTrim)
215 #define StrCatBuff __MINGW_NAME_AW(StrCatBuff)
216 #define ChrCmpI __MINGW_NAME_AW(ChrCmpI)
217 #define wvnsprintf __MINGW_NAME_AW(wvnsprintf)
218 #define wnsprintf __MINGW_NAME_AW(wnsprintf)
219 #define StrIsIntlEqual __MINGW_NAME_AW(StrIsIntlEqual)
220 
221 #if defined(UNICODE)
222 #define StrFormatByteSize64 StrFormatByteSizeW
223 #else
224 #define StrFormatByteSize64 StrFormatByteSize64A
225 #endif
226 
227   LWSTDAPI_(WINBOOL) IntlStrEqWorkerA(WINBOOL fCaseSens,LPCSTR lpString1,LPCSTR lpString2,int nChar);
228   LWSTDAPI_(WINBOOL) IntlStrEqWorkerW(WINBOOL fCaseSens,LPCWSTR lpString1,LPCWSTR lpString2,int nChar);
229 
230 #define IntlStrEqNA(s1,s2,nChar) IntlStrEqWorkerA(TRUE,s1,s2,nChar)
231 #define IntlStrEqNW(s1,s2,nChar) IntlStrEqWorkerW(TRUE,s1,s2,nChar)
232 #define IntlStrEqNIA(s1,s2,nChar) IntlStrEqWorkerA(FALSE,s1,s2,nChar)
233 #define IntlStrEqNIW(s1,s2,nChar) IntlStrEqWorkerW(FALSE,s1,s2,nChar)
234 
235 #define IntlStrEqN __MINGW_NAME_AW(IntlStrEqN)
236 #define IntlStrEqNI __MINGW_NAME_AW(IntlStrEqNI)
237 
238 #define SZ_CONTENTTYPE_HTMLA "text/html"
239 #define SZ_CONTENTTYPE_HTMLW L"text/html"
240 #define SZ_CONTENTTYPE_CDFA "application/x-cdf"
241 #define SZ_CONTENTTYPE_CDFW L"application/x-cdf"
242 
243 #define SZ_CONTENTTYPE_HTML __MINGW_NAME_AW(SZ_CONTENTTYPE_HTML)
244 #define SZ_CONTENTTYPE_CDF __MINGW_NAME_AW(SZ_CONTENTTYPE_CDF)
245 
246 #define PathIsHTMLFileA(pszPath) PathIsContentTypeA(pszPath,SZ_CONTENTTYPE_HTMLA)
247 #define PathIsHTMLFileW(pszPath) PathIsContentTypeW(pszPath,SZ_CONTENTTYPE_HTMLW)
248 
249 #define StrCatA lstrcatA
250 #define StrCmpA lstrcmpA
251 #define StrCmpIA lstrcmpiA
252 #define StrCpyA lstrcpyA
253 #define StrCpyNA lstrcpynA
254 
255 #define StrToLong StrToInt
256 #define StrNCmp StrCmpN
257 #define StrNCmpI StrCmpNI
258 #define StrNCpy StrCpyN
259 #define StrCatN StrNCat
260 
261 #define StrCatBuff __MINGW_NAME_AW(StrCatBuff)
262 
263 #if defined(UNICODE)
264 #define StrCat StrCatW
265 #define StrCmp StrCmpW
266 #define StrCmpI StrCmpIW
267 #define StrCpy StrCpyW
268 #define StrCpyN StrCpyNW
269 #else
270 #define StrCat lstrcatA
271 #define StrCmp lstrcmpA
272 #define StrCmpI lstrcmpiA
273 #define StrCpy lstrcpyA
274 #define StrCpyN lstrcpynA
275 #endif
276 
277 #endif
278 
279 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
280   enum tagSFBS_FLAGS {
281       SFBS_FLAGS_ROUND_TO_NEAREST_DISPLAYED_DIGIT     = 0x0001,
282       SFBS_FLAGS_TRUNCATE_UNDISPLAYED_DECIMAL_DIGITS  = 0x0002
283   };
284 
285   typedef int SFBS_FLAGS;
286 
287   LWSTDAPI StrFormatByteSizeEx(ULONGLONG ull, SFBS_FLAGS flags, PWSTR pszBuf, UINT cchBuf);
288 #endif
289 
290 #ifndef NO_SHLWAPI_PATH
291 
292   LWSTDAPI_(LPSTR) PathAddBackslashA(LPSTR pszPath);
293   LWSTDAPI_(LPWSTR) PathAddBackslashW(LPWSTR pszPath);
294 
295 #define PathAddBackslash __MINGW_NAME_AW(PathAddBackslash)
296 
297   LWSTDAPI_(WINBOOL) PathAddExtensionA(LPSTR pszPath,LPCSTR pszExt);
298   LWSTDAPI_(WINBOOL) PathAddExtensionW(LPWSTR pszPath,LPCWSTR pszExt);
299 
300 #define PathAddExtension __MINGW_NAME_AW(PathAddExtension)
301 
302   LWSTDAPI_(WINBOOL) PathAppendA(LPSTR pszPath,LPCSTR pMore);
303   LWSTDAPI_(WINBOOL) PathAppendW(LPWSTR pszPath,LPCWSTR pMore);
304   LWSTDAPI_(LPSTR) PathBuildRootA(LPSTR pszRoot,int iDrive);
305   LWSTDAPI_(LPWSTR) PathBuildRootW(LPWSTR pszRoot,int iDrive);
306 
307 #define PathBuildRoot __MINGW_NAME_AW(PathBuildRoot)
308 
309   LWSTDAPI_(WINBOOL) PathCanonicalizeA(LPSTR pszBuf,LPCSTR pszPath);
310   LWSTDAPI_(WINBOOL) PathCanonicalizeW(LPWSTR pszBuf,LPCWSTR pszPath);
311   LWSTDAPI_(LPSTR) PathCombineA(LPSTR pszDest,LPCSTR pszDir,LPCSTR pszFile);
312   LWSTDAPI_(LPWSTR) PathCombineW(LPWSTR pszDest,LPCWSTR pszDir,LPCWSTR pszFile);
313 
314 #define PathCombine __MINGW_NAME_AW(PathCombine)
315 
316   LWSTDAPI_(WINBOOL) PathCompactPathA(HDC hDC,LPSTR pszPath,UINT dx);
317   LWSTDAPI_(WINBOOL) PathCompactPathW(HDC hDC,LPWSTR pszPath,UINT dx);
318   LWSTDAPI_(WINBOOL) PathCompactPathExA(LPSTR pszOut,LPCSTR pszSrc,UINT cchMax,DWORD dwFlags);
319   LWSTDAPI_(WINBOOL) PathCompactPathExW(LPWSTR pszOut,LPCWSTR pszSrc,UINT cchMax,DWORD dwFlags);
320   LWSTDAPI_(int) PathCommonPrefixA(LPCSTR pszFile1,LPCSTR pszFile2,LPSTR achPath);
321   LWSTDAPI_(int) PathCommonPrefixW(LPCWSTR pszFile1,LPCWSTR pszFile2,LPWSTR achPath);
322   LWSTDAPI_(WINBOOL) PathFileExistsA(LPCSTR pszPath);
323   LWSTDAPI_(WINBOOL) PathFileExistsW(LPCWSTR pszPath);
324 
325 #define PathFileExists __MINGW_NAME_AW(PathFileExists)
326 
327   LWSTDAPI_(LPSTR) PathFindExtensionA(LPCSTR pszPath);
328   LWSTDAPI_(LPWSTR) PathFindExtensionW(LPCWSTR pszPath);
329 
330 #define PathFindExtension __MINGW_NAME_AW(PathFindExtension)
331 
332   LWSTDAPI_(LPSTR) PathFindFileNameA(LPCSTR pszPath);
333   LWSTDAPI_(LPWSTR) PathFindFileNameW(LPCWSTR pszPath);
334 
335 #define PathFindFileName __MINGW_NAME_AW(PathFindFileName)
336 
337   LWSTDAPI_(LPSTR) PathFindNextComponentA(LPCSTR pszPath);
338   LWSTDAPI_(LPWSTR) PathFindNextComponentW(LPCWSTR pszPath);
339 
340 #define PathFindNextComponent __MINGW_NAME_AW(PathFindNextComponent)
341 
342   LWSTDAPI_(WINBOOL) PathFindOnPathA(LPSTR pszPath,LPCSTR *ppszOtherDirs);
343   LWSTDAPI_(WINBOOL) PathFindOnPathW(LPWSTR pszPath,LPCWSTR *ppszOtherDirs);
344   LWSTDAPI_(LPSTR) PathGetArgsA(LPCSTR pszPath);
345   LWSTDAPI_(LPWSTR) PathGetArgsW(LPCWSTR pszPath);
346 
347 #define PathGetArgs __MINGW_NAME_AW(PathGetArgs)
348 
349   LWSTDAPI_(LPCSTR) PathFindSuffixArrayA(LPCSTR pszPath,const LPCSTR *apszSuffix,int iArraySize);
350   LWSTDAPI_(LPCWSTR) PathFindSuffixArrayW(LPCWSTR pszPath,const LPCWSTR *apszSuffix,int iArraySize);
351 
352 #define PathFindSuffixArray __MINGW_NAME_AW(PathFindSuffixArray)
353 
354   LWSTDAPI_(WINBOOL) PathIsLFNFileSpecA(LPCSTR lpName);
355   LWSTDAPI_(WINBOOL) PathIsLFNFileSpecW(LPCWSTR lpName);
356 
357 #define PathIsLFNFileSpec __MINGW_NAME_AW(PathIsLFNFileSpec)
358 
359   LWSTDAPI_(UINT) PathGetCharTypeA(UCHAR ch);
360   LWSTDAPI_(UINT) PathGetCharTypeW(WCHAR ch);
361 
362 #define GCT_INVALID 0x0000
363 #define GCT_LFNCHAR 0x0001
364 #define GCT_SHORTCHAR 0x0002
365 #define GCT_WILD 0x0004
366 #define GCT_SEPARATOR 0x0008
367 
368   LWSTDAPI_(int) PathGetDriveNumberA(LPCSTR pszPath);
369   LWSTDAPI_(int) PathGetDriveNumberW(LPCWSTR pszPath);
370 
371 #define PathGetDriveNumber __MINGW_NAME_AW(PathGetDriveNumber)
372 
373   LWSTDAPI_(WINBOOL) PathIsDirectoryA(LPCSTR pszPath);
374   LWSTDAPI_(WINBOOL) PathIsDirectoryW(LPCWSTR pszPath);
375 
376 #define PathIsDirectory __MINGW_NAME_AW(PathIsDirectory)
377 
378   LWSTDAPI_(WINBOOL) PathIsDirectoryEmptyA(LPCSTR pszPath);
379   LWSTDAPI_(WINBOOL) PathIsDirectoryEmptyW(LPCWSTR pszPath);
380 
381 #define PathIsDirectoryEmpty __MINGW_NAME_AW(PathIsDirectoryEmpty)
382 
383   LWSTDAPI_(WINBOOL) PathIsFileSpecA(LPCSTR pszPath);
384   LWSTDAPI_(WINBOOL) PathIsFileSpecW(LPCWSTR pszPath);
385 
386 #define PathIsFileSpec __MINGW_NAME_AW(PathIsFileSpec)
387 
388   LWSTDAPI_(WINBOOL) PathIsPrefixA(LPCSTR pszPrefix,LPCSTR pszPath);
389   LWSTDAPI_(WINBOOL) PathIsPrefixW(LPCWSTR pszPrefix,LPCWSTR pszPath);
390 
391 #define PathIsPrefix __MINGW_NAME_AW(PathIsPrefix)
392 
393   LWSTDAPI_(WINBOOL) PathIsRelativeA(LPCSTR pszPath);
394   LWSTDAPI_(WINBOOL) PathIsRelativeW(LPCWSTR pszPath);
395 
396 #define PathIsRelative __MINGW_NAME_AW(PathIsRelative)
397 
398   LWSTDAPI_(WINBOOL) PathIsRootA(LPCSTR pszPath);
399   LWSTDAPI_(WINBOOL) PathIsRootW(LPCWSTR pszPath);
400 
401 #define PathIsRoot __MINGW_NAME_AW(PathIsRoot)
402 
403   LWSTDAPI_(WINBOOL) PathIsSameRootA(LPCSTR pszPath1,LPCSTR pszPath2);
404   LWSTDAPI_(WINBOOL) PathIsSameRootW(LPCWSTR pszPath1,LPCWSTR pszPath2);
405 
406 #define PathIsSameRoot __MINGW_NAME_AW(PathIsSameRoot)
407 
408   LWSTDAPI_(WINBOOL) PathIsUNCA(LPCSTR pszPath);
409   LWSTDAPI_(WINBOOL) PathIsUNCW(LPCWSTR pszPath);
410 
411 #define PathIsUNC __MINGW_NAME_AW(PathIsUNC)
412 
413   LWSTDAPI_(WINBOOL) PathIsNetworkPathA(LPCSTR pszPath);
414   LWSTDAPI_(WINBOOL) PathIsNetworkPathW(LPCWSTR pszPath);
415 
416 #define PathIsNetworkPath __MINGW_NAME_AW(PathIsNetworkPath)
417 
418   LWSTDAPI_(WINBOOL) PathIsUNCServerA(LPCSTR pszPath);
419   LWSTDAPI_(WINBOOL) PathIsUNCServerW(LPCWSTR pszPath);
420 
421 #define PathIsUNCServer __MINGW_NAME_AW(PathIsUNCServer)
422 
423   LWSTDAPI_(WINBOOL) PathIsUNCServerShareA(LPCSTR pszPath);
424   LWSTDAPI_(WINBOOL) PathIsUNCServerShareW(LPCWSTR pszPath);
425 
426 #define PathIsUNCServerShare __MINGW_NAME_AW(PathIsUNCServerShare)
427 
428   LWSTDAPI_(WINBOOL) PathIsContentTypeA(LPCSTR pszPath,LPCSTR pszContentType);
429   LWSTDAPI_(WINBOOL) PathIsContentTypeW(LPCWSTR pszPath,LPCWSTR pszContentType);
430   LWSTDAPI_(WINBOOL) PathIsURLA(LPCSTR pszPath);
431   LWSTDAPI_(WINBOOL) PathIsURLW(LPCWSTR pszPath);
432 
433 #define PathIsURL __MINGW_NAME_AW(PathIsURL)
434 
435   LWSTDAPI_(WINBOOL) PathMakePrettyA(LPSTR pszPath);
436   LWSTDAPI_(WINBOOL) PathMakePrettyW(LPWSTR pszPath);
437   LWSTDAPI_(WINBOOL) PathMatchSpecA(LPCSTR pszFile,LPCSTR pszSpec);
438   LWSTDAPI_(WINBOOL) PathMatchSpecW(LPCWSTR pszFile,LPCWSTR pszSpec);
439   LWSTDAPI_(int) PathParseIconLocationA(LPSTR pszIconFile);
440   LWSTDAPI_(int) PathParseIconLocationW(LPWSTR pszIconFile);
441   LWSTDAPI_(void) PathQuoteSpacesA(LPSTR lpsz);
442   LWSTDAPI_(void) PathQuoteSpacesW(LPWSTR lpsz);
443   LWSTDAPI_(WINBOOL) PathRelativePathToA(LPSTR pszPath,LPCSTR pszFrom,DWORD dwAttrFrom,LPCSTR pszTo,DWORD dwAttrTo);
444   LWSTDAPI_(WINBOOL) PathRelativePathToW(LPWSTR pszPath,LPCWSTR pszFrom,DWORD dwAttrFrom,LPCWSTR pszTo,DWORD dwAttrTo);
445   LWSTDAPI_(void) PathRemoveArgsA(LPSTR pszPath);
446   LWSTDAPI_(void) PathRemoveArgsW(LPWSTR pszPath);
447   LWSTDAPI_(LPSTR) PathRemoveBackslashA(LPSTR pszPath);
448   LWSTDAPI_(LPWSTR) PathRemoveBackslashW(LPWSTR pszPath);
449 
450 #define PathRemoveBackslash __MINGW_NAME_AW(PathRemoveBackslash)
451 
452   LWSTDAPI_(void) PathRemoveBlanksA(LPSTR pszPath);
453   LWSTDAPI_(void) PathRemoveBlanksW(LPWSTR pszPath);
454   LWSTDAPI_(void) PathRemoveExtensionA(LPSTR pszPath);
455   LWSTDAPI_(void) PathRemoveExtensionW(LPWSTR pszPath);
456   LWSTDAPI_(WINBOOL) PathRemoveFileSpecA(LPSTR pszPath);
457   LWSTDAPI_(WINBOOL) PathRemoveFileSpecW(LPWSTR pszPath);
458   LWSTDAPI_(WINBOOL) PathRenameExtensionA(LPSTR pszPath,LPCSTR pszExt);
459   LWSTDAPI_(WINBOOL) PathRenameExtensionW(LPWSTR pszPath,LPCWSTR pszExt);
460   LWSTDAPI_(WINBOOL) PathSearchAndQualifyA(LPCSTR pszPath,LPSTR pszBuf,UINT cchBuf);
461   LWSTDAPI_(WINBOOL) PathSearchAndQualifyW(LPCWSTR pszPath,LPWSTR pszBuf,UINT cchBuf);
462   LWSTDAPI_(void) PathSetDlgItemPathA(HWND hDlg,int id,LPCSTR pszPath);
463   LWSTDAPI_(void) PathSetDlgItemPathW(HWND hDlg,int id,LPCWSTR pszPath);
464   LWSTDAPI_(LPSTR) PathSkipRootA(LPCSTR pszPath);
465   LWSTDAPI_(LPWSTR) PathSkipRootW(LPCWSTR pszPath);
466 
467 #define PathSkipRoot __MINGW_NAME_AW(PathSkipRoot)
468 
469   LWSTDAPI_(void) PathStripPathA(LPSTR pszPath);
470   LWSTDAPI_(void) PathStripPathW(LPWSTR pszPath);
471 
472 #define PathStripPath __MINGW_NAME_AW(PathStripPath)
473 
474   LWSTDAPI_(WINBOOL) PathStripToRootA(LPSTR pszPath);
475   LWSTDAPI_(WINBOOL) PathStripToRootW(LPWSTR pszPath);
476 
477 #define PathStripToRoot __MINGW_NAME_AW(PathStripToRoot)
478 
479   LWSTDAPI_(void) PathUnquoteSpacesA(LPSTR lpsz);
480   LWSTDAPI_(void) PathUnquoteSpacesW(LPWSTR lpsz);
481   LWSTDAPI_(WINBOOL) PathMakeSystemFolderA(LPCSTR pszPath);
482   LWSTDAPI_(WINBOOL) PathMakeSystemFolderW(LPCWSTR pszPath);
483 
484 #define PathMakeSystemFolder __MINGW_NAME_AW(PathMakeSystemFolder)
485 
486   LWSTDAPI_(WINBOOL) PathUnmakeSystemFolderA(LPCSTR pszPath);
487   LWSTDAPI_(WINBOOL) PathUnmakeSystemFolderW(LPCWSTR pszPath);
488 
489 #define PathUnmakeSystemFolder __MINGW_NAME_AW(PathUnmakeSystemFolder)
490 
491   LWSTDAPI_(WINBOOL) PathIsSystemFolderA(LPCSTR pszPath,DWORD dwAttrb);
492   LWSTDAPI_(WINBOOL) PathIsSystemFolderW(LPCWSTR pszPath,DWORD dwAttrb);
493 
494 #define PathIsSystemFolder __MINGW_NAME_AW(PathIsSystemFolder)
495 
496   LWSTDAPI_(void) PathUndecorateA(LPSTR pszPath);
497   LWSTDAPI_(void) PathUndecorateW(LPWSTR pszPath);
498 
499 #define PathUndecorate __MINGW_NAME_AW(PathUndecorate)
500 
501   LWSTDAPI_(WINBOOL) PathUnExpandEnvStringsA(LPCSTR pszPath,LPSTR pszBuf,UINT cchBuf);
502   LWSTDAPI_(WINBOOL) PathUnExpandEnvStringsW(LPCWSTR pszPath,LPWSTR pszBuf,UINT cchBuf);
503 
504 #define PathUnExpandEnvStrings __MINGW_NAME_AW(PathUnExpandEnvStrings)
505 
506 #if (_WIN32_IE >= _WIN32_IE_IE70)
507 #define PMSF_NORMAL            0x00000000
508 #define PMSF_MULTIPLE          0x00000001
509 #define PMSF_DONT_STRIP_SPACES 0x00010000
510 LWSTDAPI PathMatchSpecExA(LPCSTR pszFile, LPCSTR pszSpec, DWORD dwFlags);
511 LWSTDAPI PathMatchSpecExW(LPCWSTR pszFile, LPCWSTR pszSpec, DWORD dwFlags);
512 #endif
513 
514 #define PathMatchSpecEx __MINGW_NAME_AW(PathMatchSpecEx)
515 
516 #define PathParseIconLocation __MINGW_NAME_AW(PathParseIconLocation)
517 #define PathAppend __MINGW_NAME_AW(PathAppend)
518 #define PathCanonicalize __MINGW_NAME_AW(PathCanonicalize)
519 #define PathCompactPath __MINGW_NAME_AW(PathCompactPath)
520 #define PathCompactPathEx __MINGW_NAME_AW(PathCompactPathEx)
521 #define PathCommonPrefix __MINGW_NAME_AW(PathCommonPrefix)
522 #define PathFindOnPath __MINGW_NAME_AW(PathFindOnPath)
523 #define PathGetCharType __MINGW_NAME_AW(PathGetCharType)
524 #define PathIsContentType __MINGW_NAME_AW(PathIsContentType)
525 #define PathIsHTMLFile __MINGW_NAME_AW(PathIsHTMLFile)
526 #define PathMakePretty __MINGW_NAME_AW(PathMakePretty)
527 #define PathMatchSpec __MINGW_NAME_AW(PathMatchSpec)
528 #define PathQuoteSpaces __MINGW_NAME_AW(PathQuoteSpaces)
529 #define PathRelativePathTo __MINGW_NAME_AW(PathRelativePathTo)
530 #define PathRemoveArgs __MINGW_NAME_AW(PathRemoveArgs)
531 #define PathRemoveBlanks __MINGW_NAME_AW(PathRemoveBlanks)
532 #define PathRemoveExtension __MINGW_NAME_AW(PathRemoveExtension)
533 #define PathRemoveFileSpec __MINGW_NAME_AW(PathRemoveFileSpec)
534 #define PathRenameExtension __MINGW_NAME_AW(PathRenameExtension)
535 #define PathSearchAndQualify __MINGW_NAME_AW(PathSearchAndQualify)
536 #define PathSetDlgItemPath __MINGW_NAME_AW(PathSetDlgItemPath)
537 #define PathUnquoteSpaces __MINGW_NAME_AW(PathUnquoteSpaces)
538 
539   typedef enum {
540     URL_SCHEME_INVALID = -1,
541     URL_SCHEME_UNKNOWN = 0,
542     URL_SCHEME_FTP,
543     URL_SCHEME_HTTP,
544     URL_SCHEME_GOPHER,
545     URL_SCHEME_MAILTO,
546     URL_SCHEME_NEWS,
547     URL_SCHEME_NNTP,
548     URL_SCHEME_TELNET,
549     URL_SCHEME_WAIS,
550     URL_SCHEME_FILE,
551     URL_SCHEME_MK,
552     URL_SCHEME_HTTPS,
553     URL_SCHEME_SHELL,
554     URL_SCHEME_SNEWS,
555     URL_SCHEME_LOCAL,
556     URL_SCHEME_JAVASCRIPT,
557     URL_SCHEME_VBSCRIPT,
558     URL_SCHEME_ABOUT,
559     URL_SCHEME_RES,
560 #if (_WIN32_IE >= _WIN32_IE_IE60)
561     URL_SCHEME_MSSHELLROOTED,
562     URL_SCHEME_MSSHELLIDLIST,
563     URL_SCHEME_MSHELP,
564 #endif
565 #if (_WIN32_IE >= _WIN32_IE_IE70)
566     URL_SCHEME_MSSHELLDEVICE,
567     URL_SCHEME_WILDCARD,
568 #endif
569 #if (NTDDI_VERSION >= NTDDI_VISTA)
570     URL_SCHEME_SEARCH_MS,
571 #endif
572 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
573     URL_SCHEME_SEARCH,
574 #endif
575 #if (NTDDI_VERSION >= NTDDI_WIN7)
576     URL_SCHEME_KNOWNFOLDER,
577 #endif
578     URL_SCHEME_MAXVALUE
579   } URL_SCHEME;
580 
581   typedef enum {
582     URL_PART_NONE = 0,URL_PART_SCHEME = 1,URL_PART_HOSTNAME,URL_PART_USERNAME,URL_PART_PASSWORD,URL_PART_PORT,URL_PART_QUERY
583   } URL_PART;
584 
585   typedef enum {
586     URLIS_URL,URLIS_OPAQUE,URLIS_NOHISTORY,URLIS_FILEURL,URLIS_APPLIABLE,URLIS_DIRECTORY,URLIS_HASQUERY
587   } URLIS;
588 
589 #define URL_UNESCAPE 0x10000000
590 #define URL_ESCAPE_UNSAFE 0x20000000
591 #define URL_PLUGGABLE_PROTOCOL 0x40000000
592 #define URL_WININET_COMPATIBILITY 0x80000000
593 #define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
594 #define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
595 #define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO
596 #define URL_ESCAPE_SPACES_ONLY 0x04000000
597 #define URL_DONT_SIMPLIFY 0x08000000
598 #define URL_NO_META URL_DONT_SIMPLIFY
599 #define URL_UNESCAPE_INPLACE 0x00100000
600 #define URL_CONVERT_IF_DOSPATH 0x00200000
601 #define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
602 #define URL_INTERNAL_PATH 0x00800000
603 #define URL_FILE_USE_PATHURL 0x00010000
604 #if _WIN32_IE >= _WIN32_IE_IE60SP2
605 #define URL_DONT_UNESCAPE 0x00020000
606 #endif
607 #if NTDDI_VERSION >= NTDDI_WIN7
608 #define URL_ESCAPE_AS_UTF8 0x00040000
609 #endif
610 #if NTDDI_VERSION >= NTDDI_WIN8
611 #define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8
612 #define URL_ESCAPE_ASCII_URI_COMPONENT 0x00080000
613 #define URL_ESCAPE_URI_COMPONENT (URL_ESCAPE_ASCII_URI_COMPONENT | URL_ESCAPE_AS_UTF8)
614 #define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8
615 #endif
616 #define URL_ESCAPE_PERCENT 0x00001000
617 #define URL_ESCAPE_SEGMENT_ONLY 0x00002000
618 
619 #define URL_PARTFLAG_KEEPSCHEME 0x00000001
620 
621 #define URL_APPLY_DEFAULT 0x00000001
622 #define URL_APPLY_GUESSSCHEME 0x00000002
623 #define URL_APPLY_GUESSFILE 0x00000004
624 #define URL_APPLY_FORCEAPPLY 0x00000008
625 
626   LWSTDAPI_(int) UrlCompareA(LPCSTR psz1,LPCSTR psz2,WINBOOL fIgnoreSlash);
627   LWSTDAPI_(int) UrlCompareW(LPCWSTR psz1,LPCWSTR psz2,WINBOOL fIgnoreSlash);
628   LWSTDAPI UrlCombineA(LPCSTR pszBase,LPCSTR pszRelative,LPSTR pszCombined,LPDWORD pcchCombined,DWORD dwFlags);
629   LWSTDAPI UrlCombineW(LPCWSTR pszBase,LPCWSTR pszRelative,LPWSTR pszCombined,LPDWORD pcchCombined,DWORD dwFlags);
630   LWSTDAPI UrlCanonicalizeA(LPCSTR pszUrl,LPSTR pszCanonicalized,LPDWORD pcchCanonicalized,DWORD dwFlags);
631   LWSTDAPI UrlCanonicalizeW(LPCWSTR pszUrl,LPWSTR pszCanonicalized,LPDWORD pcchCanonicalized,DWORD dwFlags);
632   LWSTDAPI_(WINBOOL) UrlIsOpaqueA(LPCSTR pszURL);
633   LWSTDAPI_(WINBOOL) UrlIsOpaqueW(LPCWSTR pszURL);
634   LWSTDAPI_(WINBOOL) UrlIsNoHistoryA(LPCSTR pszURL);
635   LWSTDAPI_(WINBOOL) UrlIsNoHistoryW(LPCWSTR pszURL);
636 #define UrlIsFileUrlA(pszURL) UrlIsA(pszURL,URLIS_FILEURL)
637 #define UrlIsFileUrlW(pszURL) UrlIsW(pszURL,URLIS_FILEURL)
638   LWSTDAPI_(WINBOOL) UrlIsA(LPCSTR pszUrl,URLIS UrlIs);
639   LWSTDAPI_(WINBOOL) UrlIsW(LPCWSTR pszUrl,URLIS UrlIs);
640   LWSTDAPI_(LPCSTR) UrlGetLocationA(LPCSTR psz1);
641   LWSTDAPI_(LPCWSTR) UrlGetLocationW(LPCWSTR psz1);
642   LWSTDAPI UrlUnescapeA(LPSTR pszUrl,LPSTR pszUnescaped,LPDWORD pcchUnescaped,DWORD dwFlags);
643   LWSTDAPI UrlUnescapeW(LPWSTR pszUrl,LPWSTR pszUnescaped,LPDWORD pcchUnescaped,DWORD dwFlags);
644   LWSTDAPI UrlEscapeA(LPCSTR pszUrl,LPSTR pszEscaped,LPDWORD pcchEscaped,DWORD dwFlags);
645   LWSTDAPI UrlEscapeW(LPCWSTR pszUrl,LPWSTR pszEscaped,LPDWORD pcchEscaped,DWORD dwFlags);
646   LWSTDAPI UrlCreateFromPathA(LPCSTR pszPath,LPSTR pszUrl,LPDWORD pcchUrl,DWORD dwFlags);
647   LWSTDAPI UrlCreateFromPathW(LPCWSTR pszPath,LPWSTR pszUrl,LPDWORD pcchUrl,DWORD dwFlags);
648   LWSTDAPI PathCreateFromUrlA(LPCSTR pszUrl,LPSTR pszPath,LPDWORD pcchPath,DWORD dwFlags);
649   LWSTDAPI PathCreateFromUrlW(LPCWSTR pszUrl,LPWSTR pszPath,LPDWORD pcchPath,DWORD dwFlags);
650 #if (_WIN32_IE >= _WIN32_IE_IE70)
651   LWSTDAPI PathCreateFromUrlAlloc(PCWSTR pszIn, PWSTR *ppszOut, DWORD dwFlags);
652 #endif
653   LWSTDAPI UrlHashA(LPCSTR pszUrl,LPBYTE pbHash,DWORD cbHash);
654   LWSTDAPI UrlHashW(LPCWSTR pszUrl,LPBYTE pbHash,DWORD cbHash);
655   LWSTDAPI UrlGetPartW(LPCWSTR pszIn,LPWSTR pszOut,LPDWORD pcchOut,DWORD dwPart,DWORD dwFlags);
656   LWSTDAPI UrlGetPartA(LPCSTR pszIn,LPSTR pszOut,LPDWORD pcchOut,DWORD dwPart,DWORD dwFlags);
657   LWSTDAPI UrlApplySchemeA(LPCSTR pszIn,LPSTR pszOut,LPDWORD pcchOut,DWORD dwFlags);
658   LWSTDAPI UrlApplySchemeW(LPCWSTR pszIn,LPWSTR pszOut,LPDWORD pcchOut,DWORD dwFlags);
659   LWSTDAPI HashData(LPBYTE pbData,DWORD cbData,LPBYTE pbHash,DWORD cbHash);
660   LWSTDAPI UrlFixupW(PCWSTR pcszUrl, PWSTR pszTranslatedUrl, DWORD cchMax);
661 #if defined(UNICODE)
662 #define UrlFixup UrlFixupW
663 #endif
664 
665 #define UrlCompare __MINGW_NAME_AW(UrlCompare)
666 #define UrlCombine __MINGW_NAME_AW(UrlCombine)
667 #define UrlCanonicalize __MINGW_NAME_AW(UrlCanonicalize)
668 #define UrlIsOpaque __MINGW_NAME_AW(UrlIsOpaque)
669 #define UrlIsFileUrl __MINGW_NAME_AW(UrlIsFileUrl)
670 #define UrlGetLocation __MINGW_NAME_AW(UrlGetLocation)
671 #define UrlUnescape __MINGW_NAME_AW(UrlUnescape)
672 #define UrlEscape __MINGW_NAME_AW(UrlEscape)
673 #define UrlCreateFromPath __MINGW_NAME_AW(UrlCreateFromPath)
674 #define PathCreateFromUrl __MINGW_NAME_AW(PathCreateFromUrl)
675 #define UrlHash __MINGW_NAME_AW(UrlHash)
676 #define UrlGetPart __MINGW_NAME_AW(UrlGetPart)
677 #define UrlApplyScheme __MINGW_NAME_AW(UrlApplyScheme)
678 #define UrlIs __MINGW_NAME_AW(UrlIs)
679 
680 #define UrlEscapeSpaces(pszUrl,pszEscaped,pcchEscaped) UrlCanonicalize(pszUrl,pszEscaped,pcchEscaped,URL_ESCAPE_SPACES_ONLY |URL_DONT_ESCAPE_EXTRA_INFO)
681 #define UrlUnescapeInPlace(pszUrl,dwFlags) UrlUnescape(pszUrl,NULL,NULL,dwFlags | URL_UNESCAPE_INPLACE)
682 
683   typedef struct tagPARSEDURLA {
684     DWORD     cbSize;
685     LPCSTR    pszProtocol;
686     UINT      cchProtocol;
687     LPCSTR    pszSuffix;
688     UINT      cchSuffix;
689     UINT      nScheme;
690   } PARSEDURLA, *PPARSEDURLA;
691 
692   typedef struct tagPARSEDURLW {
693     DWORD     cbSize;
694     LPCWSTR   pszProtocol;
695     UINT      cchProtocol;
696     LPCWSTR   pszSuffix;
697     UINT      cchSuffix;
698     UINT      nScheme;
699    } PARSEDURLW, *PPARSEDURLW;
700 
701   LWSTDAPI ParseURLA(LPCSTR pcszURL, PARSEDURLA *ppu);
702   LWSTDAPI ParseURLW(LPCWSTR pcszURL, PARSEDURLW *ppu);
703 
704 #if defined(UNICODE)
705 #define ParseURL  ParseURLW
706   typedef PARSEDURLW PARSEDURL;
707   typedef PPARSEDURLW PPARSEDURL;
708 #else
709 #define ParseURL  ParseURLA
710   typedef PARSEDURLA PARSEDURL;
711   typedef PPARSEDURLA PPARSEDURL;
712 #endif
713 
714 #endif
715 
716 #ifndef NO_SHLWAPI_REG
717 
718   LWSTDAPI_(DWORD) SHDeleteEmptyKeyA(HKEY hkey,LPCSTR pszSubKey);
719   LWSTDAPI_(DWORD) SHDeleteEmptyKeyW(HKEY hkey,LPCWSTR pszSubKey);
720 
721 #define SHDeleteEmptyKey __MINGW_NAME_AW(SHDeleteEmptyKey)
722 
723   LWSTDAPI_(DWORD) SHDeleteKeyA(HKEY hkey,LPCSTR pszSubKey);
724   LWSTDAPI_(DWORD) SHDeleteKeyW(HKEY hkey,LPCWSTR pszSubKey);
725 
726 #define SHDeleteKey __MINGW_NAME_AW(SHDeleteKey)
727 
728   LWSTDAPI_(HKEY) SHRegDuplicateHKey(HKEY hkey);
729 
730   LWSTDAPI_(DWORD) SHDeleteValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue);
731   LWSTDAPI_(DWORD) SHDeleteValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue);
732 
733 #define SHDeleteValue __MINGW_NAME_AW(SHDeleteValue)
734 
735   LWSTDAPI_(DWORD) SHGetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD *pdwType,void *pvData,DWORD *pcbData);
736   LWSTDAPI_(DWORD) SHGetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,DWORD *pdwType,void *pvData,DWORD *pcbData);
737 
738 #define SHGetValue __MINGW_NAME_AW(SHGetValue)
739 
740   LWSTDAPI_(DWORD) SHSetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD dwType,LPCVOID pvData,DWORD cbData);
741   LWSTDAPI_(DWORD) SHSetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,DWORD dwType,LPCVOID pvData,DWORD cbData);
742 
743 #define SHSetValue __MINGW_NAME_AW(SHSetValue)
744 
745 #if (_WIN32_IE >= 0x0602)
746 
747   typedef DWORD SRRF;
748 
749 #define SRRF_RT_REG_NONE 0x00000001
750 #define SRRF_RT_REG_SZ 0x00000002
751 #define SRRF_RT_REG_EXPAND_SZ 0x00000004
752 #define SRRF_RT_REG_BINARY 0x00000008
753 #define SRRF_RT_REG_DWORD 0x00000010
754 #define SRRF_RT_REG_MULTI_SZ 0x00000020
755 #define SRRF_RT_REG_QWORD 0x00000040
756 
757 #define SRRF_RT_DWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_DWORD)
758 #define SRRF_RT_QWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_QWORD)
759 #define SRRF_RT_ANY 0x0000ffff
760 
761 #define SRRF_RM_ANY 0x00000000
762 #define SRRF_RM_NORMAL 0x00010000
763 #define SRRF_RM_SAFE 0x00020000
764 #define SRRF_RM_SAFENETWORK 0x00040000
765 
766 #define SRRF_NOEXPAND 0x10000000
767 #define SRRF_ZEROONFAILURE 0x20000000
768 #define SRRF_NOVIRT 0x40000000
769 
770   LWSTDAPI_(LONG) SHRegGetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,SRRF dwFlags,DWORD *pdwType,void *pvData,DWORD *pcbData);
771   LWSTDAPI_(LONG) SHRegGetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,SRRF dwFlags,DWORD *pdwType,void *pvData,DWORD *pcbData);
772 
773 #define SHRegGetValue __MINGW_NAME_AW(SHRegGetValue)
774 
775   LWSTDAPI_(LSTATUS) SHRegSetValue(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue, SRRF srrfFlags,
776                                         DWORD dwType, LPCVOID pvData, DWORD cbData);
777 
778   LWSTDAPI_(LSTATUS) SHRegGetValueFromHKCUHKLM(PCWSTR pwszKey, PCWSTR pwszValue, SRRF srrfFlags,
779                                         DWORD *pdwType, void *pvData, DWORD * pcbData);
780   STDAPI_(WINBOOL) SHRegGetBoolValueFromHKCUHKLM(PCWSTR pszKey, PCWSTR pszValue, WINBOOL fDefault);
781 #endif
782 
783 #define SHQueryValueEx __MINGW_NAME_AW(SHQueryValueEx)
784 #define SHEnumKeyEx __MINGW_NAME_AW(SHEnumKeyEx)
785 #define SHEnumValue __MINGW_NAME_AW(SHEnumValue)
786 #define SHQueryInfoKey __MINGW_NAME_AW(SHQueryInfoKey)
787 #define SHCopyKey __MINGW_NAME_AW(SHCopyKey)
788 #define SHRegGetPath __MINGW_NAME_AW(SHRegGetPath)
789 #define SHRegSetPath __MINGW_NAME_AW(SHRegSetPath)
790 
791   LWSTDAPI_(DWORD) SHQueryValueExA(HKEY hkey,LPCSTR pszValue,DWORD *pdwReserved,DWORD *pdwType,void *pvData,DWORD *pcbData);
792   LWSTDAPI_(DWORD) SHQueryValueExW(HKEY hkey,LPCWSTR pszValue,DWORD *pdwReserved,DWORD *pdwType,void *pvData,DWORD *pcbData);
793   LWSTDAPI_(LONG) SHEnumKeyExA(HKEY hkey,DWORD dwIndex,LPSTR pszName,LPDWORD pcchName);
794   LWSTDAPI_(LONG) SHEnumKeyExW(HKEY hkey,DWORD dwIndex,LPWSTR pszName,LPDWORD pcchName);
795   LWSTDAPI_(LONG) SHEnumValueA(HKEY hkey,DWORD dwIndex,LPSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData);
796   LWSTDAPI_(LONG) SHEnumValueW(HKEY hkey,DWORD dwIndex,LPWSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData);
797   LWSTDAPI_(LONG) SHQueryInfoKeyA(HKEY hkey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen);
798   LWSTDAPI_(LONG) SHQueryInfoKeyW(HKEY hkey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen);
799   LWSTDAPI_(DWORD) SHCopyKeyA(HKEY hkeySrc,LPCSTR szSrcSubKey,HKEY hkeyDest,DWORD fReserved);
800   LWSTDAPI_(DWORD) SHCopyKeyW(HKEY hkeySrc,LPCWSTR wszSrcSubKey,HKEY hkeyDest,DWORD fReserved);
801   LWSTDAPI_(DWORD) SHRegGetPathA(HKEY hKey,LPCSTR pcszSubKey,LPCSTR pcszValue,LPSTR pszPath,DWORD dwFlags);
802   LWSTDAPI_(DWORD) SHRegGetPathW(HKEY hKey,LPCWSTR pcszSubKey,LPCWSTR pcszValue,LPWSTR pszPath,DWORD dwFlags);
803   LWSTDAPI_(DWORD) SHRegSetPathA(HKEY hKey,LPCSTR pcszSubKey,LPCSTR pcszValue,LPCSTR pcszPath,DWORD dwFlags);
804   LWSTDAPI_(DWORD) SHRegSetPathW(HKEY hKey,LPCWSTR pcszSubKey,LPCWSTR pcszValue,LPCWSTR pcszPath,DWORD dwFlags);
805 
806   typedef enum {
807     SHREGDEL_DEFAULT = 0x00000000,SHREGDEL_HKCU = 0x00000001,SHREGDEL_HKLM = 0x00000010,SHREGDEL_BOTH = 0x00000011
808   } SHREGDEL_FLAGS;
809 
810   typedef enum {
811     SHREGENUM_DEFAULT = 0x00000000,SHREGENUM_HKCU = 0x00000001,SHREGENUM_HKLM = 0x00000010,SHREGENUM_BOTH = 0x00000011
812   } SHREGENUM_FLAGS;
813 
814 #define SHREGSET_HKCU 0x00000001
815 #define SHREGSET_FORCE_HKCU 0x00000002
816 #define SHREGSET_HKLM 0x00000004
817 #define SHREGSET_FORCE_HKLM 0x00000008
818 #define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
819 
820   typedef HANDLE HUSKEY;
821   typedef HUSKEY *PHUSKEY;
822 
823   LWSTDAPI_(LONG) SHRegCreateUSKeyA(LPCSTR pszPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,DWORD dwFlags);
824   LWSTDAPI_(LONG) SHRegCreateUSKeyW(LPCWSTR pwzPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,DWORD dwFlags);
825   LWSTDAPI_(LONG) SHRegOpenUSKeyA(LPCSTR pszPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,WINBOOL fIgnoreHKCU);
826   LWSTDAPI_(LONG) SHRegOpenUSKeyW(LPCWSTR pwzPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,WINBOOL fIgnoreHKCU);
827   LWSTDAPI_(LONG) SHRegQueryUSValueA(HUSKEY hUSKey,LPCSTR pszValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
828   LWSTDAPI_(LONG) SHRegQueryUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
829   LWSTDAPI_(LONG) SHRegWriteUSValueA(HUSKEY hUSKey,LPCSTR pszValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
830   LWSTDAPI_(LONG) SHRegWriteUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
831   LWSTDAPI_(LONG) SHRegDeleteUSValueA(HUSKEY hUSKey,LPCSTR pszValue,SHREGDEL_FLAGS delRegFlags);
832   LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyW(HUSKEY hUSKey,LPCWSTR pwzSubKey,SHREGDEL_FLAGS delRegFlags);
833   LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyA(HUSKEY hUSKey,LPCSTR pszSubKey,SHREGDEL_FLAGS delRegFlags);
834   LWSTDAPI_(LONG) SHRegDeleteUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,SHREGDEL_FLAGS delRegFlags);
835   LWSTDAPI_(LONG) SHRegEnumUSKeyA(HUSKEY hUSKey,DWORD dwIndex,LPSTR pszName,LPDWORD pcchName,SHREGENUM_FLAGS enumRegFlags);
836   LWSTDAPI_(LONG) SHRegEnumUSKeyW(HUSKEY hUSKey,DWORD dwIndex,LPWSTR pwzName,LPDWORD pcchName,SHREGENUM_FLAGS enumRegFlags);
837   LWSTDAPI_(LONG) SHRegEnumUSValueA(HUSKEY hUSkey,DWORD dwIndex,LPSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData,SHREGENUM_FLAGS enumRegFlags);
838   LWSTDAPI_(LONG) SHRegEnumUSValueW(HUSKEY hUSkey,DWORD dwIndex,LPWSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData,SHREGENUM_FLAGS enumRegFlags);
839   LWSTDAPI_(LONG) SHRegQueryInfoUSKeyA(HUSKEY hUSKey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen,SHREGENUM_FLAGS enumRegFlags);
840   LWSTDAPI_(LONG) SHRegQueryInfoUSKeyW(HUSKEY hUSKey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen,SHREGENUM_FLAGS enumRegFlags);
841   LWSTDAPI_(LONG) SHRegCloseUSKey(HUSKEY hUSKey);
842   LWSTDAPI_(LONG) SHRegGetUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
843   LWSTDAPI_(LONG) SHRegGetUSValueW(LPCWSTR pwzSubKey,LPCWSTR pwzValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
844   LWSTDAPI_(LONG) SHRegSetUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
845   LWSTDAPI_(LONG) SHRegSetUSValueW(LPCWSTR pwzSubKey,LPCWSTR pwzValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
846   LWSTDAPI_(int) SHRegGetIntW(HKEY hk,LPCWSTR pwzKey,int iDefault);
847 
848 #define SHRegCreateUSKey __MINGW_NAME_AW(SHRegCreateUSKey)
849 #define SHRegOpenUSKey __MINGW_NAME_AW(SHRegOpenUSKey)
850 #define SHRegQueryUSValue __MINGW_NAME_AW(SHRegQueryUSValue)
851 #define SHRegWriteUSValue __MINGW_NAME_AW(SHRegWriteUSValue)
852 #define SHRegDeleteUSValue __MINGW_NAME_AW(SHRegDeleteUSValue)
853 #define SHRegDeleteEmptyUSKey __MINGW_NAME_AW(SHRegDeleteEmptyUSKey)
854 #define SHRegEnumUSKey __MINGW_NAME_AW(SHRegEnumUSKey)
855 #define SHRegEnumUSValue __MINGW_NAME_AW(SHRegEnumUSValue)
856 #define SHRegQueryInfoUSKey __MINGW_NAME_AW(SHRegQueryInfoUSKey)
857 #define SHRegGetUSValue __MINGW_NAME_AW(SHRegGetUSValue)
858 #define SHRegSetUSValue __MINGW_NAME_AW(SHRegSetUSValue)
859 #define SHRegGetInt __MINGW_NAME_AW(SHRegGetInt)
860 #define SHRegGetBoolUSValue __MINGW_NAME_AW(SHRegGetBoolUSValue)
861 
862   LWSTDAPI_(WINBOOL) SHRegGetBoolUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,WINBOOL fIgnoreHKCU,WINBOOL fDefault);
863   LWSTDAPI_(WINBOOL) SHRegGetBoolUSValueW(LPCWSTR pszSubKey,LPCWSTR pszValue,WINBOOL fIgnoreHKCU,WINBOOL fDefault);
864 
865   enum {
866     ASSOCF_NONE = 0x00000000,
867     ASSOCF_INIT_NOREMAPCLSID = 0x00000001,
868     ASSOCF_INIT_BYEXENAME = 0x00000002,
869     ASSOCF_OPEN_BYEXENAME = 0x00000002,
870     ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004,
871     ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008,
872     ASSOCF_NOUSERSETTINGS = 0x00000010,
873     ASSOCF_NOTRUNCATE = 0x00000020,
874     ASSOCF_VERIFY = 0x00000040,
875     ASSOCF_REMAPRUNDLL = 0x00000080,
876     ASSOCF_NOFIXUPS = 0x00000100,
877     ASSOCF_IGNOREBASECLASS = 0x00000200,
878     ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400
879 #if NTDDI_VERSION >= NTDDI_WIN8
880     ,ASSOCF_INIT_FIXED_PROGID = 0x00000800
881     ,ASSOCF_IS_PROTOCOL = 0x00001000
882     ,ASSOCF_INIT_FOR_FILE = 0x00002000
883 #endif
884 #if NTDDI_VERSION >= NTDDI_WIN10_RS1
885     ,ASSOCF_IS_FULL_URI = 0x00004000
886     ,ASSOCF_PER_MACHINE_ONLY = 0x00008000
887 #endif
888 #if NTDDI_VERSION >= NTDDI_WIN10_RS4
889     ,ASSOCF_APP_TO_APP = 0x00010000
890 #endif
891   };
892 
893   typedef DWORD ASSOCF;
894 
895   typedef enum {
896     ASSOCSTR_COMMAND = 1,
897     ASSOCSTR_EXECUTABLE,
898     ASSOCSTR_FRIENDLYDOCNAME,
899     ASSOCSTR_FRIENDLYAPPNAME,
900     ASSOCSTR_NOOPEN,
901     ASSOCSTR_SHELLNEWVALUE,
902     ASSOCSTR_DDECOMMAND,
903     ASSOCSTR_DDEIFEXEC,
904     ASSOCSTR_DDEAPPLICATION,
905     ASSOCSTR_DDETOPIC,
906     ASSOCSTR_INFOTIP,
907     ASSOCSTR_QUICKTIP,
908     ASSOCSTR_TILEINFO,
909     ASSOCSTR_CONTENTTYPE,
910     ASSOCSTR_DEFAULTICON,
911     ASSOCSTR_SHELLEXTENSION,
912 #if _WIN32_WINNT >= 0x601
913     ASSOCSTR_DROPTARGET,
914     ASSOCSTR_DELEGATEEXECUTE,
915 #endif
916     ASSOCSTR_SUPPORTED_URI_PROTOCOLS,
917 #if (NTDDI_VERSION >= NTDDI_WIN10)
918     ASSOCSTR_PROGID,
919     ASSOCSTR_APPID,
920     ASSOCSTR_APPPUBLISHER,
921     ASSOCSTR_APPICONREFERENCE,
922 #endif
923     ASSOCSTR_MAX
924   } ASSOCSTR;
925 
926   typedef enum {
927     ASSOCKEY_SHELLEXECCLASS = 1,
928     ASSOCKEY_APP,
929     ASSOCKEY_CLASS,
930     ASSOCKEY_BASECLASS,
931     ASSOCKEY_MAX
932   } ASSOCKEY;
933 
934   typedef enum {
935     ASSOCDATA_MSIDESCRIPTOR = 1,
936     ASSOCDATA_NOACTIVATEHANDLER,
937     ASSOCDATA_QUERYCLASSSTORE,
938     ASSOCDATA_HASPERUSERASSOC,
939     ASSOCDATA_EDITFLAGS,
940     ASSOCDATA_VALUE,
941     ASSOCDATA_MAX
942   } ASSOCDATA;
943 
944   typedef enum {
945     ASSOCENUM_NONE
946   } ASSOCENUM;
947 
948   typedef enum {
949     FTA_None                    = 0x00000000,
950     FTA_Exclude                 = 0x00000001,
951     FTA_Show                    = 0x00000002,
952     FTA_HasExtension            = 0x00000004,
953     FTA_NoEdit                  = 0x00000008,
954     FTA_NoRemove                = 0x00000010,
955     FTA_NoNewVerb               = 0x00000020,
956     FTA_NoEditVerb              = 0x00000040,
957     FTA_NoRemoveVerb            = 0x00000080,
958     FTA_NoEditDesc              = 0x00000100,
959     FTA_NoEditIcon              = 0x00000200,
960     FTA_NoEditDflt              = 0x00000400,
961     FTA_NoEditVerbCmd           = 0x00000800,
962     FTA_NoEditVerbExe           = 0x00001000,
963     FTA_NoDDE                   = 0x00002000,
964 
965     FTA_NoEditMIME              = 0x00008000,
966     FTA_OpenIsSafe              = 0x00010000,
967     FTA_AlwaysUnsafe            = 0x00020000,
968 
969     FTA_NoRecentDocs            = 0x00100000,
970     FTA_SafeForElevation        = 0x00200000,
971     FTA_AlwaysUseDirectInvoke   = 0x00400000
972   } FILETYPEATTRIBUTEFLAGS;
973 
974   DEFINE_ENUM_FLAG_OPERATORS(FILETYPEATTRIBUTEFLAGS)
975 
976 #undef INTERFACE
977 #define INTERFACE IQueryAssociations
DECLARE_INTERFACE_(IQueryAssociations,IUnknown)978   DECLARE_INTERFACE_(IQueryAssociations,IUnknown) {
979     BEGIN_INTERFACE
980 
981     STDMETHOD (QueryInterface)(THIS_ REFIID riid,void **ppv) PURE;
982     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
983     STDMETHOD_(ULONG,Release) (THIS) PURE;
984     STDMETHOD (Init)(THIS_ ASSOCF flags,LPCWSTR pszAssoc,HKEY hkProgid,HWND hwnd) PURE;
985     STDMETHOD (GetString)(THIS_ ASSOCF flags,ASSOCSTR str,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut) PURE;
986     STDMETHOD (GetKey)(THIS_ ASSOCF flags,ASSOCKEY key,LPCWSTR pszExtra,HKEY *phkeyOut) PURE;
987     STDMETHOD (GetData)(THIS_ ASSOCF flags,ASSOCDATA data,LPCWSTR pszExtra,LPVOID pvOut,DWORD *pcbOut) PURE;
988     STDMETHOD (GetEnum)(THIS_ ASSOCF flags,ASSOCENUM assocenum,LPCWSTR pszExtra,REFIID riid,LPVOID *ppvOut) PURE;
989 
990     END_INTERFACE
991   };
992 
993 #define AssocQueryString __MINGW_NAME_AW(AssocQueryString)
994 #define AssocQueryStringByKey __MINGW_NAME_AW(AssocQueryStringByKey)
995 #define AssocQueryKey __MINGW_NAME_AW(AssocQueryKey)
996 
997   LWSTDAPI AssocCreate(CLSID clsid,REFIID riid,LPVOID *ppv);
998   STDAPI_(DWORD) SHGetAssocKeys(IQueryAssociations *pqa, HKEY *rgKeys, DWORD cKeys);
999   LWSTDAPI AssocQueryStringA(ASSOCF flags,ASSOCSTR str,LPCSTR pszAssoc,LPCSTR pszExtra,LPSTR pszOut,DWORD *pcchOut);
1000   LWSTDAPI AssocQueryStringW(ASSOCF flags,ASSOCSTR str,LPCWSTR pszAssoc,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut);
1001   LWSTDAPI AssocQueryStringByKeyA(ASSOCF flags,ASSOCSTR str,HKEY hkAssoc,LPCSTR pszExtra,LPSTR pszOut,DWORD *pcchOut);
1002   LWSTDAPI AssocQueryStringByKeyW(ASSOCF flags,ASSOCSTR str,HKEY hkAssoc,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut);
1003   LWSTDAPI AssocQueryKeyA(ASSOCF flags,ASSOCKEY key,LPCSTR pszAssoc,LPCSTR pszExtra,HKEY *phkeyOut);
1004   LWSTDAPI AssocQueryKeyW(ASSOCF flags,ASSOCKEY key,LPCWSTR pszAssoc,LPCWSTR pszExtra,HKEY *phkeyOut);
1005 
1006 #if (_WIN32_IE >= 0x0601)
1007   LWSTDAPI_(WINBOOL) AssocIsDangerous(LPCWSTR pszAssoc);
1008 #endif
1009 
1010 #if (_WIN32_IE >= 0x0603)
1011   LWSTDAPI AssocGetPerceivedType(LPCWSTR pszExt,PERCEIVED *ptype,PERCEIVEDFLAG *pflag,LPWSTR *ppszType);
1012 #endif
1013 
1014 #endif
1015 
1016 #ifndef NO_SHLWAPI_STREAM
1017 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
1018 
1019 #ifndef __IStream_FWD_DEFINED__
1020 #define __IStream_FWD_DEFINED__
1021   typedef interface IStream IStream;
1022 #endif
1023 
1024 #define SHOpenRegStream __MINGW_NAME_AW(SHOpenRegStream)
1025 #define SHOpenRegStream2 __MINGW_NAME_AW(SHOpenRegStream2)
1026 #define SHCreateStreamOnFile __MINGW_NAME_AW(SHCreateStreamOnFile)
1027 
1028   LWSTDAPI_(struct IStream *) SHOpenRegStreamA(HKEY hkey,LPCSTR pszSubkey,LPCSTR pszValue,DWORD grfMode);
1029   LWSTDAPI_(struct IStream *) SHOpenRegStreamW(HKEY hkey,LPCWSTR pszSubkey,LPCWSTR pszValue,DWORD grfMode);
1030   LWSTDAPI_(struct IStream *) SHOpenRegStream2A(HKEY hkey,LPCSTR pszSubkey,LPCSTR pszValue,DWORD grfMode);
1031   LWSTDAPI_(struct IStream *) SHOpenRegStream2W(HKEY hkey,LPCWSTR pszSubkey,LPCWSTR pszValue,DWORD grfMode);
1032 
1033 #undef SHOpenRegStream
1034 #define SHOpenRegStream SHOpenRegStream2
1035   LWSTDAPI SHCreateStreamOnFileA(LPCSTR pszFile,DWORD grfMode,struct IStream **ppstm);
1036   LWSTDAPI SHCreateStreamOnFileW(LPCWSTR pszFile,DWORD grfMode,struct IStream **ppstm);
1037 
1038 #if (_WIN32_IE >= 0x0600)
1039   LWSTDAPI SHCreateStreamOnFileEx(LPCWSTR pszFile,DWORD grfMode,DWORD dwAttributes,WINBOOL fCreate,struct IStream *pstmTemplate,struct IStream **ppstm);
1040 #endif
1041 
1042   LWSTDAPI_(IStream *) SHCreateMemStream(const BYTE *pInit, UINT cbInit);
1043 
1044 #endif
1045 #endif
1046 
1047 #if !defined(NO_SHLWAPI_ISOS)
1048 #define OS_WINDOWS                  0
1049 #define OS_NT                       1
1050 #define OS_WIN95ORGREATER           2
1051 #define OS_NT4ORGREATER             3
1052 #define OS_WIN98ORGREATER           5
1053 #define OS_WIN98_GOLD               6
1054 #define OS_WIN2000ORGREATER         7
1055 #define OS_WIN2000PRO               8
1056 #define OS_WIN2000SERVER            9
1057 #define OS_WIN2000ADVSERVER         10
1058 #define OS_WIN2000DATACENTER        11
1059 #define OS_WIN2000TERMINAL          12
1060 #define OS_EMBEDDED                 13
1061 #define OS_TERMINALCLIENT           14
1062 #define OS_TERMINALREMOTEADMIN      15
1063 #define OS_WIN95_GOLD               16
1064 #define OS_MEORGREATER              17
1065 #define OS_XPORGREATER              18
1066 #define OS_HOME                     19
1067 #define OS_PROFESSIONAL             20
1068 #define OS_DATACENTER               21
1069 #define OS_ADVSERVER                22
1070 #define OS_SERVER                   23
1071 #define OS_TERMINALSERVER           24
1072 #define OS_PERSONALTERMINALSERVER   25
1073 #define OS_FASTUSERSWITCHING        26
1074 #define OS_WELCOMELOGONUI           27
1075 #define OS_DOMAINMEMBER             28
1076 #define OS_ANYSERVER                29
1077 #define OS_WOW6432                  30
1078 #define OS_WEBSERVER                31
1079 #define OS_SMALLBUSINESSSERVER      32
1080 #define OS_TABLETPC                 33
1081 #define OS_SERVERADMINUI            34
1082 #define OS_MEDIACENTER              35
1083 #define OS_APPLIANCE                36
1084 
1085   LWSTDAPI_(WINBOOL) IsOS(DWORD dwOS);
1086 #endif
1087 
1088   typedef enum {
1089     GLOBALCOUNTER_SEARCHMANAGER,
1090     GLOBALCOUNTER_SEARCHOPTIONS,
1091     GLOBALCOUNTER_FOLDERSETTINGSCHANGE,
1092     GLOBALCOUNTER_RATINGS,
1093     GLOBALCOUNTER_APPROVEDSITES,
1094     GLOBALCOUNTER_RESTRICTIONS,
1095     GLOBALCOUNTER_SHELLSETTINGSCHANGED,
1096     GLOBALCOUNTER_SYSTEMPIDLCHANGE,
1097     GLOBALCOUNTER_OVERLAYMANAGER,
1098     GLOBALCOUNTER_QUERYASSOCIATIONS,
1099     GLOBALCOUNTER_IESESSIONS,
1100     GLOBALCOUNTER_IEONLY_SESSIONS,
1101     GLOBALCOUNTER_APPLICATION_DESTINATIONS,
1102     __UNUSED_RECYCLE_WAS_GLOBALCOUNTER_CSCSYNCINPROGRESS,
1103     GLOBALCOUNTER_BITBUCKETNUMDELETERS,
1104     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_SHARES,
1105     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_A,
1106     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_B,
1107     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_C,
1108     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_D,
1109     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_E,
1110     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_F,
1111     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_G,
1112     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_H,
1113     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_I,
1114     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_J,
1115     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_K,
1116     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_L,
1117     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_M,
1118     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_N,
1119     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_O,
1120     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_P,
1121     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_Q,
1122     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_R,
1123     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_S,
1124     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_T,
1125     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_U,
1126     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_V,
1127     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_W,
1128     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_X,
1129     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_Y,
1130     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_Z,
1131     __UNUSED_RECYCLE_WAS_GLOBALCOUNTER_RECYCLEDIRTYCOUNT_SERVERDRIVE,
1132     __UNUSED_RECYCLE_WAS_GLOBALCOUNTER_RECYCLEGLOBALDIRTYCOUNT,
1133     GLOBALCOUNTER_RECYCLEBINENUM,
1134     GLOBALCOUNTER_RECYCLEBINCORRUPTED,
1135     GLOBALCOUNTER_RATINGS_STATECOUNTER,
1136     GLOBALCOUNTER_PRIVATE_PROFILE_CACHE,
1137     GLOBALCOUNTER_INTERNETTOOLBAR_LAYOUT,
1138     GLOBALCOUNTER_FOLDERDEFINITION_CACHE,
1139     GLOBALCOUNTER_COMMONPLACES_LIST_CACHE,
1140     GLOBALCOUNTER_PRIVATE_PROFILE_CACHE_MACHINEWIDE,
1141     GLOBALCOUNTER_ASSOCCHANGED,
1142 #if (NTDDI_VERSION >= NTDDI_WIN8)
1143     GLOBALCOUNTER_APP_ITEMS_STATE_STORE_CACHE,
1144     GLOBALCOUNTER_SETTINGSYNC_ENABLED,
1145     GLOBALCOUNTER_APPSFOLDER_FILETYPEASSOCIATION_COUNTER,
1146     GLOBALCOUNTER_USERINFOCHANGED,
1147 #if (NTDDI_VERSION >= NTDDI_WINBLUE)
1148     GLOBALCOUNTER_SYNC_ENGINE_INFORMATION_CACHE_MACHINEWIDE,
1149 #endif
1150 #endif
1151 #if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
1152     GLOBALCOUNTER_BANNERS_DATAMODEL_CACHE_MACHINEWIDE,
1153 #endif
1154     GLOBALCOUNTER_MAXIMUMVALUE
1155   } SHGLOBALCOUNTER;
1156 
1157 #if (NTDDI_VERSION >= NTDDI_WIN7)
1158   LWSTDAPI_(long) SHGlobalCounterGetValue(const SHGLOBALCOUNTER id);
1159   LWSTDAPI_(long) SHGlobalCounterIncrement(const SHGLOBALCOUNTER id);
1160   LWSTDAPI_(long) SHGlobalCounterDecrement(const SHGLOBALCOUNTER id);
1161 #endif
1162 
1163 #if (_WIN32_IE >= 0x0603)
1164   LWSTDAPI_(HANDLE) SHAllocShared(const void *pvData,DWORD dwSize,DWORD dwProcessId);
1165   LWSTDAPI_(WINBOOL) SHFreeShared(HANDLE hData,DWORD dwProcessId);
1166   LWSTDAPI_(void *) SHLockShared(HANDLE hData,DWORD dwProcessId);
1167   LWSTDAPI_(WINBOOL) SHUnlockShared(void *pvData);
1168 #endif
1169 
1170 #if (_WIN32_IE >= 0x0501)
1171 #define PLATFORM_UNKNOWN 0
1172 #define PLATFORM_IE3 1
1173 #define PLATFORM_BROWSERONLY 1
1174 #define PLATFORM_INTEGRATED 2
1175 
1176   LWSTDAPI WhichPlatform(void);
1177 
1178 typedef struct {
1179   const IID *piid;
1180   int dwOffset;
1181 } QITAB, *LPQITAB;
1182 typedef const QITAB *LPCQITAB;
1183 
1184 #ifndef OFFSETOFCLASS
1185 #define OFFSETOFCLASS(base, derived) ((DWORD)(DWORD_PTR)(static_cast<base*>((derived*)8))-8)
1186 #endif
1187 
1188 #ifdef __cplusplus
1189 #define QITABENTMULTI(Cthis, Ifoo, Iimpl) { &__uuidof(Ifoo), OFFSETOFCLASS(Iimpl, Cthis) }
1190 #else
1191 #define QITABENTMULTI(Cthis, Ifoo, Iimpl) { (IID*) &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
1192 #endif
1193 #define QITABENTMULTI2(Cthis, Ifoo, Iimpl) { (IID*) &Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
1194 #define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo)
1195 
1196   STDAPI QISearch(void *that, LPCQITAB pqit, REFIID riid, void **ppv);
1197 
1198 #define ILMM_IE4 0
1199   LWSTDAPI_(WINBOOL) SHIsLowMemoryMachine(DWORD dwType);
1200   LWSTDAPI_(int) GetMenuPosFromID(HMENU hMenu, UINT id);
1201   LWSTDAPI SHGetInverseCMAP(BYTE *pbMap, ULONG cbMap);
1202 #endif
1203 
1204 #define SHACF_DEFAULT 0x00000000
1205 #define SHACF_FILESYSTEM 0x00000001
1206 #define SHACF_URLALL (SHACF_URLHISTORY | SHACF_URLMRU)
1207 #define SHACF_URLHISTORY 0x00000002
1208 #define SHACF_URLMRU 0x00000004
1209 #define SHACF_USETAB 0x00000008
1210 #define SHACF_FILESYS_ONLY 0x00000010
1211 
1212 #if (_WIN32_IE >= 0x0600)
1213 #define SHACF_FILESYS_DIRS 0x00000020
1214 #endif
1215 
1216 #if (_WIN32_IE >= 0x0700)
1217 #define SHACF_VIRTUAL_NAMESPACE 0x00000040
1218 #endif
1219 
1220 #define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000
1221 #define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000
1222 #define SHACF_AUTOAPPEND_FORCE_ON 0x40000000
1223 #define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000
1224 
1225   LWSTDAPI SHAutoComplete(HWND hwndEdit,DWORD dwFlags);
1226   LWSTDAPI SHSetThreadRef(IUnknown *punk);
1227   LWSTDAPI SHGetThreadRef(IUnknown **ppunk);
1228   LWSTDAPI_(WINBOOL) SHSkipJunction(struct IBindCtx *pbc,const CLSID *pclsid);
1229 
1230 #if (_WIN32_IE >= 0x0603)
1231   LWSTDAPI SHCreateThreadRef(LONG *pcRef,IUnknown **ppunk);
1232 #endif
1233 
1234 #define CTF_INSIST 0x00000001
1235 #define CTF_THREAD_REF 0x00000002
1236 #define CTF_PROCESS_REF 0x00000004
1237 #define CTF_COINIT_STA 0x00000008
1238 #define CTF_COINIT 0x00000008
1239 #if (_WIN32_IE >= _WIN32_IE_IE60)
1240 #define CTF_FREELIBANDEXIT 0x00000010
1241 #define CTF_REF_COUNTED 0x00000020
1242 #define CTF_WAIT_ALLOWCOM 0x00000040
1243 #endif
1244 #if (_WIN32_IE >= _WIN32_IE_IE70)
1245 #define CTF_UNUSED 0x00000080
1246 #define CTF_INHERITWOW64 0x00000100
1247 #endif
1248 #if (NTDDI_VERSION >= NTDDI_VISTA)
1249 #define CTF_WAIT_NO_REENTRANCY 0x00000200
1250 #endif
1251 #if (NTDDI_VERSION >= NTDDI_WIN7)
1252 #define CTF_KEYBOARD_LOCALE 0x00000400
1253 #define CTF_OLEINITIALIZE 0x00000800
1254 #define CTF_COINIT_MTA 0x00001000
1255 #define CTF_NOADDREFLIB 0x00002000
1256 #endif
1257 
1258   typedef DWORD SHCT_FLAGS;
1259 
1260   LWSTDAPI_(WINBOOL) SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc,void *pData, SHCT_FLAGS dwFlags,LPTHREAD_START_ROUTINE pfnCallback);
1261   LWSTDAPI_(WINBOOL) SHCreateThreadWithHandle(LPTHREAD_START_ROUTINE pfnThreadProc, void *pData, SHCT_FLAGS dwflags, LPTHREAD_START_ROUTINE pfnCallback, HANDLE *pHandle);
1262 
1263 #if (NTDDI_VERSION >= NTDDI_WIN8)
1264   LWSTDAPI_(void) SetProcessReference(IUnknown *punk);
1265   LWSTDAPI GetProcessReference(IUnknown **punk);
1266 #endif
1267 
1268 #if (_WIN32_IE >= _WIN32_IE_IE60)
1269   LWSTDAPI SHReleaseThreadRef(void);
1270 #endif
1271 
1272 #ifndef NO_SHLWAPI_GDI
1273   LWSTDAPI_(HPALETTE) SHCreateShellPalette(HDC hdc);
1274   LWSTDAPI_(void) ColorRGBToHLS(COLORREF clrRGB,WORD *pwHue,WORD *pwLuminance,WORD *pwSaturation);
1275   LWSTDAPI_(COLORREF) ColorHLSToRGB(WORD wHue,WORD wLuminance,WORD wSaturation);
1276   LWSTDAPI_(COLORREF) ColorAdjustLuma(COLORREF clrRGB,int n,WINBOOL fScale);
1277 #endif
1278 
1279   typedef struct _DLLVERSIONINFO {
1280     DWORD cbSize;
1281     DWORD dwMajorVersion;
1282     DWORD dwMinorVersion;
1283     DWORD dwBuildNumber;
1284     DWORD dwPlatformID;
1285   } DLLVERSIONINFO;
1286 
1287 #define DLLVER_PLATFORM_WINDOWS 0x00000001
1288 #define DLLVER_PLATFORM_NT 0x00000002
1289 
1290   typedef struct _DLLVERSIONINFO2 {
1291     DLLVERSIONINFO info1;
1292     DWORD dwFlags;
1293     ULONGLONG ullVersion;
1294 
1295   } DLLVERSIONINFO2;
1296 
1297 #define DLLVER_MAJOR_MASK 0xFFFF000000000000
1298 #define DLLVER_MINOR_MASK 0x0000FFFF00000000
1299 #define DLLVER_BUILD_MASK 0x00000000FFFF0000
1300 #define DLLVER_QFE_MASK 0x000000000000FFFF
1301 
1302 #define MAKEDLLVERULL(major,minor,build,qfe) (((ULONGLONG)(major) << 48) | ((ULONGLONG)(minor) << 32) | ((ULONGLONG)(build) << 16) | ((ULONGLONG)(qfe) << 0))
1303 
1304   typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);
1305 
1306   STDAPI DllInstall(WINBOOL bInstall,LPCWSTR pszCmdLine);
1307 
1308 #if (_WIN32_IE >= 0x0602)
1309   LWSTDAPI_(WINBOOL) IsInternetESCEnabled(void);
1310 #endif
1311 
1312 #ifndef NO_SHLWAPI_HTTP
1313 
1314 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
1315 
1316 #if (_WIN32_IE >= 0x0603)
1317 #define GetAcceptLanguages __MINGW_NAME_AW(GetAcceptLanguages)
1318   LWSTDAPI GetAcceptLanguagesA(LPSTR psz,DWORD *pcch);
1319   LWSTDAPI GetAcceptLanguagesW(LPWSTR psz,DWORD *pcch);
1320 #endif
1321 
1322 #endif
1323 
1324 #endif
1325 
1326 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
1327 
1328 #if (_WIN32_IE < _WIN32_IE_IE70) && !defined(NO_SHLWAPI_STOPWATCH)
1329 #define SPMODE_SHELL      0x00000001
1330 #define SPMODE_DEBUGOUT   0x00000002
1331 #define SPMODE_TEST       0x00000004
1332 #define SPMODE_BROWSER    0x00000008
1333 #define SPMODE_FLUSH      0x00000010
1334 #define SPMODE_EVENT      0x00000020
1335 #define SPMODE_MSVM       0x00000040
1336 #define SPMODE_FORMATTEXT 0x00000080
1337 #define SPMODE_PROFILE    0x00000100
1338 #define SPMODE_DEBUGBREAK 0x00000200
1339 #define SPMODE_MSGTRACE   0x00000400
1340 #define SPMODE_PERFTAGS   0x00000800
1341 #define SPMODE_MEMWATCH   0x00001000
1342 #define SPMODE_DBMON      0x00002000
1343 #define SPMODE_MULTISTOP  0x00004000
1344 #if !defined(NO_ETW_TRACING)
1345 #define SPMODE_EVENTTRACE 0x00008000
1346 #endif
1347 
1348   DWORD WINAPI StopWatchMode(void);
1349   DWORD WINAPI StopWatchFlush(void);
1350 #endif
1351 
1352   LWSTDAPI_(void) IUnknown_Set(IUnknown **ppunk, IUnknown *punk);
1353   LWSTDAPI_(void) IUnknown_AtomicRelease(void **ppunk);
1354   LWSTDAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd);
1355   LWSTDAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);
1356   LWSTDAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv);
1357   LWSTDAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut);
1358 #ifndef COBJMACROS
1359   LWSTDAPI IStream_Read(IStream *pstm, void *pv, ULONG cb);
1360   LWSTDAPI IStream_Write(IStream *pstm, const void *pv, ULONG cb);
1361 #endif
1362   LWSTDAPI IStream_Reset(IStream *pstm);
1363   LWSTDAPI IStream_Size(IStream *pstm, ULARGE_INTEGER *pui);
1364 
1365 #ifndef __IConnectionPoint_FWD_DEFINED__
1366 #define __IConnectionPoint_FWD_DEFINED__
1367   typedef interface IConnectionPoint IConnectionPoint;
1368 #endif
1369 
1370   LWSTDAPI ConnectToConnectionPoint(IUnknown *punk, REFIID riidEvent, WINBOOL fConnect, IUnknown *punkTarget, DWORD *pdwCookie, IConnectionPoint **ppcpOut);
1371 
1372 #if (NTDDI_VERSION >= NTDDI_VISTA)
1373   LWSTDAPI IStream_ReadPidl(IStream *pstm, PIDLIST_RELATIVE *ppidlOut);
1374   LWSTDAPI IStream_WritePidl(IStream *pstm, PCUIDLIST_RELATIVE pidlWrite);
1375 #endif
1376 
1377 #if (_WIN32_IE >= _WIN32_IE_IE70)
1378   LWSTDAPI IStream_ReadStr(IStream *pstm, PWSTR *ppsz);
1379   LWSTDAPI IStream_WriteStr(IStream *pstm, PCWSTR psz);
1380   LWSTDAPI IStream_Copy(IStream *pstmFrom, IStream *pstmTo, DWORD cb);
1381 #endif
1382 
1383 #if (_WIN32_IE >= 0x0601)
1384 #define SHGVSPB_PERUSER         0x00000001
1385 #define SHGVSPB_ALLUSERS        0x00000002
1386 #define SHGVSPB_PERFOLDER       0x00000004
1387 #define SHGVSPB_ALLFOLDERS      0x00000008
1388 #define SHGVSPB_INHERIT         0x00000010
1389 #define SHGVSPB_ROAM            0x00000020
1390 #define SHGVSPB_NOAUTODEFAULTS  0x80000000
1391 
1392 #define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER)
1393 #define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS)
1394 #define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS)
1395 #define SHGVSPB_GLOBALDEFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS)
1396 
1397   LWSTDAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl,LPCWSTR pszBagName,DWORD dwFlags,REFIID riid,void **ppv);
1398 #endif
1399 
1400 #define FDTF_SHORTTIME          0x00000001
1401 #define FDTF_SHORTDATE          0x00000002
1402 #define FDTF_DEFAULT            (FDTF_SHORTDATE | FDTF_SHORTTIME)
1403 #define FDTF_LONGDATE           0x00000004
1404 #define FDTF_LONGTIME           0x00000008
1405 #define FDTF_RELATIVE           0x00000010
1406 #define FDTF_LTRDATE            0x00000100
1407 #define FDTF_RTLDATE            0x00000200
1408 #define FDTF_NOAUTOREADINGORDER 0x00000400
1409 
1410   LWSTDAPI_(int) SHFormatDateTimeA(const FILETIME UNALIGNED *pft, DWORD *pdwFlags, LPSTR pszBuf, UINT cchBuf);
1411   LWSTDAPI_(int) SHFormatDateTimeW(const FILETIME UNALIGNED *pft, DWORD *pdwFlags, LPWSTR pszBuf, UINT cchBuf);
1412 
1413 #define SHFormatDateTime __MINGW_NAME_AW(SHFormatDateTime)
1414 
1415 #endif
1416 
1417 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
1418 
1419   LWSTDAPI_(int) SHAnsiToUnicode(PCSTR pszSrc, PWSTR pwszDst, int cwchBuf);
1420   LWSTDAPI_(int) SHAnsiToAnsi(PCSTR pszSrc, PSTR pszDst, int cchBuf);
1421   LWSTDAPI_(int) SHUnicodeToAnsi(PCWSTR pwszSrc, PSTR pszDst, int cchBuf);
1422   LWSTDAPI_(int) SHUnicodeToUnicode(PCWSTR pwzSrc, PWSTR pwzDst, int cwchBuf);
1423 
1424 #if defined(UNICODE)
1425 #define SHTCharToUnicode(wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
1426 #define SHTCharToAnsi(wzSrc, szDest, cchSize)    SHUnicodeToAnsi(wzSrc, szDest, cchSize)
1427 #define SHUnicodeToTChar(wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
1428 #define SHAnsiToTChar(szSrc, wzDest, cchSize)    SHAnsiToUnicode(szSrc, wzDest, cchSize)
1429 #else
1430 #define SHTCharToUnicode(szSrc, wzDest, cchSize) SHAnsiToUnicode(szSrc, wzDest, cchSize)
1431 #define SHTCharToAnsi(szSrc, szDest, cchSize)    SHAnsiToAnsi(szSrc, szDest, cchSize)
1432 #define SHUnicodeToTChar(wzSrc, szDest, cchSize) SHUnicodeToAnsi(wzSrc, szDest, cchSize)
1433 #define SHAnsiToTChar(szSrc, szDest, cchSize)    SHAnsiToAnsi(szSrc, szDest, cchSize)
1434 #endif
1435 
1436 #endif
1437 
1438 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
1439 
1440   LWSTDAPI_(int) SHMessageBoxCheckA(HWND hwnd, LPCSTR pszText, LPCSTR pszCaption, UINT uType, int iDefault, LPCSTR pszRegVal);
1441   LWSTDAPI_(int) SHMessageBoxCheckW(HWND hwnd, LPCWSTR pszText, LPCWSTR pszCaption, UINT uType, int iDefault, LPCWSTR pszRegVal);
1442 
1443 #define SHMessageBoxCheck  __MINGW_NAME_AW(SHMessageBoxCheck)
1444 
1445   LWSTDAPI_(LRESULT) SHSendMessageBroadcastA(UINT uMsg, WPARAM wParam, LPARAM lParam);
1446   LWSTDAPI_(LRESULT) SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam);
1447 
1448 #define SHSendMessageBroadcast  __MINGW_NAME_AW(SHSendMessageBroadcast)
1449 
1450   LWSTDAPI_(CHAR) SHStripMneumonicA(LPSTR pszMenu);
1451   LWSTDAPI_(WCHAR) SHStripMneumonicW(LPWSTR pszMenu);
1452 
1453 #define SHStripMneumonic __MINGW_NAME_AW(SHStripMneumonic)
1454 
1455 #endif
1456 
1457 #if defined(__cplusplus)
1458 }
1459 #endif
1460 
1461 #include <poppack.h>
1462 
1463 #endif
1464 
1465 #endif
1466 
1467 #endif
1468