• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
15 
16 #include <objbase.h>
17 #include <shtypes.h>
18 
19 #ifndef _WINRESRC_
20 #ifndef _WIN32_IE
21 #define _WIN32_IE 0x0601
22 #endif
23 #endif
24 
25 #ifndef WINSHLWAPI
26 #if !defined(_SHLWAPI_)
27 #define LWSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT WINAPI
28 #define LWSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type WINAPI
29 #define LWSTDAPIV EXTERN_C DECLSPEC_IMPORT HRESULT STDAPIVCALLTYPE
30 #define LWSTDAPIV_(type) EXTERN_C DECLSPEC_IMPORT type STDAPIVCALLTYPE
31 #else
32 #define LWSTDAPI STDAPI
33 #define LWSTDAPI_(type) STDAPI_(type)
34 #define LWSTDAPIV STDAPIV
35 #define LWSTDAPIV_(type) STDAPIV_(type)
36 #endif
37 #endif
38 
39 #include <pshpack8.h>
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #ifndef NO_SHLWAPI_STRFCNS
46   LWSTDAPI_(LPSTR) StrChrA(LPCSTR lpStart,WORD wMatch);
47   LWSTDAPI_(LPWSTR) StrChrW(LPCWSTR lpStart,WCHAR wMatch);
48   LWSTDAPI_(LPSTR) StrChrIA(LPCSTR lpStart,WORD wMatch);
49   LWSTDAPI_(LPWSTR) StrChrIW(LPCWSTR lpStart,WCHAR wMatch);
50   LWSTDAPI_(int) StrCmpNA(LPCSTR lpStr1,LPCSTR lpStr2,int nChar);
51   LWSTDAPI_(int) StrCmpNW(LPCWSTR lpStr1,LPCWSTR lpStr2,int nChar);
52   LWSTDAPI_(int) StrCmpNIA(LPCSTR lpStr1,LPCSTR lpStr2,int nChar);
53   LWSTDAPI_(int) StrCmpNIW(LPCWSTR lpStr1,LPCWSTR lpStr2,int nChar);
54   LWSTDAPI_(int) StrCSpnA(LPCSTR lpStr,LPCSTR lpSet);
55   LWSTDAPI_(int) StrCSpnW(LPCWSTR lpStr,LPCWSTR lpSet);
56   LWSTDAPI_(int) StrCSpnIA(LPCSTR lpStr,LPCSTR lpSet);
57   LWSTDAPI_(int) StrCSpnIW(LPCWSTR lpStr,LPCWSTR lpSet);
58   LWSTDAPI_(LPSTR) StrDupA(LPCSTR lpSrch);
59   LWSTDAPI_(LPWSTR) StrDupW(LPCWSTR lpSrch);
60   LWSTDAPI_(LPSTR) StrFormatByteSizeA(DWORD dw,LPSTR szBuf,UINT uiBufSize);
61   LWSTDAPI_(LPSTR) StrFormatByteSize64A(LONGLONG qdw,LPSTR szBuf,UINT uiBufSize);
62   LWSTDAPI_(LPWSTR) StrFormatByteSizeW(LONGLONG qdw,LPWSTR szBuf,UINT uiBufSize);
63   LWSTDAPI_(LPWSTR) StrFormatKBSizeW(LONGLONG qdw,LPWSTR szBuf,UINT uiBufSize);
64   LWSTDAPI_(LPSTR) StrFormatKBSizeA(LONGLONG qdw,LPSTR szBuf,UINT uiBufSize);
65   LWSTDAPI_(int) StrFromTimeIntervalA(LPSTR pszOut,UINT cchMax,DWORD dwTimeMS,int digits);
66   LWSTDAPI_(int) StrFromTimeIntervalW(LPWSTR pszOut,UINT cchMax,DWORD dwTimeMS,int digits);
67   LWSTDAPI_(WINBOOL) StrIsIntlEqualA(WINBOOL fCaseSens,LPCSTR lpString1,LPCSTR lpString2,int nChar);
68   LWSTDAPI_(WINBOOL) StrIsIntlEqualW(WINBOOL fCaseSens,LPCWSTR lpString1,LPCWSTR lpString2,int nChar);
69   LWSTDAPI_(LPSTR) StrNCatA(LPSTR psz1,LPCSTR psz2,int cchMax);
70   LWSTDAPI_(LPWSTR) StrNCatW(LPWSTR psz1,LPCWSTR psz2,int cchMax);
71   LWSTDAPI_(LPSTR) StrPBrkA(LPCSTR psz,LPCSTR pszSet);
72   LWSTDAPI_(LPWSTR) StrPBrkW(LPCWSTR psz,LPCWSTR pszSet);
73   LWSTDAPI_(LPSTR) StrRChrA(LPCSTR lpStart,LPCSTR lpEnd,WORD wMatch);
74   LWSTDAPI_(LPWSTR) StrRChrW(LPCWSTR lpStart,LPCWSTR lpEnd,WCHAR wMatch);
75   LWSTDAPI_(LPSTR) StrRChrIA(LPCSTR lpStart,LPCSTR lpEnd,WORD wMatch);
76   LWSTDAPI_(LPWSTR) StrRChrIW(LPCWSTR lpStart,LPCWSTR lpEnd,WCHAR wMatch);
77   LWSTDAPI_(LPSTR) StrRStrIA(LPCSTR lpSource,LPCSTR lpLast,LPCSTR lpSrch);
78   LWSTDAPI_(LPWSTR) StrRStrIW(LPCWSTR lpSource,LPCWSTR lpLast,LPCWSTR lpSrch);
79   LWSTDAPI_(int) StrSpnA(LPCSTR psz,LPCSTR pszSet);
80   LWSTDAPI_(int) StrSpnW(LPCWSTR psz,LPCWSTR pszSet);
81   LWSTDAPI_(LPSTR) StrStrA(LPCSTR lpFirst,LPCSTR lpSrch);
82   LWSTDAPI_(LPWSTR) StrStrW(LPCWSTR lpFirst,LPCWSTR lpSrch);
83   LWSTDAPI_(LPSTR) StrStrIA(LPCSTR lpFirst,LPCSTR lpSrch);
84   LWSTDAPI_(LPWSTR) StrStrIW(LPCWSTR lpFirst,LPCWSTR lpSrch);
85   LWSTDAPI_(int) StrToIntA(LPCSTR lpSrc);
86   LWSTDAPI_(int) StrToIntW(LPCWSTR lpSrc);
87   LWSTDAPI_(WINBOOL) StrToIntExA(LPCSTR pszString,DWORD dwFlags,int *piRet);
88   LWSTDAPI_(WINBOOL) StrToIntExW(LPCWSTR pszString,DWORD dwFlags,int *piRet);
89 #if (_WIN32_IE >= 0x0600)
90   LWSTDAPI_(WINBOOL) StrToInt64ExA(LPCSTR pszString,DWORD dwFlags,LONGLONG *pllRet);
91   LWSTDAPI_(WINBOOL) StrToInt64ExW(LPCWSTR pszString,DWORD dwFlags,LONGLONG *pllRet);
92 #endif
93   LWSTDAPI_(WINBOOL) StrTrimA(LPSTR psz,LPCSTR pszTrimChars);
94   LWSTDAPI_(WINBOOL) StrTrimW(LPWSTR psz,LPCWSTR pszTrimChars);
95   LWSTDAPI_(LPWSTR) StrCatW(LPWSTR psz1,LPCWSTR psz2);
96   LWSTDAPI_(int) StrCmpW(LPCWSTR psz1,LPCWSTR psz2);
97   LWSTDAPI_(int) StrCmpIW(LPCWSTR psz1,LPCWSTR psz2);
98   LWSTDAPI_(LPWSTR) StrCpyW(LPWSTR psz1,LPCWSTR psz2);
99   LWSTDAPI_(LPWSTR) StrCpyNW(LPWSTR psz1,LPCWSTR psz2,int cchMax);
100   LWSTDAPI_(LPWSTR) StrCatBuffW(LPWSTR pszDest,LPCWSTR pszSrc,int cchDestBuffSize);
101   LWSTDAPI_(LPSTR) StrCatBuffA(LPSTR pszDest,LPCSTR pszSrc,int cchDestBuffSize);
102   LWSTDAPI_(WINBOOL) ChrCmpIA(WORD w1,WORD w2);
103   LWSTDAPI_(WINBOOL) ChrCmpIW(WCHAR w1,WCHAR w2);
104   LWSTDAPI_(int) wvnsprintfA(LPSTR lpOut,int cchLimitIn,LPCSTR lpFmt,va_list arglist);
105   LWSTDAPI_(int) wvnsprintfW(LPWSTR lpOut,int cchLimitIn,LPCWSTR lpFmt,va_list arglist);
106   LWSTDAPIV_(int) wnsprintfA(LPSTR lpOut,int cchLimitIn,LPCSTR lpFmt,...);
107   LWSTDAPIV_(int) wnsprintfW(LPWSTR lpOut,int cchLimitIn,LPCWSTR lpFmt,...);
108 
109 #define StrIntlEqNA(s1,s2,nChar) StrIsIntlEqualA(TRUE,s1,s2,nChar)
110 #define StrIntlEqNW(s1,s2,nChar) StrIsIntlEqualW(TRUE,s1,s2,nChar)
111 #define StrIntlEqNIA(s1,s2,nChar) StrIsIntlEqualA(FALSE,s1,s2,nChar)
112 #define StrIntlEqNIW(s1,s2,nChar) StrIsIntlEqualW(FALSE,s1,s2,nChar)
113 
114 #define StrRetToStr __MINGW_NAME_AW(StrRetToStr)
115 #define StrRetToBuf __MINGW_NAME_AW(StrRetToBuf)
116 #define SHStrDup __MINGW_NAME_AW(SHStrDup)
117 
118   LWSTDAPI StrRetToStrA(STRRET *pstr,LPCITEMIDLIST pidl,LPSTR *ppsz);
119   LWSTDAPI StrRetToStrW(STRRET *pstr,LPCITEMIDLIST pidl,LPWSTR *ppsz);
120   LWSTDAPI StrRetToBufA(STRRET *pstr,LPCITEMIDLIST pidl,LPSTR pszBuf,UINT cchBuf);
121   LWSTDAPI StrRetToBufW(STRRET *pstr,LPCITEMIDLIST pidl,LPWSTR pszBuf,UINT cchBuf);
122   LWSTDAPI StrRetToBSTR(STRRET *pstr,LPCITEMIDLIST pidl,BSTR *pbstr);
123   LWSTDAPI SHStrDupA(LPCSTR psz,WCHAR **ppwsz);
124   LWSTDAPI SHStrDupW(LPCWSTR psz,WCHAR **ppwsz);
125   LWSTDAPI_(int) StrCmpLogicalW(LPCWSTR psz1,LPCWSTR psz2);
126   LWSTDAPI_(DWORD) StrCatChainW(LPWSTR pszDst,DWORD cchDst,DWORD ichAt,LPCWSTR pszSrc);
127   LWSTDAPI SHLoadIndirectString(LPCWSTR pszSource,LPWSTR pszOutBuf,UINT cchOutBuf,void **ppvReserved);
128 #if (_WIN32_IE >= 0x0603)
129   LWSTDAPI_(WINBOOL) IsCharSpaceA(CHAR wch);
130   LWSTDAPI_(WINBOOL) IsCharSpaceW(WCHAR wch);
131 
132 #define IsCharSpace __MINGW_NAME_AW(IsCharSpace)
133 
134   LWSTDAPI_(int) StrCmpCA(LPCSTR pszStr1,LPCSTR pszStr2);
135   LWSTDAPI_(int) StrCmpCW(LPCWSTR pszStr1,LPCWSTR pszStr2);
136 
137 #define StrCmpC __MINGW_NAME_AW(StrCmpC)
138 
139   LWSTDAPI_(int) StrCmpICA(LPCSTR pszStr1,LPCSTR pszStr2);
140   LWSTDAPI_(int) StrCmpICW(LPCWSTR pszStr1,LPCWSTR pszStr2);
141 
142 #define StrCmpIC __MINGW_NAME_AW(StrCmpIC)
143 #endif
144 
145 #define StrChr __MINGW_NAME_AW(StrChr)
146 #define StrRChr __MINGW_NAME_AW(StrRChr)
147 #define StrChrI __MINGW_NAME_AW(StrChrI)
148 #define StrRChrI __MINGW_NAME_AW(StrRChrI)
149 #define StrCmpN __MINGW_NAME_AW(StrCmpN)
150 #define StrCmpNI __MINGW_NAME_AW(StrCmpNI)
151 #define StrStr __MINGW_NAME_AW(StrStr)
152 
153 #define StrStrI __MINGW_NAME_AW(StrStrI)
154 #define StrDup __MINGW_NAME_AW(StrDup)
155 #define StrRStrI __MINGW_NAME_AW(StrRStrI)
156 #define StrCSpn __MINGW_NAME_AW(StrCSpn)
157 #define StrCSpnI __MINGW_NAME_AW(StrCSpnI)
158 #define StrSpn __MINGW_NAME_AW(StrSpn)
159 #define StrToInt __MINGW_NAME_AW(StrToInt)
160 #define StrPBrk __MINGW_NAME_AW(StrPBrk)
161 #define StrToIntEx __MINGW_NAME_AW(StrToIntEx)
162 
163 #if (_WIN32_IE >= 0x0600)
164 #define StrToInt64Ex __MINGW_NAME_AW(StrToInt64Ex)
165 #endif
166 
167 #define StrFromTimeInterval __MINGW_NAME_AW(StrFromTimeInterval)
168 #define StrIntlEqN __MINGW_NAME_AW(StrIntlEqN)
169 #define StrIntlEqNI __MINGW_NAME_AW(StrIntlEqNI)
170 #define StrFormatByteSize __MINGW_NAME_AW(StrFormatByteSize)
171 #define StrFormatKBSize __MINGW_NAME_AW(StrFormatKBSize)
172 
173 #define StrNCat __MINGW_NAME_AW(StrNCat)
174 #define StrTrim __MINGW_NAME_AW(StrTrim)
175 #define StrCatBuff __MINGW_NAME_AW(StrCatBuff)
176 #define ChrCmpI __MINGW_NAME_AW(ChrCmpI)
177 #define wvnsprintf __MINGW_NAME_AW(wvnsprintf)
178 #define wnsprintf __MINGW_NAME_AW(wnsprintf)
179 #define StrIsIntlEqual __MINGW_NAME_AW(StrIsIntlEqual)
180 
181 #if defined(UNICODE)
182 #define StrFormatByteSize64 StrFormatByteSizeW
183 #else
184 #define StrFormatByteSize64 StrFormatByteSize64A
185 #endif
186 
187   LWSTDAPI_(WINBOOL) IntlStrEqWorkerA(WINBOOL fCaseSens,LPCSTR lpString1,LPCSTR lpString2,int nChar);
188   LWSTDAPI_(WINBOOL) IntlStrEqWorkerW(WINBOOL fCaseSens,LPCWSTR lpString1,LPCWSTR lpString2,int nChar);
189 
190 #define IntlStrEqNA(s1,s2,nChar) IntlStrEqWorkerA(TRUE,s1,s2,nChar)
191 #define IntlStrEqNW(s1,s2,nChar) IntlStrEqWorkerW(TRUE,s1,s2,nChar)
192 #define IntlStrEqNIA(s1,s2,nChar) IntlStrEqWorkerA(FALSE,s1,s2,nChar)
193 #define IntlStrEqNIW(s1,s2,nChar) IntlStrEqWorkerW(FALSE,s1,s2,nChar)
194 
195 #define IntlStrEqN __MINGW_NAME_AW(IntlStrEqN)
196 #define IntlStrEqNI __MINGW_NAME_AW(IntlStrEqNI)
197 
198 #define SZ_CONTENTTYPE_HTMLA "text/html"
199 #define SZ_CONTENTTYPE_HTMLW L"text/html"
200 #define SZ_CONTENTTYPE_CDFA "application/x-cdf"
201 #define SZ_CONTENTTYPE_CDFW L"application/x-cdf"
202 
203 #define SZ_CONTENTTYPE_HTML __MINGW_NAME_AW(SZ_CONTENTTYPE_HTML)
204 #define SZ_CONTENTTYPE_CDF __MINGW_NAME_AW(SZ_CONTENTTYPE_CDF)
205 
206 #define PathIsHTMLFileA(pszPath) PathIsContentTypeA(pszPath,SZ_CONTENTTYPE_HTMLA)
207 #define PathIsHTMLFileW(pszPath) PathIsContentTypeW(pszPath,SZ_CONTENTTYPE_HTMLW)
208 
209 #define STIF_DEFAULT __MSABI_LONG(0x00000000)
210 #define STIF_SUPPORT_HEX __MSABI_LONG(0x00000001)
211 
212 #define StrCatA lstrcatA
213 #define StrCmpA lstrcmpA
214 #define StrCmpIA lstrcmpiA
215 #define StrCpyA lstrcpyA
216 #define StrCpyNA lstrcpynA
217 
218 #define StrToLong StrToInt
219 #define StrNCmp StrCmpN
220 #define StrNCmpI StrCmpNI
221 #define StrNCpy StrCpyN
222 #define StrCatN StrNCat
223 
224 #define StrCatBuff __MINGW_NAME_AW(StrCatBuff)
225 
226 #if defined(UNICODE)
227 #define StrCat StrCatW
228 #define StrCmp StrCmpW
229 #define StrCmpI StrCmpIW
230 #define StrCpy StrCpyW
231 #define StrCpyN StrCpyNW
232 #else
233 #define StrCat lstrcatA
234 #define StrCmp lstrcmpA
235 #define StrCmpI lstrcmpiA
236 #define StrCpy lstrcpyA
237 #define StrCpyN lstrcpynA
238 #endif
239 
240 #endif
241 
242 #ifndef NO_SHLWAPI_PATH
243 
244   LWSTDAPI_(LPSTR) PathAddBackslashA(LPSTR pszPath);
245   LWSTDAPI_(LPWSTR) PathAddBackslashW(LPWSTR pszPath);
246 
247 #define PathAddBackslash __MINGW_NAME_AW(PathAddBackslash)
248 
249   LWSTDAPI_(WINBOOL) PathAddExtensionA(LPSTR pszPath,LPCSTR pszExt);
250   LWSTDAPI_(WINBOOL) PathAddExtensionW(LPWSTR pszPath,LPCWSTR pszExt);
251 
252 #define PathAddExtension __MINGW_NAME_AW(PathAddExtension)
253 
254   LWSTDAPI_(WINBOOL) PathAppendA(LPSTR pszPath,LPCSTR pMore);
255   LWSTDAPI_(WINBOOL) PathAppendW(LPWSTR pszPath,LPCWSTR pMore);
256   LWSTDAPI_(LPSTR) PathBuildRootA(LPSTR pszRoot,int iDrive);
257   LWSTDAPI_(LPWSTR) PathBuildRootW(LPWSTR pszRoot,int iDrive);
258 
259 #define PathBuildRoot __MINGW_NAME_AW(PathBuildRoot)
260 
261   LWSTDAPI_(WINBOOL) PathCanonicalizeA(LPSTR pszBuf,LPCSTR pszPath);
262   LWSTDAPI_(WINBOOL) PathCanonicalizeW(LPWSTR pszBuf,LPCWSTR pszPath);
263   LWSTDAPI_(LPSTR) PathCombineA(LPSTR pszDest,LPCSTR pszDir,LPCSTR pszFile);
264   LWSTDAPI_(LPWSTR) PathCombineW(LPWSTR pszDest,LPCWSTR pszDir,LPCWSTR pszFile);
265 
266 #define PathCombine __MINGW_NAME_AW(PathCombine)
267 
268   LWSTDAPI_(WINBOOL) PathCompactPathA(HDC hDC,LPSTR pszPath,UINT dx);
269   LWSTDAPI_(WINBOOL) PathCompactPathW(HDC hDC,LPWSTR pszPath,UINT dx);
270   LWSTDAPI_(WINBOOL) PathCompactPathExA(LPSTR pszOut,LPCSTR pszSrc,UINT cchMax,DWORD dwFlags);
271   LWSTDAPI_(WINBOOL) PathCompactPathExW(LPWSTR pszOut,LPCWSTR pszSrc,UINT cchMax,DWORD dwFlags);
272   LWSTDAPI_(int) PathCommonPrefixA(LPCSTR pszFile1,LPCSTR pszFile2,LPSTR achPath);
273   LWSTDAPI_(int) PathCommonPrefixW(LPCWSTR pszFile1,LPCWSTR pszFile2,LPWSTR achPath);
274   LWSTDAPI_(WINBOOL) PathFileExistsA(LPCSTR pszPath);
275   LWSTDAPI_(WINBOOL) PathFileExistsW(LPCWSTR pszPath);
276 
277 #define PathFileExists __MINGW_NAME_AW(PathFileExists)
278 
279   LWSTDAPI_(LPSTR) PathFindExtensionA(LPCSTR pszPath);
280   LWSTDAPI_(LPWSTR) PathFindExtensionW(LPCWSTR pszPath);
281 
282 #define PathFindExtension __MINGW_NAME_AW(PathFindExtension)
283 
284   LWSTDAPI_(LPSTR) PathFindFileNameA(LPCSTR pszPath);
285   LWSTDAPI_(LPWSTR) PathFindFileNameW(LPCWSTR pszPath);
286 
287 #define PathFindFileName __MINGW_NAME_AW(PathFindFileName)
288 
289   LWSTDAPI_(LPSTR) PathFindNextComponentA(LPCSTR pszPath);
290   LWSTDAPI_(LPWSTR) PathFindNextComponentW(LPCWSTR pszPath);
291 
292 #define PathFindNextComponent __MINGW_NAME_AW(PathFindNextComponent)
293 
294   LWSTDAPI_(WINBOOL) PathFindOnPathA(LPSTR pszPath,LPCSTR *ppszOtherDirs);
295   LWSTDAPI_(WINBOOL) PathFindOnPathW(LPWSTR pszPath,LPCWSTR *ppszOtherDirs);
296   LWSTDAPI_(LPSTR) PathGetArgsA(LPCSTR pszPath);
297   LWSTDAPI_(LPWSTR) PathGetArgsW(LPCWSTR pszPath);
298 
299 #define PathGetArgs __MINGW_NAME_AW(PathGetArgs)
300 
301   LWSTDAPI_(LPCSTR) PathFindSuffixArrayA(LPCSTR pszPath,const LPCSTR *apszSuffix,int iArraySize);
302   LWSTDAPI_(LPCWSTR) PathFindSuffixArrayW(LPCWSTR pszPath,const LPCWSTR *apszSuffix,int iArraySize);
303 
304 #define PathFindSuffixArray __MINGW_NAME_AW(PathFindSuffixArray)
305 
306   LWSTDAPI_(WINBOOL) PathIsLFNFileSpecA(LPCSTR lpName);
307   LWSTDAPI_(WINBOOL) PathIsLFNFileSpecW(LPCWSTR lpName);
308 
309 #define PathIsLFNFileSpec __MINGW_NAME_AW(PathIsLFNFileSpec)
310 
311   LWSTDAPI_(UINT) PathGetCharTypeA(UCHAR ch);
312   LWSTDAPI_(UINT) PathGetCharTypeW(WCHAR ch);
313 
314 #define GCT_INVALID 0x0000
315 #define GCT_LFNCHAR 0x0001
316 #define GCT_SHORTCHAR 0x0002
317 #define GCT_WILD 0x0004
318 #define GCT_SEPARATOR 0x0008
319 
320   LWSTDAPI_(int) PathGetDriveNumberA(LPCSTR pszPath);
321   LWSTDAPI_(int) PathGetDriveNumberW(LPCWSTR pszPath);
322 
323 #define PathGetDriveNumber __MINGW_NAME_AW(PathGetDriveNumber)
324 
325   LWSTDAPI_(WINBOOL) PathIsDirectoryA(LPCSTR pszPath);
326   LWSTDAPI_(WINBOOL) PathIsDirectoryW(LPCWSTR pszPath);
327 
328 #define PathIsDirectory __MINGW_NAME_AW(PathIsDirectory)
329 
330   LWSTDAPI_(WINBOOL) PathIsDirectoryEmptyA(LPCSTR pszPath);
331   LWSTDAPI_(WINBOOL) PathIsDirectoryEmptyW(LPCWSTR pszPath);
332 
333 #define PathIsDirectoryEmpty __MINGW_NAME_AW(PathIsDirectoryEmpty)
334 
335   LWSTDAPI_(WINBOOL) PathIsFileSpecA(LPCSTR pszPath);
336   LWSTDAPI_(WINBOOL) PathIsFileSpecW(LPCWSTR pszPath);
337 
338 #define PathIsFileSpec __MINGW_NAME_AW(PathIsFileSpec)
339 
340   LWSTDAPI_(WINBOOL) PathIsPrefixA(LPCSTR pszPrefix,LPCSTR pszPath);
341   LWSTDAPI_(WINBOOL) PathIsPrefixW(LPCWSTR pszPrefix,LPCWSTR pszPath);
342 
343 #define PathIsPrefix __MINGW_NAME_AW(PathIsPrefix)
344 
345   LWSTDAPI_(WINBOOL) PathIsRelativeA(LPCSTR pszPath);
346   LWSTDAPI_(WINBOOL) PathIsRelativeW(LPCWSTR pszPath);
347 
348 #define PathIsRelative __MINGW_NAME_AW(PathIsRelative)
349 
350   LWSTDAPI_(WINBOOL) PathIsRootA(LPCSTR pszPath);
351   LWSTDAPI_(WINBOOL) PathIsRootW(LPCWSTR pszPath);
352 
353 #define PathIsRoot __MINGW_NAME_AW(PathIsRoot)
354 
355   LWSTDAPI_(WINBOOL) PathIsSameRootA(LPCSTR pszPath1,LPCSTR pszPath2);
356   LWSTDAPI_(WINBOOL) PathIsSameRootW(LPCWSTR pszPath1,LPCWSTR pszPath2);
357 
358 #define PathIsSameRoot __MINGW_NAME_AW(PathIsSameRoot)
359 
360   LWSTDAPI_(WINBOOL) PathIsUNCA(LPCSTR pszPath);
361   LWSTDAPI_(WINBOOL) PathIsUNCW(LPCWSTR pszPath);
362 
363 #define PathIsUNC __MINGW_NAME_AW(PathIsUNC)
364 
365   LWSTDAPI_(WINBOOL) PathIsNetworkPathA(LPCSTR pszPath);
366   LWSTDAPI_(WINBOOL) PathIsNetworkPathW(LPCWSTR pszPath);
367 
368 #define PathIsNetworkPath __MINGW_NAME_AW(PathIsNetworkPath)
369 
370   LWSTDAPI_(WINBOOL) PathIsUNCServerA(LPCSTR pszPath);
371   LWSTDAPI_(WINBOOL) PathIsUNCServerW(LPCWSTR pszPath);
372 
373 #define PathIsUNCServer __MINGW_NAME_AW(PathIsUNCServer)
374 
375   LWSTDAPI_(WINBOOL) PathIsUNCServerShareA(LPCSTR pszPath);
376   LWSTDAPI_(WINBOOL) PathIsUNCServerShareW(LPCWSTR pszPath);
377 
378 #define PathIsUNCServerShare __MINGW_NAME_AW(PathIsUNCServerShare)
379 
380   LWSTDAPI_(WINBOOL) PathIsContentTypeA(LPCSTR pszPath,LPCSTR pszContentType);
381   LWSTDAPI_(WINBOOL) PathIsContentTypeW(LPCWSTR pszPath,LPCWSTR pszContentType);
382   LWSTDAPI_(WINBOOL) PathIsURLA(LPCSTR pszPath);
383   LWSTDAPI_(WINBOOL) PathIsURLW(LPCWSTR pszPath);
384 
385 #define PathIsURL __MINGW_NAME_AW(PathIsURL)
386 
387   LWSTDAPI_(WINBOOL) PathMakePrettyA(LPSTR pszPath);
388   LWSTDAPI_(WINBOOL) PathMakePrettyW(LPWSTR pszPath);
389   LWSTDAPI_(WINBOOL) PathMatchSpecA(LPCSTR pszFile,LPCSTR pszSpec);
390   LWSTDAPI_(WINBOOL) PathMatchSpecW(LPCWSTR pszFile,LPCWSTR pszSpec);
391   LWSTDAPI_(int) PathParseIconLocationA(LPSTR pszIconFile);
392   LWSTDAPI_(int) PathParseIconLocationW(LPWSTR pszIconFile);
393   LWSTDAPI_(void) PathQuoteSpacesA(LPSTR lpsz);
394   LWSTDAPI_(void) PathQuoteSpacesW(LPWSTR lpsz);
395   LWSTDAPI_(WINBOOL) PathRelativePathToA(LPSTR pszPath,LPCSTR pszFrom,DWORD dwAttrFrom,LPCSTR pszTo,DWORD dwAttrTo);
396   LWSTDAPI_(WINBOOL) PathRelativePathToW(LPWSTR pszPath,LPCWSTR pszFrom,DWORD dwAttrFrom,LPCWSTR pszTo,DWORD dwAttrTo);
397   LWSTDAPI_(void) PathRemoveArgsA(LPSTR pszPath);
398   LWSTDAPI_(void) PathRemoveArgsW(LPWSTR pszPath);
399   LWSTDAPI_(LPSTR) PathRemoveBackslashA(LPSTR pszPath);
400   LWSTDAPI_(LPWSTR) PathRemoveBackslashW(LPWSTR pszPath);
401 
402 #define PathRemoveBackslash __MINGW_NAME_AW(PathRemoveBackslash)
403 
404   LWSTDAPI_(void) PathRemoveBlanksA(LPSTR pszPath);
405   LWSTDAPI_(void) PathRemoveBlanksW(LPWSTR pszPath);
406   LWSTDAPI_(void) PathRemoveExtensionA(LPSTR pszPath);
407   LWSTDAPI_(void) PathRemoveExtensionW(LPWSTR pszPath);
408   LWSTDAPI_(WINBOOL) PathRemoveFileSpecA(LPSTR pszPath);
409   LWSTDAPI_(WINBOOL) PathRemoveFileSpecW(LPWSTR pszPath);
410   LWSTDAPI_(WINBOOL) PathRenameExtensionA(LPSTR pszPath,LPCSTR pszExt);
411   LWSTDAPI_(WINBOOL) PathRenameExtensionW(LPWSTR pszPath,LPCWSTR pszExt);
412   LWSTDAPI_(WINBOOL) PathSearchAndQualifyA(LPCSTR pszPath,LPSTR pszBuf,UINT cchBuf);
413   LWSTDAPI_(WINBOOL) PathSearchAndQualifyW(LPCWSTR pszPath,LPWSTR pszBuf,UINT cchBuf);
414   LWSTDAPI_(void) PathSetDlgItemPathA(HWND hDlg,int id,LPCSTR pszPath);
415   LWSTDAPI_(void) PathSetDlgItemPathW(HWND hDlg,int id,LPCWSTR pszPath);
416   LWSTDAPI_(LPSTR) PathSkipRootA(LPCSTR pszPath);
417   LWSTDAPI_(LPWSTR) PathSkipRootW(LPCWSTR pszPath);
418 
419 #define PathSkipRoot __MINGW_NAME_AW(PathSkipRoot)
420 
421   LWSTDAPI_(void) PathStripPathA(LPSTR pszPath);
422   LWSTDAPI_(void) PathStripPathW(LPWSTR pszPath);
423 
424 #define PathStripPath __MINGW_NAME_AW(PathStripPath)
425 
426   LWSTDAPI_(WINBOOL) PathStripToRootA(LPSTR pszPath);
427   LWSTDAPI_(WINBOOL) PathStripToRootW(LPWSTR pszPath);
428 
429 #define PathStripToRoot __MINGW_NAME_AW(PathStripToRoot)
430 
431   LWSTDAPI_(void) PathUnquoteSpacesA(LPSTR lpsz);
432   LWSTDAPI_(void) PathUnquoteSpacesW(LPWSTR lpsz);
433   LWSTDAPI_(WINBOOL) PathMakeSystemFolderA(LPCSTR pszPath);
434   LWSTDAPI_(WINBOOL) PathMakeSystemFolderW(LPCWSTR pszPath);
435 
436 #define PathMakeSystemFolder __MINGW_NAME_AW(PathMakeSystemFolder)
437 
438   LWSTDAPI_(WINBOOL) PathUnmakeSystemFolderA(LPCSTR pszPath);
439   LWSTDAPI_(WINBOOL) PathUnmakeSystemFolderW(LPCWSTR pszPath);
440 
441 #define PathUnmakeSystemFolder __MINGW_NAME_AW(PathUnmakeSystemFolder)
442 
443   LWSTDAPI_(WINBOOL) PathIsSystemFolderA(LPCSTR pszPath,DWORD dwAttrb);
444   LWSTDAPI_(WINBOOL) PathIsSystemFolderW(LPCWSTR pszPath,DWORD dwAttrb);
445 
446 #define PathIsSystemFolder __MINGW_NAME_AW(PathIsSystemFolder)
447 
448   LWSTDAPI_(void) PathUndecorateA(LPSTR pszPath);
449   LWSTDAPI_(void) PathUndecorateW(LPWSTR pszPath);
450 
451 #define PathUndecorate __MINGW_NAME_AW(PathUndecorate)
452 
453   LWSTDAPI_(WINBOOL) PathUnExpandEnvStringsA(LPCSTR pszPath,LPSTR pszBuf,UINT cchBuf);
454   LWSTDAPI_(WINBOOL) PathUnExpandEnvStringsW(LPCWSTR pszPath,LPWSTR pszBuf,UINT cchBuf);
455 
456 #define PathUnExpandEnvStrings __MINGW_NAME_AW(PathUnExpandEnvStrings)
457 #define PathAppend __MINGW_NAME_AW(PathAppend)
458 #define PathCanonicalize __MINGW_NAME_AW(PathCanonicalize)
459 #define PathCompactPath __MINGW_NAME_AW(PathCompactPath)
460 #define PathCompactPathEx __MINGW_NAME_AW(PathCompactPathEx)
461 #define PathCommonPrefix __MINGW_NAME_AW(PathCommonPrefix)
462 #define PathFindOnPath __MINGW_NAME_AW(PathFindOnPath)
463 #define PathGetCharType __MINGW_NAME_AW(PathGetCharType)
464 #define PathIsContentType __MINGW_NAME_AW(PathIsContentType)
465 #define PathIsHTMLFile __MINGW_NAME_AW(PathIsHTMLFile)
466 #define PathMakePretty __MINGW_NAME_AW(PathMakePretty)
467 #define PathMatchSpec __MINGW_NAME_AW(PathMatchSpec)
468 #define PathParseIconLocation __MINGW_NAME_AW(PathParseIconLocation)
469 #define PathQuoteSpaces __MINGW_NAME_AW(PathQuoteSpaces)
470 #define PathRelativePathTo __MINGW_NAME_AW(PathRelativePathTo)
471 #define PathRemoveArgs __MINGW_NAME_AW(PathRemoveArgs)
472 #define PathRemoveBlanks __MINGW_NAME_AW(PathRemoveBlanks)
473 #define PathRemoveExtension __MINGW_NAME_AW(PathRemoveExtension)
474 #define PathRemoveFileSpec __MINGW_NAME_AW(PathRemoveFileSpec)
475 #define PathRenameExtension __MINGW_NAME_AW(PathRenameExtension)
476 #define PathSearchAndQualify __MINGW_NAME_AW(PathSearchAndQualify)
477 #define PathSetDlgItemPath __MINGW_NAME_AW(PathSetDlgItemPath)
478 #define PathUnquoteSpaces __MINGW_NAME_AW(PathUnquoteSpaces)
479 
480   typedef enum {
481     URL_SCHEME_INVALID = -1,URL_SCHEME_UNKNOWN = 0,URL_SCHEME_FTP,URL_SCHEME_HTTP,URL_SCHEME_GOPHER,URL_SCHEME_MAILTO,URL_SCHEME_NEWS,URL_SCHEME_NNTP,URL_SCHEME_TELNET,URL_SCHEME_WAIS,URL_SCHEME_FILE,URL_SCHEME_MK,URL_SCHEME_HTTPS,URL_SCHEME_SHELL,URL_SCHEME_SNEWS,URL_SCHEME_LOCAL,URL_SCHEME_JAVASCRIPT,URL_SCHEME_VBSCRIPT,URL_SCHEME_ABOUT,URL_SCHEME_RES,URL_SCHEME_MSSHELLROOTED,URL_SCHEME_MSSHELLIDLIST,URL_SCHEME_MSHELP,URL_SCHEME_MAXVALUE
482   } URL_SCHEME;
483 
484   typedef enum {
485     URL_PART_NONE = 0,URL_PART_SCHEME = 1,URL_PART_HOSTNAME,URL_PART_USERNAME,URL_PART_PASSWORD,URL_PART_PORT,URL_PART_QUERY
486   } URL_PART;
487 
488   typedef enum {
489     URLIS_URL,URLIS_OPAQUE,URLIS_NOHISTORY,URLIS_FILEURL,URLIS_APPLIABLE,URLIS_DIRECTORY,URLIS_HASQUERY
490   } URLIS;
491 
492 #define URL_UNESCAPE 0x10000000
493 #define URL_ESCAPE_UNSAFE 0x20000000
494 #define URL_PLUGGABLE_PROTOCOL 0x40000000
495 #define URL_WININET_COMPATIBILITY 0x80000000
496 #define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
497 #define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
498 #define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO
499 #define URL_ESCAPE_SPACES_ONLY 0x04000000
500 #define URL_DONT_SIMPLIFY 0x08000000
501 #define URL_NO_META URL_DONT_SIMPLIFY
502 #define URL_UNESCAPE_INPLACE 0x00100000
503 #define URL_CONVERT_IF_DOSPATH 0x00200000
504 #define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
505 #define URL_INTERNAL_PATH 0x00800000
506 #define URL_FILE_USE_PATHURL 0x00010000
507 #define URL_DONT_UNESCAPE 0x00020000
508 #define URL_ESCAPE_PERCENT 0x00001000
509 #define URL_ESCAPE_SEGMENT_ONLY 0x00002000
510 
511 #define URL_PARTFLAG_KEEPSCHEME 0x00000001
512 
513 #define URL_APPLY_DEFAULT 0x00000001
514 #define URL_APPLY_GUESSSCHEME 0x00000002
515 #define URL_APPLY_GUESSFILE 0x00000004
516 #define URL_APPLY_FORCEAPPLY 0x00000008
517 
518   LWSTDAPI_(int) UrlCompareA(LPCSTR psz1,LPCSTR psz2,WINBOOL fIgnoreSlash);
519   LWSTDAPI_(int) UrlCompareW(LPCWSTR psz1,LPCWSTR psz2,WINBOOL fIgnoreSlash);
520   LWSTDAPI UrlCombineA(LPCSTR pszBase,LPCSTR pszRelative,LPSTR pszCombined,LPDWORD pcchCombined,DWORD dwFlags);
521   LWSTDAPI UrlCombineW(LPCWSTR pszBase,LPCWSTR pszRelative,LPWSTR pszCombined,LPDWORD pcchCombined,DWORD dwFlags);
522   LWSTDAPI UrlCanonicalizeA(LPCSTR pszUrl,LPSTR pszCanonicalized,LPDWORD pcchCanonicalized,DWORD dwFlags);
523   LWSTDAPI UrlCanonicalizeW(LPCWSTR pszUrl,LPWSTR pszCanonicalized,LPDWORD pcchCanonicalized,DWORD dwFlags);
524   LWSTDAPI_(WINBOOL) UrlIsOpaqueA(LPCSTR pszURL);
525   LWSTDAPI_(WINBOOL) UrlIsOpaqueW(LPCWSTR pszURL);
526   LWSTDAPI_(WINBOOL) UrlIsNoHistoryA(LPCSTR pszURL);
527   LWSTDAPI_(WINBOOL) UrlIsNoHistoryW(LPCWSTR pszURL);
528 #define UrlIsFileUrlA(pszURL) UrlIsA(pszURL,URLIS_FILEURL)
529 #define UrlIsFileUrlW(pszURL) UrlIsW(pszURL,URLIS_FILEURL)
530   LWSTDAPI_(WINBOOL) UrlIsA(LPCSTR pszUrl,URLIS UrlIs);
531   LWSTDAPI_(WINBOOL) UrlIsW(LPCWSTR pszUrl,URLIS UrlIs);
532   LWSTDAPI_(LPCSTR) UrlGetLocationA(LPCSTR psz1);
533   LWSTDAPI_(LPCWSTR) UrlGetLocationW(LPCWSTR psz1);
534   LWSTDAPI UrlUnescapeA(LPSTR pszUrl,LPSTR pszUnescaped,LPDWORD pcchUnescaped,DWORD dwFlags);
535   LWSTDAPI UrlUnescapeW(LPWSTR pszUrl,LPWSTR pszUnescaped,LPDWORD pcchUnescaped,DWORD dwFlags);
536   LWSTDAPI UrlEscapeA(LPCSTR pszUrl,LPSTR pszEscaped,LPDWORD pcchEscaped,DWORD dwFlags);
537   LWSTDAPI UrlEscapeW(LPCWSTR pszUrl,LPWSTR pszEscaped,LPDWORD pcchEscaped,DWORD dwFlags);
538   LWSTDAPI UrlCreateFromPathA(LPCSTR pszPath,LPSTR pszUrl,LPDWORD pcchUrl,DWORD dwFlags);
539   LWSTDAPI UrlCreateFromPathW(LPCWSTR pszPath,LPWSTR pszUrl,LPDWORD pcchUrl,DWORD dwFlags);
540   LWSTDAPI PathCreateFromUrlA(LPCSTR pszUrl,LPSTR pszPath,LPDWORD pcchPath,DWORD dwFlags);
541   LWSTDAPI PathCreateFromUrlW(LPCWSTR pszUrl,LPWSTR pszPath,LPDWORD pcchPath,DWORD dwFlags);
542   LWSTDAPI UrlHashA(LPCSTR pszUrl,LPBYTE pbHash,DWORD cbHash);
543   LWSTDAPI UrlHashW(LPCWSTR pszUrl,LPBYTE pbHash,DWORD cbHash);
544   LWSTDAPI UrlGetPartW(LPCWSTR pszIn,LPWSTR pszOut,LPDWORD pcchOut,DWORD dwPart,DWORD dwFlags);
545   LWSTDAPI UrlGetPartA(LPCSTR pszIn,LPSTR pszOut,LPDWORD pcchOut,DWORD dwPart,DWORD dwFlags);
546   LWSTDAPI UrlApplySchemeA(LPCSTR pszIn,LPSTR pszOut,LPDWORD pcchOut,DWORD dwFlags);
547   LWSTDAPI UrlApplySchemeW(LPCWSTR pszIn,LPWSTR pszOut,LPDWORD pcchOut,DWORD dwFlags);
548   LWSTDAPI HashData(LPBYTE pbData,DWORD cbData,LPBYTE pbHash,DWORD cbHash);
549 
550 #define UrlCompare __MINGW_NAME_AW(UrlCompare)
551 #define UrlCombine __MINGW_NAME_AW(UrlCombine)
552 #define UrlCanonicalize __MINGW_NAME_AW(UrlCanonicalize)
553 #define UrlIsOpaque __MINGW_NAME_AW(UrlIsOpaque)
554 #define UrlIsFileUrl __MINGW_NAME_AW(UrlIsFileUrl)
555 #define UrlGetLocation __MINGW_NAME_AW(UrlGetLocation)
556 #define UrlUnescape __MINGW_NAME_AW(UrlUnescape)
557 #define UrlEscape __MINGW_NAME_AW(UrlEscape)
558 #define UrlCreateFromPath __MINGW_NAME_AW(UrlCreateFromPath)
559 #define PathCreateFromUrl __MINGW_NAME_AW(PathCreateFromUrl)
560 #define UrlHash __MINGW_NAME_AW(UrlHash)
561 #define UrlGetPart __MINGW_NAME_AW(UrlGetPart)
562 #define UrlApplyScheme __MINGW_NAME_AW(UrlApplyScheme)
563 #define UrlIs __MINGW_NAME_AW(UrlIs)
564 
565 #define UrlEscapeSpaces(pszUrl,pszEscaped,pcchEscaped) UrlCanonicalize(pszUrl,pszEscaped,pcchEscaped,URL_ESCAPE_SPACES_ONLY |URL_DONT_ESCAPE_EXTRA_INFO)
566 #define UrlUnescapeInPlace(pszUrl,dwFlags) UrlUnescape(pszUrl,NULL,NULL,dwFlags | URL_UNESCAPE_INPLACE)
567 #endif
568 
569 #ifndef NO_SHLWAPI_REG
570 
571   LWSTDAPI_(DWORD) SHDeleteEmptyKeyA(HKEY hkey,LPCSTR pszSubKey);
572   LWSTDAPI_(DWORD) SHDeleteEmptyKeyW(HKEY hkey,LPCWSTR pszSubKey);
573 
574 #define SHDeleteEmptyKey __MINGW_NAME_AW(SHDeleteEmptyKey)
575 
576   LWSTDAPI_(DWORD) SHDeleteKeyA(HKEY hkey,LPCSTR pszSubKey);
577   LWSTDAPI_(DWORD) SHDeleteKeyW(HKEY hkey,LPCWSTR pszSubKey);
578 
579 #define SHDeleteKey __MINGW_NAME_AW(SHDeleteKey)
580 
581   LWSTDAPI_(HKEY) SHRegDuplicateHKey(HKEY hkey);
582 
583   LWSTDAPI_(DWORD) SHDeleteValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue);
584   LWSTDAPI_(DWORD) SHDeleteValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue);
585 
586 #define SHDeleteValue __MINGW_NAME_AW(SHDeleteValue)
587 
588   LWSTDAPI_(DWORD) SHGetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD *pdwType,void *pvData,DWORD *pcbData);
589   LWSTDAPI_(DWORD) SHGetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,DWORD *pdwType,void *pvData,DWORD *pcbData);
590 
591 #define SHGetValue __MINGW_NAME_AW(SHGetValue)
592 
593   LWSTDAPI_(DWORD) SHSetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD dwType,LPCVOID pvData,DWORD cbData);
594   LWSTDAPI_(DWORD) SHSetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,DWORD dwType,LPCVOID pvData,DWORD cbData);
595 
596 #define SHSetValue __MINGW_NAME_AW(SHSetValue)
597 
598 #if (_WIN32_IE >= 0x0602)
599 
600   typedef DWORD SRRF;
601 
602 #define SRRF_RT_REG_NONE 0x00000001
603 #define SRRF_RT_REG_SZ 0x00000002
604 #define SRRF_RT_REG_EXPAND_SZ 0x00000004
605 #define SRRF_RT_REG_BINARY 0x00000008
606 #define SRRF_RT_REG_DWORD 0x00000010
607 #define SRRF_RT_REG_MULTI_SZ 0x00000020
608 #define SRRF_RT_REG_QWORD 0x00000040
609 
610 #define SRRF_RT_DWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_DWORD)
611 #define SRRF_RT_QWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_QWORD)
612 #define SRRF_RT_ANY 0x0000ffff
613 
614 #define SRRF_RM_ANY 0x00000000
615 #define SRRF_RM_NORMAL 0x00010000
616 #define SRRF_RM_SAFE 0x00020000
617 #define SRRF_RM_SAFENETWORK 0x00040000
618 
619 #define SRRF_NOEXPAND 0x10000000
620 #define SRRF_ZEROONFAILURE 0x20000000
621 
622   LWSTDAPI_(LONG) SHRegGetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,SRRF dwFlags,DWORD *pdwType,void *pvData,DWORD *pcbData);
623   LWSTDAPI_(LONG) SHRegGetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,SRRF dwFlags,DWORD *pdwType,void *pvData,DWORD *pcbData);
624 
625 #define SHRegGetValue __MINGW_NAME_AW(SHRegGetValue)
626 #endif
627 
628 #define SHQueryValueEx __MINGW_NAME_AW(SHQueryValueEx)
629 #define SHEnumKeyEx __MINGW_NAME_AW(SHEnumKeyEx)
630 #define SHEnumValue __MINGW_NAME_AW(SHEnumValue)
631 #define SHQueryInfoKey __MINGW_NAME_AW(SHQueryInfoKey)
632 #define SHCopyKey __MINGW_NAME_AW(SHCopyKey)
633 #define SHRegGetPath __MINGW_NAME_AW(SHRegGetPath)
634 #define SHRegSetPath __MINGW_NAME_AW(SHRegSetPath)
635 
636   LWSTDAPI_(DWORD) SHQueryValueExA(HKEY hkey,LPCSTR pszValue,DWORD *pdwReserved,DWORD *pdwType,void *pvData,DWORD *pcbData);
637   LWSTDAPI_(DWORD) SHQueryValueExW(HKEY hkey,LPCWSTR pszValue,DWORD *pdwReserved,DWORD *pdwType,void *pvData,DWORD *pcbData);
638   LWSTDAPI_(LONG) SHEnumKeyExA(HKEY hkey,DWORD dwIndex,LPSTR pszName,LPDWORD pcchName);
639   LWSTDAPI_(LONG) SHEnumKeyExW(HKEY hkey,DWORD dwIndex,LPWSTR pszName,LPDWORD pcchName);
640   LWSTDAPI_(LONG) SHEnumValueA(HKEY hkey,DWORD dwIndex,LPSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData);
641   LWSTDAPI_(LONG) SHEnumValueW(HKEY hkey,DWORD dwIndex,LPWSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData);
642   LWSTDAPI_(LONG) SHQueryInfoKeyA(HKEY hkey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen);
643   LWSTDAPI_(LONG) SHQueryInfoKeyW(HKEY hkey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen);
644   LWSTDAPI_(DWORD) SHCopyKeyA(HKEY hkeySrc,LPCSTR szSrcSubKey,HKEY hkeyDest,DWORD fReserved);
645   LWSTDAPI_(DWORD) SHCopyKeyW(HKEY hkeySrc,LPCWSTR wszSrcSubKey,HKEY hkeyDest,DWORD fReserved);
646   LWSTDAPI_(DWORD) SHRegGetPathA(HKEY hKey,LPCSTR pcszSubKey,LPCSTR pcszValue,LPSTR pszPath,DWORD dwFlags);
647   LWSTDAPI_(DWORD) SHRegGetPathW(HKEY hKey,LPCWSTR pcszSubKey,LPCWSTR pcszValue,LPWSTR pszPath,DWORD dwFlags);
648   LWSTDAPI_(DWORD) SHRegSetPathA(HKEY hKey,LPCSTR pcszSubKey,LPCSTR pcszValue,LPCSTR pcszPath,DWORD dwFlags);
649   LWSTDAPI_(DWORD) SHRegSetPathW(HKEY hKey,LPCWSTR pcszSubKey,LPCWSTR pcszValue,LPCWSTR pcszPath,DWORD dwFlags);
650 
651   typedef enum {
652     SHREGDEL_DEFAULT = 0x00000000,SHREGDEL_HKCU = 0x00000001,SHREGDEL_HKLM = 0x00000010,SHREGDEL_BOTH = 0x00000011
653   } SHREGDEL_FLAGS;
654 
655   typedef enum {
656     SHREGENUM_DEFAULT = 0x00000000,SHREGENUM_HKCU = 0x00000001,SHREGENUM_HKLM = 0x00000010,SHREGENUM_BOTH = 0x00000011
657   } SHREGENUM_FLAGS;
658 
659 #define SHREGSET_HKCU 0x00000001
660 #define SHREGSET_FORCE_HKCU 0x00000002
661 #define SHREGSET_HKLM 0x00000004
662 #define SHREGSET_FORCE_HKLM 0x00000008
663 #define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
664 
665   typedef HANDLE HUSKEY;
666   typedef HUSKEY *PHUSKEY;
667 
668   LWSTDAPI_(LONG) SHRegCreateUSKeyA(LPCSTR pszPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,DWORD dwFlags);
669   LWSTDAPI_(LONG) SHRegCreateUSKeyW(LPCWSTR pwzPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,DWORD dwFlags);
670   LWSTDAPI_(LONG) SHRegOpenUSKeyA(LPCSTR pszPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,WINBOOL fIgnoreHKCU);
671   LWSTDAPI_(LONG) SHRegOpenUSKeyW(LPCWSTR pwzPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,WINBOOL fIgnoreHKCU);
672   LWSTDAPI_(LONG) SHRegQueryUSValueA(HUSKEY hUSKey,LPCSTR pszValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
673   LWSTDAPI_(LONG) SHRegQueryUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
674   LWSTDAPI_(LONG) SHRegWriteUSValueA(HUSKEY hUSKey,LPCSTR pszValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
675   LWSTDAPI_(LONG) SHRegWriteUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
676   LWSTDAPI_(LONG) SHRegDeleteUSValueA(HUSKEY hUSKey,LPCSTR pszValue,SHREGDEL_FLAGS delRegFlags);
677   LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyW(HUSKEY hUSKey,LPCWSTR pwzSubKey,SHREGDEL_FLAGS delRegFlags);
678   LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyA(HUSKEY hUSKey,LPCSTR pszSubKey,SHREGDEL_FLAGS delRegFlags);
679   LWSTDAPI_(LONG) SHRegDeleteUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,SHREGDEL_FLAGS delRegFlags);
680   LWSTDAPI_(LONG) SHRegEnumUSKeyA(HUSKEY hUSKey,DWORD dwIndex,LPSTR pszName,LPDWORD pcchName,SHREGENUM_FLAGS enumRegFlags);
681   LWSTDAPI_(LONG) SHRegEnumUSKeyW(HUSKEY hUSKey,DWORD dwIndex,LPWSTR pwzName,LPDWORD pcchName,SHREGENUM_FLAGS enumRegFlags);
682   LWSTDAPI_(LONG) SHRegEnumUSValueA(HUSKEY hUSkey,DWORD dwIndex,LPSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData,SHREGENUM_FLAGS enumRegFlags);
683   LWSTDAPI_(LONG) SHRegEnumUSValueW(HUSKEY hUSkey,DWORD dwIndex,LPWSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData,SHREGENUM_FLAGS enumRegFlags);
684   LWSTDAPI_(LONG) SHRegQueryInfoUSKeyA(HUSKEY hUSKey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen,SHREGENUM_FLAGS enumRegFlags);
685   LWSTDAPI_(LONG) SHRegQueryInfoUSKeyW(HUSKEY hUSKey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen,SHREGENUM_FLAGS enumRegFlags);
686   LWSTDAPI_(LONG) SHRegCloseUSKey(HUSKEY hUSKey);
687   LWSTDAPI_(LONG) SHRegGetUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
688   LWSTDAPI_(LONG) SHRegGetUSValueW(LPCWSTR pwzSubKey,LPCWSTR pwzValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
689   LWSTDAPI_(LONG) SHRegSetUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
690   LWSTDAPI_(LONG) SHRegSetUSValueW(LPCWSTR pwzSubKey,LPCWSTR pwzValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
691   LWSTDAPI_(int) SHRegGetIntW(HKEY hk,LPCWSTR pwzKey,int iDefault);
692 
693 #define SHRegCreateUSKey __MINGW_NAME_AW(SHRegCreateUSKey)
694 #define SHRegOpenUSKey __MINGW_NAME_AW(SHRegOpenUSKey)
695 #define SHRegQueryUSValue __MINGW_NAME_AW(SHRegQueryUSValue)
696 #define SHRegWriteUSValue __MINGW_NAME_AW(SHRegWriteUSValue)
697 #define SHRegDeleteUSValue __MINGW_NAME_AW(SHRegDeleteUSValue)
698 #define SHRegDeleteEmptyUSKey __MINGW_NAME_AW(SHRegDeleteEmptyUSKey)
699 #define SHRegEnumUSKey __MINGW_NAME_AW(SHRegEnumUSKey)
700 #define SHRegEnumUSValue __MINGW_NAME_AW(SHRegEnumUSValue)
701 #define SHRegQueryInfoUSKey __MINGW_NAME_AW(SHRegQueryInfoUSKey)
702 #define SHRegGetUSValue __MINGW_NAME_AW(SHRegGetUSValue)
703 #define SHRegSetUSValue __MINGW_NAME_AW(SHRegSetUSValue)
704 #define SHRegGetInt __MINGW_NAME_AW(SHRegGetInt)
705 #define SHRegGetBoolUSValue __MINGW_NAME_AW(SHRegGetBoolUSValue)
706 
707   LWSTDAPI_(WINBOOL) SHRegGetBoolUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,WINBOOL fIgnoreHKCU,WINBOOL fDefault);
708   LWSTDAPI_(WINBOOL) SHRegGetBoolUSValueW(LPCWSTR pszSubKey,LPCWSTR pszValue,WINBOOL fIgnoreHKCU,WINBOOL fDefault);
709 
710   enum {
711     ASSOCF_INIT_NOREMAPCLSID = 0x00000001,
712     ASSOCF_INIT_BYEXENAME = 0x00000002,
713     ASSOCF_OPEN_BYEXENAME = 0x00000002,
714     ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004,
715     ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008,
716     ASSOCF_NOUSERSETTINGS = 0x00000010,
717     ASSOCF_NOTRUNCATE = 0x00000020,
718     ASSOCF_VERIFY = 0x00000040,
719     ASSOCF_REMAPRUNDLL = 0x00000080,
720     ASSOCF_NOFIXUPS = 0x00000100,
721     ASSOCF_IGNOREBASECLASS = 0x00000200,
722     ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400
723   };
724 
725   typedef DWORD ASSOCF;
726 
727   typedef enum {
728     ASSOCSTR_COMMAND = 1,
729     ASSOCSTR_EXECUTABLE,
730     ASSOCSTR_FRIENDLYDOCNAME,
731     ASSOCSTR_FRIENDLYAPPNAME,
732     ASSOCSTR_NOOPEN,
733     ASSOCSTR_SHELLNEWVALUE,
734     ASSOCSTR_DDECOMMAND,
735     ASSOCSTR_DDEIFEXEC,
736     ASSOCSTR_DDEAPPLICATION,
737     ASSOCSTR_DDETOPIC,
738     ASSOCSTR_INFOTIP,
739     ASSOCSTR_QUICKTIP,
740     ASSOCSTR_TILEINFO,
741     ASSOCSTR_CONTENTTYPE,
742     ASSOCSTR_DEFAULTICON,
743     ASSOCSTR_SHELLEXTENSION,
744 #if _WIN32_WINNT >= 0x601
745     ASSOCSTR_DROPTARGET,
746     ASSOCSTR_DELEGATEEXECUTE,
747 #endif
748     ASSOCSTR_MAX
749   } ASSOCSTR;
750 
751   typedef enum {
752     ASSOCKEY_SHELLEXECCLASS = 1,
753     ASSOCKEY_APP,
754     ASSOCKEY_CLASS,
755     ASSOCKEY_BASECLASS,
756     ASSOCKEY_MAX
757   } ASSOCKEY;
758 
759   typedef enum {
760     ASSOCDATA_MSIDESCRIPTOR = 1,
761     ASSOCDATA_NOACTIVATEHANDLER,
762     ASSOCDATA_QUERYCLASSSTORE,
763     ASSOCDATA_HASPERUSERASSOC,
764     ASSOCDATA_EDITFLAGS,
765     ASSOCDATA_VALUE,
766     ASSOCDATA_MAX
767   } ASSOCDATA;
768 
769   typedef enum {
770     ASSOCENUM_NONE
771   } ASSOCENUM;
772 
773 #undef INTERFACE
774 #define INTERFACE IQueryAssociations
DECLARE_INTERFACE_(IQueryAssociations,IUnknown)775   DECLARE_INTERFACE_(IQueryAssociations,IUnknown) {
776     STDMETHOD (QueryInterface)(THIS_ REFIID riid,void **ppv) PURE;
777     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
778     STDMETHOD_(ULONG,Release) (THIS) PURE;
779     STDMETHOD (Init)(THIS_ ASSOCF flags,LPCWSTR pszAssoc,HKEY hkProgid,HWND hwnd) PURE;
780     STDMETHOD (GetString)(THIS_ ASSOCF flags,ASSOCSTR str,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut) PURE;
781     STDMETHOD (GetKey)(THIS_ ASSOCF flags,ASSOCKEY key,LPCWSTR pszExtra,HKEY *phkeyOut) PURE;
782     STDMETHOD (GetData)(THIS_ ASSOCF flags,ASSOCDATA data,LPCWSTR pszExtra,LPVOID pvOut,DWORD *pcbOut) PURE;
783     STDMETHOD (GetEnum)(THIS_ ASSOCF flags,ASSOCENUM assocenum,LPCWSTR pszExtra,REFIID riid,LPVOID *ppvOut) PURE;
784   };
785 
786 #define AssocQueryString __MINGW_NAME_AW(AssocQueryString)
787 #define AssocQueryStringByKey __MINGW_NAME_AW(AssocQueryStringByKey)
788 #define AssocQueryKey __MINGW_NAME_AW(AssocQueryKey)
789 
790   LWSTDAPI AssocCreate(CLSID clsid,REFIID riid,LPVOID *ppv);
791   LWSTDAPI AssocQueryStringA(ASSOCF flags,ASSOCSTR str,LPCSTR pszAssoc,LPCSTR pszExtra,LPSTR pszOut,DWORD *pcchOut);
792   LWSTDAPI AssocQueryStringW(ASSOCF flags,ASSOCSTR str,LPCWSTR pszAssoc,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut);
793   LWSTDAPI AssocQueryStringByKeyA(ASSOCF flags,ASSOCSTR str,HKEY hkAssoc,LPCSTR pszExtra,LPSTR pszOut,DWORD *pcchOut);
794   LWSTDAPI AssocQueryStringByKeyW(ASSOCF flags,ASSOCSTR str,HKEY hkAssoc,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut);
795   LWSTDAPI AssocQueryKeyA(ASSOCF flags,ASSOCKEY key,LPCSTR pszAssoc,LPCSTR pszExtra,HKEY *phkeyOut);
796   LWSTDAPI AssocQueryKeyW(ASSOCF flags,ASSOCKEY key,LPCWSTR pszAssoc,LPCWSTR pszExtra,HKEY *phkeyOut);
797 
798 #if (_WIN32_IE >= 0x0601)
799   LWSTDAPI_(WINBOOL) AssocIsDangerous(LPCWSTR pszAssoc);
800 #endif
801 
802 #if (_WIN32_IE >= 0x0603)
803   LWSTDAPI AssocGetPerceivedType(LPCWSTR pszExt,PERCEIVED *ptype,PERCEIVEDFLAG *pflag,LPWSTR *ppszType);
804 #endif
805 #endif
806 
807 #ifndef NO_SHLWAPI_STREAM
808 #define SHOpenRegStream __MINGW_NAME_AW(SHOpenRegStream)
809 #define SHOpenRegStream2 __MINGW_NAME_AW(SHOpenRegStream2)
810 #define SHCreateStreamOnFile __MINGW_NAME_AW(SHCreateStreamOnFile)
811 
812   LWSTDAPI_(struct IStream *) SHOpenRegStreamA(HKEY hkey,LPCSTR pszSubkey,LPCSTR pszValue,DWORD grfMode);
813   LWSTDAPI_(struct IStream *) SHOpenRegStreamW(HKEY hkey,LPCWSTR pszSubkey,LPCWSTR pszValue,DWORD grfMode);
814   LWSTDAPI_(struct IStream *) SHOpenRegStream2A(HKEY hkey,LPCSTR pszSubkey,LPCSTR pszValue,DWORD grfMode);
815   LWSTDAPI_(struct IStream *) SHOpenRegStream2W(HKEY hkey,LPCWSTR pszSubkey,LPCWSTR pszValue,DWORD grfMode);
816 
817 #undef SHOpenRegStream
818 #define SHOpenRegStream SHOpenRegStream2
819   LWSTDAPI SHCreateStreamOnFileA(LPCSTR pszFile,DWORD grfMode,struct IStream **ppstm);
820   LWSTDAPI SHCreateStreamOnFileW(LPCWSTR pszFile,DWORD grfMode,struct IStream **ppstm);
821 
822 #if (_WIN32_IE >= 0x0600)
823   LWSTDAPI SHCreateStreamOnFileEx(LPCWSTR pszFile,DWORD grfMode,DWORD dwAttributes,WINBOOL fCreate,struct IStream *pstmTemplate,struct IStream **ppstm);
824 #endif
825 #endif
826 
827 #ifndef NO_SHLWAPI_HTTP
828 #if (_WIN32_IE >= 0x0603)
829 
830 #define GetAcceptLanguages __MINGW_NAME_AW(GetAcceptLanguages)
831 
832   LWSTDAPI GetAcceptLanguagesA(LPSTR psz,DWORD *pcch);
833   LWSTDAPI GetAcceptLanguagesW(LPWSTR psz,DWORD *pcch);
834 #endif
835 #endif
836 
837 #if (_WIN32_IE >= 0x0601)
838 #define SHGVSPB_PERUSER 0x00000001
839 #define SHGVSPB_ALLUSERS 0x00000002
840 #define SHGVSPB_PERFOLDER 0x00000004
841 #define SHGVSPB_ALLFOLDERS 0x00000008
842 #define SHGVSPB_INHERIT 0x00000010
843 #define SHGVSPB_ROAM 0x00000020
844 #define SHGVSPB_NOAUTODEFAULTS 0x80000000
845 
846 #define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER)
847 #define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS)
848 #define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS)
849 #define SHGVSPB_GLOBALDEAFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS)
850 
851   LWSTDAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl,LPCWSTR pszBagName,DWORD dwFlags,REFIID riid,void **ppv);
852 #endif
853 
854 #if (_WIN32_IE >= 0x0603)
855   LWSTDAPI_(HANDLE) SHAllocShared(const void *pvData,DWORD dwSize,DWORD dwProcessId);
856   LWSTDAPI_(WINBOOL) SHFreeShared(HANDLE hData,DWORD dwProcessId);
857   LWSTDAPI_(void *) SHLockShared(HANDLE hData,DWORD dwProcessId);
858   LWSTDAPI_(WINBOOL) SHUnlockShared(void *pvData);
859 #endif
860 
861 #if (_WIN32_IE >= 0x0501)
862 #define PLATFORM_UNKNOWN 0
863 #define PLATFORM_IE3 1
864 #define PLATFORM_BROWSERONLY 1
865 #define PLATFORM_INTEGRATED 2
866 
867   LWSTDAPI WhichPlatform(void);
868 
869 typedef struct {
870   const IID *piid;
871   int dwOffset;
872 } QITAB, *LPQITAB;
873 typedef const QITAB *LPCQITAB;
874 
875 #ifndef OFFSETOFCLASS
876 #define OFFSETOFCLASS(base, derived) ((DWORD)(DWORD_PTR)(static_cast<base*>((derived*)8))-8)
877 #endif
878 
879 #ifdef __cplusplus
880 #define QITABENTMULTI(Cthis, Ifoo, Iimpl) { &__uuidof(Ifoo), OFFSETOFCLASS(Iimpl, Cthis) }
881 #else
882 #define QITABENTMULTI(Cthis, Ifoo, Iimpl) { (IID*) &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
883 #endif
884 #define QITABENTMULTI2(Cthis, Ifoo, Iimpl) { (IID*) &Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
885 #define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo)
886 
887   STDAPI QISearch(void *that, LPCQITAB pqit, REFIID riid, void **ppv);
888 
889 #define ILMM_IE4 0
890   LWSTDAPI_(BOOL) SHIsLowMemoryMachine(DWORD dwType);
891   LWSTDAPI_(int) GetMenuPosFromId(HMENU hMenu, UINT id);
892   LWSTDAPI SHGetInverseCMAP(__out_bcount(cbMap) BYTE *pbMap, ULONG cbMap);
893 #endif
894 
895 #define SHACF_DEFAULT 0x00000000
896 #define SHACF_FILESYSTEM 0x00000001
897 #define SHACF_URLALL (SHACF_URLHISTORY | SHACF_URLMRU)
898 #define SHACF_URLHISTORY 0x00000002
899 #define SHACF_URLMRU 0x00000004
900 #define SHACF_USETAB 0x00000008
901 #define SHACF_FILESYS_ONLY 0x00000010
902 
903 #if (_WIN32_IE >= 0x0600)
904 #define SHACF_FILESYS_DIRS 0x00000020
905 #endif
906 
907 #if (_WIN32_IE >= 0x0700)
908 #define SHACF_VIRTUAL_NAMESPACE 0x00000040
909 #endif
910 
911 #define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000
912 #define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000
913 #define SHACF_AUTOAPPEND_FORCE_ON 0x40000000
914 #define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000
915 
916   LWSTDAPI SHAutoComplete(HWND hwndEdit,DWORD dwFlags);
917   LWSTDAPI SHSetThreadRef(IUnknown *punk);
918   LWSTDAPI SHGetThreadRef(IUnknown **ppunk);
919   LWSTDAPI_(WINBOOL) SHSkipJunction(struct IBindCtx *pbc,const CLSID *pclsid);
920 
921 #if (_WIN32_IE >= 0x0603)
922   LWSTDAPI SHCreateThreadRef(LONG *pcRef,IUnknown **ppunk);
923 #endif
924 
925 #define CTF_INSIST 0x00000001
926 #define CTF_THREAD_REF 0x00000002
927 #define CTF_PROCESS_REF 0x00000004
928 #define CTF_COINIT 0x00000008
929 #define CTF_FREELIBANDEXIT 0x00000010
930 #define CTF_REF_COUNTED 0x00000020
931 #define CTF_WAIT_ALLOWCOM 0x00000040
932 
933   LWSTDAPI_(WINBOOL) SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc,void *pData,DWORD dwFlags,LPTHREAD_START_ROUTINE pfnCallback);
934   LWSTDAPI SHReleaseThreadRef();
935 
936 #ifndef NO_SHLWAPI_GDI
937   LWSTDAPI_(HPALETTE) SHCreateShellPalette(HDC hdc);
938   LWSTDAPI_(void) ColorRGBToHLS(COLORREF clrRGB,WORD *pwHue,WORD *pwLuminance,WORD *pwSaturation);
939   LWSTDAPI_(COLORREF) ColorHLSToRGB(WORD wHue,WORD wLuminance,WORD wSaturation);
940   LWSTDAPI_(COLORREF) ColorAdjustLuma(COLORREF clrRGB,int n,WINBOOL fScale);
941 #endif
942 
943   typedef struct _DLLVERSIONINFO {
944     DWORD cbSize;
945     DWORD dwMajorVersion;
946     DWORD dwMinorVersion;
947     DWORD dwBuildNumber;
948     DWORD dwPlatformID;
949   } DLLVERSIONINFO;
950 
951 #define DLLVER_PLATFORM_WINDOWS 0x00000001
952 #define DLLVER_PLATFORM_NT 0x00000002
953 
954   typedef struct _DLLVERSIONINFO2 {
955     DLLVERSIONINFO info1;
956     DWORD dwFlags;
957     ULONGLONG ullVersion;
958 
959   } DLLVERSIONINFO2;
960 
961 #define DLLVER_MAJOR_MASK 0xFFFF000000000000
962 #define DLLVER_MINOR_MASK 0x0000FFFF00000000
963 #define DLLVER_BUILD_MASK 0x00000000FFFF0000
964 #define DLLVER_QFE_MASK 0x000000000000FFFF
965 
966 #define MAKEDLLVERULL(major,minor,build,qfe) (((ULONGLONG)(major) << 48) | ((ULONGLONG)(minor) << 32) | ((ULONGLONG)(build) << 16) | ((ULONGLONG)(qfe) << 0))
967 
968   typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);
969 
970   STDAPI DllInstall(WINBOOL bInstall,LPCWSTR pszCmdLine);
971 
972 #if (_WIN32_IE >= 0x0602)
973   LWSTDAPI_(WINBOOL) IsInternetESCEnabled();
974 #endif
975 
976 LWSTDAPI_(IStream *) SHCreateMemStream(const BYTE *pInit, _In_ UINT cbInit);
977 
978 #ifdef __cplusplus
979 }
980 #endif
981 
982 #include <poppack.h>
983 #endif
984 #endif
985 #endif
986