master
   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
  46extern "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
 151  inline HRESULT SHLocalStrDupW(PCWSTR psz, PWSTR *ppsz) {
 152    *ppsz = StrDupW(psz);
 153    return *ppsz ? S_OK : E_OUTOFMEMORY;
 154  }
 155
 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_(WINBOOL) PathQuoteSpacesA(LPSTR lpsz);
 442  LWSTDAPI_(WINBOOL) 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
 510LWSTDAPI PathMatchSpecExA(LPCSTR pszFile, LPCSTR pszSpec, DWORD dwFlags);
 511LWSTDAPI 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
 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
1178typedef struct {
1179  const IID *piid;
1180#if (NTDDI_VERSION >= NTDDI_WIN10_RS2)
1181  DWORD dwOffset;
1182#else
1183  int dwOffset;
1184#endif
1185} QITAB, *LPQITAB;
1186typedef const QITAB *LPCQITAB;
1187
1188#ifndef OFFSETOFCLASS
1189#define OFFSETOFCLASS(base, derived) ((DWORD)(DWORD_PTR)(static_cast<base*>((derived*)8))-8)
1190#endif
1191
1192#ifdef __cplusplus
1193#define QITABENTMULTI(Cthis, Ifoo, Iimpl) { &__uuidof(Ifoo), OFFSETOFCLASS(Iimpl, Cthis) }
1194#else
1195#define QITABENTMULTI(Cthis, Ifoo, Iimpl) { (IID*) &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
1196#endif
1197#define QITABENTMULTI2(Cthis, Ifoo, Iimpl) { (IID*) &Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
1198#define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo)
1199
1200  STDAPI QISearch(void *that, LPCQITAB pqit, REFIID riid, void **ppv);
1201
1202#define ILMM_IE4 0
1203  LWSTDAPI_(WINBOOL) SHIsLowMemoryMachine(DWORD dwType);
1204  LWSTDAPI_(int) GetMenuPosFromID(HMENU hMenu, UINT id);
1205  LWSTDAPI SHGetInverseCMAP(BYTE *pbMap, ULONG cbMap);
1206#endif
1207
1208#define SHACF_DEFAULT 0x00000000
1209#define SHACF_FILESYSTEM 0x00000001
1210#define SHACF_URLALL (SHACF_URLHISTORY | SHACF_URLMRU)
1211#define SHACF_URLHISTORY 0x00000002
1212#define SHACF_URLMRU 0x00000004
1213#define SHACF_USETAB 0x00000008
1214#define SHACF_FILESYS_ONLY 0x00000010
1215
1216#if (_WIN32_IE >= 0x0600)
1217#define SHACF_FILESYS_DIRS 0x00000020
1218#endif
1219
1220#if (_WIN32_IE >= 0x0700)
1221#define SHACF_VIRTUAL_NAMESPACE 0x00000040
1222#endif
1223
1224#define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000
1225#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000
1226#define SHACF_AUTOAPPEND_FORCE_ON 0x40000000
1227#define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000
1228
1229  LWSTDAPI SHAutoComplete(HWND hwndEdit,DWORD dwFlags);
1230  LWSTDAPI SHSetThreadRef(IUnknown *punk);
1231  LWSTDAPI SHGetThreadRef(IUnknown **ppunk);
1232  LWSTDAPI_(WINBOOL) SHSkipJunction(struct IBindCtx *pbc,const CLSID *pclsid);
1233
1234#if (_WIN32_IE >= 0x0603)
1235  LWSTDAPI SHCreateThreadRef(LONG *pcRef,IUnknown **ppunk);
1236#endif
1237
1238#define CTF_INSIST 0x00000001
1239#define CTF_THREAD_REF 0x00000002
1240#define CTF_PROCESS_REF 0x00000004
1241#define CTF_COINIT_STA 0x00000008
1242#define CTF_COINIT 0x00000008
1243#if (_WIN32_IE >= _WIN32_IE_IE60)
1244#define CTF_FREELIBANDEXIT 0x00000010
1245#define CTF_REF_COUNTED 0x00000020
1246#define CTF_WAIT_ALLOWCOM 0x00000040
1247#endif
1248#if (_WIN32_IE >= _WIN32_IE_IE70)
1249#define CTF_UNUSED 0x00000080
1250#define CTF_INHERITWOW64 0x00000100
1251#endif
1252#if (NTDDI_VERSION >= NTDDI_VISTA)
1253#define CTF_WAIT_NO_REENTRANCY 0x00000200
1254#endif
1255#if (NTDDI_VERSION >= NTDDI_WIN7)
1256#define CTF_KEYBOARD_LOCALE 0x00000400
1257#define CTF_OLEINITIALIZE 0x00000800
1258#define CTF_COINIT_MTA 0x00001000
1259#define CTF_NOADDREFLIB 0x00002000
1260#endif
1261
1262  typedef DWORD SHCT_FLAGS;
1263
1264  LWSTDAPI_(WINBOOL) SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc,void *pData, SHCT_FLAGS dwFlags,LPTHREAD_START_ROUTINE pfnCallback);
1265  LWSTDAPI_(WINBOOL) SHCreateThreadWithHandle(LPTHREAD_START_ROUTINE pfnThreadProc, void *pData, SHCT_FLAGS dwflags, LPTHREAD_START_ROUTINE pfnCallback, HANDLE *pHandle);
1266
1267#if (NTDDI_VERSION >= NTDDI_WIN8)
1268  LWSTDAPI_(void) SetProcessReference(IUnknown *punk);
1269  LWSTDAPI GetProcessReference(IUnknown **punk);
1270#endif
1271
1272#if (_WIN32_IE >= _WIN32_IE_IE60)
1273  LWSTDAPI SHReleaseThreadRef(void);
1274#endif
1275
1276#ifndef NO_SHLWAPI_GDI
1277  LWSTDAPI_(HPALETTE) SHCreateShellPalette(HDC hdc);
1278  LWSTDAPI_(void) ColorRGBToHLS(COLORREF clrRGB,WORD *pwHue,WORD *pwLuminance,WORD *pwSaturation);
1279  LWSTDAPI_(COLORREF) ColorHLSToRGB(WORD wHue,WORD wLuminance,WORD wSaturation);
1280  LWSTDAPI_(COLORREF) ColorAdjustLuma(COLORREF clrRGB,int n,WINBOOL fScale);
1281#endif
1282
1283  typedef struct _DLLVERSIONINFO {
1284    DWORD cbSize;
1285    DWORD dwMajorVersion;
1286    DWORD dwMinorVersion;
1287    DWORD dwBuildNumber;
1288    DWORD dwPlatformID;
1289  } DLLVERSIONINFO;
1290
1291#define DLLVER_PLATFORM_WINDOWS 0x00000001
1292#define DLLVER_PLATFORM_NT 0x00000002
1293
1294  typedef struct _DLLVERSIONINFO2 {
1295    DLLVERSIONINFO info1;
1296    DWORD dwFlags;
1297    ULONGLONG ullVersion;
1298
1299  } DLLVERSIONINFO2;
1300
1301#define DLLVER_MAJOR_MASK 0xFFFF000000000000
1302#define DLLVER_MINOR_MASK 0x0000FFFF00000000
1303#define DLLVER_BUILD_MASK 0x00000000FFFF0000
1304#define DLLVER_QFE_MASK 0x000000000000FFFF
1305
1306#define MAKEDLLVERULL(major,minor,build,qfe) (((ULONGLONG)(major) << 48) | ((ULONGLONG)(minor) << 32) | ((ULONGLONG)(build) << 16) | ((ULONGLONG)(qfe) << 0))
1307
1308  typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);
1309
1310  STDAPI DllInstall(WINBOOL bInstall,LPCWSTR pszCmdLine);
1311
1312#if (_WIN32_IE >= 0x0602)
1313  LWSTDAPI_(WINBOOL) IsInternetESCEnabled(void);
1314#endif
1315
1316#ifndef NO_SHLWAPI_HTTP
1317
1318#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
1319
1320#if (_WIN32_IE >= 0x0603)
1321#define GetAcceptLanguages __MINGW_NAME_AW(GetAcceptLanguages)
1322  LWSTDAPI GetAcceptLanguagesA(LPSTR psz,DWORD *pcch);
1323  LWSTDAPI GetAcceptLanguagesW(LPWSTR psz,DWORD *pcch);
1324#endif
1325
1326#endif
1327
1328#endif
1329
1330#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
1331
1332#if (_WIN32_IE < _WIN32_IE_IE70) && !defined(NO_SHLWAPI_STOPWATCH)
1333#define SPMODE_SHELL      0x00000001
1334#define SPMODE_DEBUGOUT   0x00000002
1335#define SPMODE_TEST       0x00000004
1336#define SPMODE_BROWSER    0x00000008
1337#define SPMODE_FLUSH      0x00000010
1338#define SPMODE_EVENT      0x00000020
1339#define SPMODE_MSVM       0x00000040
1340#define SPMODE_FORMATTEXT 0x00000080
1341#define SPMODE_PROFILE    0x00000100
1342#define SPMODE_DEBUGBREAK 0x00000200
1343#define SPMODE_MSGTRACE   0x00000400
1344#define SPMODE_PERFTAGS   0x00000800
1345#define SPMODE_MEMWATCH   0x00001000
1346#define SPMODE_DBMON      0x00002000
1347#define SPMODE_MULTISTOP  0x00004000
1348#if !defined(NO_ETW_TRACING)
1349#define SPMODE_EVENTTRACE 0x00008000
1350#endif
1351
1352  DWORD WINAPI StopWatchMode(void);
1353  DWORD WINAPI StopWatchFlush(void);
1354#endif
1355
1356  LWSTDAPI_(void) IUnknown_Set(IUnknown **ppunk, IUnknown *punk);
1357  LWSTDAPI_(void) IUnknown_AtomicRelease(void **ppunk);
1358  LWSTDAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd);
1359  LWSTDAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);
1360  LWSTDAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv);
1361  LWSTDAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut);
1362#ifndef COBJMACROS
1363  LWSTDAPI IStream_Read(IStream *pstm, void *pv, ULONG cb);
1364  LWSTDAPI IStream_Write(IStream *pstm, const void *pv, ULONG cb);
1365#endif
1366  LWSTDAPI IStream_Reset(IStream *pstm);
1367  LWSTDAPI IStream_Size(IStream *pstm, ULARGE_INTEGER *pui);
1368
1369#ifndef __IConnectionPoint_FWD_DEFINED__
1370#define __IConnectionPoint_FWD_DEFINED__
1371  typedef interface IConnectionPoint IConnectionPoint;
1372#endif
1373
1374  LWSTDAPI ConnectToConnectionPoint(IUnknown *punk, REFIID riidEvent, WINBOOL fConnect, IUnknown *punkTarget, DWORD *pdwCookie, IConnectionPoint **ppcpOut);
1375
1376#if (NTDDI_VERSION >= NTDDI_VISTA)
1377  LWSTDAPI IStream_ReadPidl(IStream *pstm, PIDLIST_RELATIVE *ppidlOut);
1378  LWSTDAPI IStream_WritePidl(IStream *pstm, PCUIDLIST_RELATIVE pidlWrite);
1379#endif
1380
1381#if (_WIN32_IE >= _WIN32_IE_IE70)
1382  LWSTDAPI IStream_ReadStr(IStream *pstm, PWSTR *ppsz);
1383  LWSTDAPI IStream_WriteStr(IStream *pstm, PCWSTR psz);
1384  LWSTDAPI IStream_Copy(IStream *pstmFrom, IStream *pstmTo, DWORD cb);
1385#endif
1386
1387#if (_WIN32_IE >= 0x0601)
1388#define SHGVSPB_PERUSER         0x00000001
1389#define SHGVSPB_ALLUSERS        0x00000002
1390#define SHGVSPB_PERFOLDER       0x00000004
1391#define SHGVSPB_ALLFOLDERS      0x00000008
1392#define SHGVSPB_INHERIT         0x00000010
1393#define SHGVSPB_ROAM            0x00000020
1394#define SHGVSPB_NOAUTODEFAULTS  0x80000000
1395
1396#define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER)
1397#define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS)
1398#define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS)
1399#define SHGVSPB_GLOBALDEFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS)
1400
1401  LWSTDAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl,LPCWSTR pszBagName,DWORD dwFlags,REFIID riid,void **ppv);
1402#endif
1403
1404#define FDTF_SHORTTIME          0x00000001
1405#define FDTF_SHORTDATE          0x00000002
1406#define FDTF_DEFAULT            (FDTF_SHORTDATE | FDTF_SHORTTIME)
1407#define FDTF_LONGDATE           0x00000004
1408#define FDTF_LONGTIME           0x00000008
1409#define FDTF_RELATIVE           0x00000010
1410#define FDTF_LTRDATE            0x00000100
1411#define FDTF_RTLDATE            0x00000200
1412#define FDTF_NOAUTOREADINGORDER 0x00000400
1413
1414  LWSTDAPI_(int) SHFormatDateTimeA(const FILETIME UNALIGNED *pft, DWORD *pdwFlags, LPSTR pszBuf, UINT cchBuf);
1415  LWSTDAPI_(int) SHFormatDateTimeW(const FILETIME UNALIGNED *pft, DWORD *pdwFlags, LPWSTR pszBuf, UINT cchBuf);
1416
1417#define SHFormatDateTime __MINGW_NAME_AW(SHFormatDateTime)
1418
1419#endif
1420
1421#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
1422
1423  LWSTDAPI_(int) SHAnsiToUnicode(PCSTR pszSrc, PWSTR pwszDst, int cwchBuf);
1424  LWSTDAPI_(int) SHAnsiToAnsi(PCSTR pszSrc, PSTR pszDst, int cchBuf);
1425  LWSTDAPI_(int) SHUnicodeToAnsi(PCWSTR pwszSrc, PSTR pszDst, int cchBuf);
1426  LWSTDAPI_(int) SHUnicodeToUnicode(PCWSTR pwzSrc, PWSTR pwzDst, int cwchBuf);
1427
1428#if defined(UNICODE)
1429#define SHTCharToUnicode(wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
1430#define SHTCharToAnsi(wzSrc, szDest, cchSize)    SHUnicodeToAnsi(wzSrc, szDest, cchSize)
1431#define SHUnicodeToTChar(wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
1432#define SHAnsiToTChar(szSrc, wzDest, cchSize)    SHAnsiToUnicode(szSrc, wzDest, cchSize)
1433#else
1434#define SHTCharToUnicode(szSrc, wzDest, cchSize) SHAnsiToUnicode(szSrc, wzDest, cchSize)
1435#define SHTCharToAnsi(szSrc, szDest, cchSize)    SHAnsiToAnsi(szSrc, szDest, cchSize)
1436#define SHUnicodeToTChar(wzSrc, szDest, cchSize) SHUnicodeToAnsi(wzSrc, szDest, cchSize)
1437#define SHAnsiToTChar(szSrc, szDest, cchSize)    SHAnsiToAnsi(szSrc, szDest, cchSize)
1438#endif
1439
1440#endif
1441
1442#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
1443
1444  LWSTDAPI_(int) SHMessageBoxCheckA(HWND hwnd, LPCSTR pszText, LPCSTR pszCaption, UINT uType, int iDefault, LPCSTR pszRegVal);
1445  LWSTDAPI_(int) SHMessageBoxCheckW(HWND hwnd, LPCWSTR pszText, LPCWSTR pszCaption, UINT uType, int iDefault, LPCWSTR pszRegVal);
1446
1447#define SHMessageBoxCheck  __MINGW_NAME_AW(SHMessageBoxCheck)
1448
1449  LWSTDAPI_(LRESULT) SHSendMessageBroadcastA(UINT uMsg, WPARAM wParam, LPARAM lParam);
1450  LWSTDAPI_(LRESULT) SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam);
1451
1452#define SHSendMessageBroadcast  __MINGW_NAME_AW(SHSendMessageBroadcast)
1453
1454  LWSTDAPI_(CHAR) SHStripMneumonicA(LPSTR pszMenu);
1455  LWSTDAPI_(WCHAR) SHStripMneumonicW(LPWSTR pszMenu);
1456
1457#define SHStripMneumonic __MINGW_NAME_AW(SHStripMneumonic)
1458
1459#endif
1460
1461#if defined(__cplusplus)
1462}
1463#endif
1464
1465#include <poppack.h>
1466
1467#endif
1468
1469#endif
1470
1471#endif