zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

shlwapi.h (60574B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_SHLWAPI
      7 #define _INC_SHLWAPI
      8 
      9 #include <_mingw_unicode.h>
     10 #include <winapifamily.h>
     11 
     12 #ifndef NOSHLWAPI
     13 
     14 #include <objbase.h>
     15 #include <shtypes.h>
     16 
     17 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
     18 #ifndef WINSHLWAPI
     19 #if !defined(_SHLWAPI_)
     20 #define LWSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT WINAPI
     21 #define LWSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type WINAPI
     22 #define LWSTDAPIV EXTERN_C DECLSPEC_IMPORT HRESULT STDAPIVCALLTYPE
     23 #define LWSTDAPIV_(type) EXTERN_C DECLSPEC_IMPORT type STDAPIVCALLTYPE
     24 #else
     25 #define LWSTDAPI STDAPI
     26 #define LWSTDAPI_(type) STDAPI_(type)
     27 #define LWSTDAPIV STDAPIV
     28 #define LWSTDAPIV_(type) STDAPIV_(type)
     29 #endif
     30 #endif
     31 
     32 #ifndef _WINRESRC_
     33 #ifndef _WIN32_IE
     34 #define _WIN32_IE 0x0601
     35 #endif
     36 #endif
     37 
     38 #include <pshpack8.h>
     39 
     40 #ifndef __IBindCtx_FWD_DEFINED__
     41 #define __IBindCtx_FWD_DEFINED__
     42   typedef interface IBindCtx IBindCtx;
     43 #endif
     44 
     45 #ifdef __cplusplus
     46 extern "C" {
     47 #endif
     48 
     49 #ifndef NO_SHLWAPI_STRFCNS
     50   LWSTDAPI_(LPSTR) StrChrA(LPCSTR lpStart,WORD wMatch);
     51   LWSTDAPI_(LPWSTR) StrChrW(LPCWSTR lpStart,WCHAR wMatch);
     52   LWSTDAPI_(LPSTR) StrChrIA(LPCSTR lpStart,WORD wMatch);
     53   LWSTDAPI_(LPWSTR) StrChrIW(LPCWSTR lpStart,WCHAR wMatch);
     54   LWSTDAPI_(PCWSTR) StrChrNW(PCWSTR pszStart, WCHAR wMatch, UINT cchMax);
     55   LWSTDAPI_(PCWSTR) StrChrNIW(PCWSTR pszStart, WCHAR wMatch, UINT cchMax);
     56   LWSTDAPI_(int) StrCmpNA(LPCSTR lpStr1,LPCSTR lpStr2,int nChar);
     57   LWSTDAPI_(int) StrCmpNW(LPCWSTR lpStr1,LPCWSTR lpStr2,int nChar);
     58   LWSTDAPI_(int) StrCmpNIA(LPCSTR lpStr1,LPCSTR lpStr2,int nChar);
     59   LWSTDAPI_(int) StrCmpNIW(LPCWSTR lpStr1,LPCWSTR lpStr2,int nChar);
     60 
     61   LWSTDAPI_(int) StrCmpNCA(LPCSTR pszStr1, LPCSTR pszStr2, int nChar);
     62   LWSTDAPI_(int) StrCmpNCW(LPCWSTR pszStr1, LPCWSTR pszStr2, int nChar);
     63 
     64 #define StrCmpNC __MINGW_NAME_AW(StrCmpNC)
     65 
     66   LWSTDAPI_(int)  StrCmpNICA(LPCSTR pszStr1, LPCSTR pszStr2, int nChar);
     67   LWSTDAPI_(int)  StrCmpNICW(LPCWSTR pszStr1, LPCWSTR pszStr2, int nChar);
     68 
     69 #define StrCmpNIC __MINGW_NAME_AW(StrCmpNIC)
     70 
     71   LWSTDAPI_(int) StrCSpnA(LPCSTR lpStr,LPCSTR lpSet);
     72   LWSTDAPI_(int) StrCSpnW(LPCWSTR lpStr,LPCWSTR lpSet);
     73   LWSTDAPI_(int) StrCSpnIA(LPCSTR lpStr,LPCSTR lpSet);
     74   LWSTDAPI_(int) StrCSpnIW(LPCWSTR lpStr,LPCWSTR lpSet);
     75   LWSTDAPI_(LPSTR) StrDupA(LPCSTR lpSrch);
     76   LWSTDAPI_(LPWSTR) StrDupW(LPCWSTR lpSrch);
     77   LWSTDAPI_(LPSTR) StrFormatByteSizeA(DWORD dw,LPSTR szBuf,UINT uiBufSize);
     78   LWSTDAPI_(LPSTR) StrFormatByteSize64A(LONGLONG qdw,LPSTR szBuf,UINT uiBufSize);
     79   LWSTDAPI_(LPWSTR) StrFormatByteSizeW(LONGLONG qdw,LPWSTR szBuf,UINT uiBufSize);
     80   LWSTDAPI_(LPWSTR) StrFormatKBSizeW(LONGLONG qdw,LPWSTR szBuf,UINT uiBufSize);
     81   LWSTDAPI_(LPSTR) StrFormatKBSizeA(LONGLONG qdw,LPSTR szBuf,UINT uiBufSize);
     82   LWSTDAPI_(int) StrFromTimeIntervalA(LPSTR pszOut,UINT cchMax,DWORD dwTimeMS,int digits);
     83   LWSTDAPI_(int) StrFromTimeIntervalW(LPWSTR pszOut,UINT cchMax,DWORD dwTimeMS,int digits);
     84   LWSTDAPI_(WINBOOL) StrIsIntlEqualA(WINBOOL fCaseSens,LPCSTR lpString1,LPCSTR lpString2,int nChar);
     85   LWSTDAPI_(WINBOOL) StrIsIntlEqualW(WINBOOL fCaseSens,LPCWSTR lpString1,LPCWSTR lpString2,int nChar);
     86   LWSTDAPI_(LPSTR) StrNCatA(LPSTR psz1,LPCSTR psz2,int cchMax);
     87   LWSTDAPI_(LPWSTR) StrNCatW(LPWSTR psz1,LPCWSTR psz2,int cchMax);
     88   LWSTDAPI_(LPSTR) StrPBrkA(LPCSTR psz,LPCSTR pszSet);
     89   LWSTDAPI_(LPWSTR) StrPBrkW(LPCWSTR psz,LPCWSTR pszSet);
     90   LWSTDAPI_(LPSTR) StrRChrA(LPCSTR lpStart,LPCSTR lpEnd,WORD wMatch);
     91   LWSTDAPI_(LPWSTR) StrRChrW(LPCWSTR lpStart,LPCWSTR lpEnd,WCHAR wMatch);
     92   LWSTDAPI_(LPSTR) StrRChrIA(LPCSTR lpStart,LPCSTR lpEnd,WORD wMatch);
     93   LWSTDAPI_(LPWSTR) StrRChrIW(LPCWSTR lpStart,LPCWSTR lpEnd,WCHAR wMatch);
     94   LWSTDAPI_(LPSTR) StrRStrIA(LPCSTR lpSource,LPCSTR lpLast,LPCSTR lpSrch);
     95   LWSTDAPI_(LPWSTR) StrRStrIW(LPCWSTR lpSource,LPCWSTR lpLast,LPCWSTR lpSrch);
     96   LWSTDAPI_(int) StrSpnA(LPCSTR psz,LPCSTR pszSet);
     97   LWSTDAPI_(int) StrSpnW(LPCWSTR psz,LPCWSTR pszSet);
     98   LWSTDAPI_(LPSTR) StrStrA(LPCSTR lpFirst,LPCSTR lpSrch);
     99   LWSTDAPI_(LPWSTR) StrStrW(LPCWSTR lpFirst,LPCWSTR lpSrch);
    100   LWSTDAPI_(LPSTR) StrStrIA(LPCSTR lpFirst,LPCSTR lpSrch);
    101   LWSTDAPI_(LPWSTR) StrStrIW(LPCWSTR lpFirst,LPCWSTR lpSrch);
    102   LWSTDAPI_(PCWSTR) StrStrNW(PCWSTR pszFirst, PCWSTR pszSrch, UINT cchMax);
    103   LWSTDAPI_(PCWSTR) StrStrNIW(PCWSTR pszFirst, PCWSTR pszSrch, UINT cchMax);
    104   LWSTDAPI_(int) StrToIntA(LPCSTR lpSrc);
    105   LWSTDAPI_(int) StrToIntW(LPCWSTR lpSrc);
    106 
    107 #define STIF_DEFAULT __MSABI_LONG(0x00000000)
    108 #define STIF_SUPPORT_HEX __MSABI_LONG(0x00000001)
    109   typedef int STIF_FLAGS;
    110 
    111   LWSTDAPI_(WINBOOL) StrToIntExA(LPCSTR pszString,STIF_FLAGS dwFlags,int *piRet);
    112   LWSTDAPI_(WINBOOL) StrToIntExW(LPCWSTR pszString,STIF_FLAGS dwFlags,int *piRet);
    113 #if (_WIN32_IE >= 0x0600)
    114   LWSTDAPI_(WINBOOL) StrToInt64ExA(LPCSTR pszString,STIF_FLAGS dwFlags,LONGLONG *pllRet);
    115   LWSTDAPI_(WINBOOL) StrToInt64ExW(LPCWSTR pszString,STIF_FLAGS dwFlags,LONGLONG *pllRet);
    116 #endif
    117   LWSTDAPI_(WINBOOL) StrTrimA(LPSTR psz,LPCSTR pszTrimChars);
    118   LWSTDAPI_(WINBOOL) StrTrimW(LPWSTR psz,LPCWSTR pszTrimChars);
    119   LWSTDAPI_(LPWSTR) StrCatW(LPWSTR psz1,LPCWSTR psz2);
    120   LWSTDAPI_(int) StrCmpW(LPCWSTR psz1,LPCWSTR psz2);
    121   LWSTDAPI_(int) StrCmpIW(LPCWSTR psz1,LPCWSTR psz2);
    122   LWSTDAPI_(LPWSTR) StrCpyW(LPWSTR psz1,LPCWSTR psz2);
    123   LWSTDAPI_(LPWSTR) StrCpyNW(LPWSTR psz1,LPCWSTR psz2,int cchMax);
    124   LWSTDAPI_(LPWSTR) StrCatBuffW(LPWSTR pszDest,LPCWSTR pszSrc,int cchDestBuffSize);
    125   LWSTDAPI_(LPSTR) StrCatBuffA(LPSTR pszDest,LPCSTR pszSrc,int cchDestBuffSize);
    126   LWSTDAPI_(WINBOOL) ChrCmpIA(WORD w1,WORD w2);
    127   LWSTDAPI_(WINBOOL) ChrCmpIW(WCHAR w1,WCHAR w2);
    128   LWSTDAPI_(int) wvnsprintfA(LPSTR lpOut,int cchLimitIn,LPCSTR lpFmt,va_list arglist);
    129   LWSTDAPI_(int) wvnsprintfW(LPWSTR lpOut,int cchLimitIn,LPCWSTR lpFmt,va_list arglist);
    130   LWSTDAPIV_(int) wnsprintfA(LPSTR lpOut,int cchLimitIn,LPCSTR lpFmt,...);
    131   LWSTDAPIV_(int) wnsprintfW(LPWSTR lpOut,int cchLimitIn,LPCWSTR lpFmt,...);
    132 
    133 #define StrIntlEqNA(s1,s2,nChar) StrIsIntlEqualA(TRUE,s1,s2,nChar)
    134 #define StrIntlEqNW(s1,s2,nChar) StrIsIntlEqualW(TRUE,s1,s2,nChar)
    135 #define StrIntlEqNIA(s1,s2,nChar) StrIsIntlEqualA(FALSE,s1,s2,nChar)
    136 #define StrIntlEqNIW(s1,s2,nChar) StrIsIntlEqualW(FALSE,s1,s2,nChar)
    137 
    138 #define StrRetToStr __MINGW_NAME_AW(StrRetToStr)
    139 #define StrRetToBuf __MINGW_NAME_AW(StrRetToBuf)
    140 #define SHStrDup __MINGW_NAME_AW(SHStrDup)
    141 
    142   LWSTDAPI StrRetToStrA(STRRET *pstr,LPCITEMIDLIST pidl,LPSTR *ppsz);
    143   LWSTDAPI StrRetToStrW(STRRET *pstr,LPCITEMIDLIST pidl,LPWSTR *ppsz);
    144   LWSTDAPI StrRetToBufA(STRRET *pstr,LPCITEMIDLIST pidl,LPSTR pszBuf,UINT cchBuf);
    145   LWSTDAPI StrRetToBufW(STRRET *pstr,LPCITEMIDLIST pidl,LPWSTR pszBuf,UINT cchBuf);
    146   LWSTDAPI StrRetToBSTR(STRRET *pstr,LPCITEMIDLIST pidl,BSTR *pbstr);
    147   LWSTDAPI SHStrDupA(LPCSTR psz,WCHAR **ppwsz);
    148   LWSTDAPI SHStrDupW(LPCWSTR psz,WCHAR **ppwsz);
    149 
    150 #ifdef __cplusplus
    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
    510 LWSTDAPI PathMatchSpecExA(LPCSTR pszFile, LPCSTR pszSpec, DWORD dwFlags);
    511 LWSTDAPI PathMatchSpecExW(LPCWSTR pszFile, LPCWSTR pszSpec, DWORD dwFlags);
    512 #endif
    513 
    514 #define PathMatchSpecEx __MINGW_NAME_AW(PathMatchSpecEx)
    515 
    516 #define PathParseIconLocation __MINGW_NAME_AW(PathParseIconLocation)
    517 #define PathAppend __MINGW_NAME_AW(PathAppend)
    518 #define PathCanonicalize __MINGW_NAME_AW(PathCanonicalize)
    519 #define PathCompactPath __MINGW_NAME_AW(PathCompactPath)
    520 #define PathCompactPathEx __MINGW_NAME_AW(PathCompactPathEx)
    521 #define PathCommonPrefix __MINGW_NAME_AW(PathCommonPrefix)
    522 #define PathFindOnPath __MINGW_NAME_AW(PathFindOnPath)
    523 #define PathGetCharType __MINGW_NAME_AW(PathGetCharType)
    524 #define PathIsContentType __MINGW_NAME_AW(PathIsContentType)
    525 #define PathIsHTMLFile __MINGW_NAME_AW(PathIsHTMLFile)
    526 #define PathMakePretty __MINGW_NAME_AW(PathMakePretty)
    527 #define PathMatchSpec __MINGW_NAME_AW(PathMatchSpec)
    528 #define PathQuoteSpaces __MINGW_NAME_AW(PathQuoteSpaces)
    529 #define PathRelativePathTo __MINGW_NAME_AW(PathRelativePathTo)
    530 #define PathRemoveArgs __MINGW_NAME_AW(PathRemoveArgs)
    531 #define PathRemoveBlanks __MINGW_NAME_AW(PathRemoveBlanks)
    532 #define PathRemoveExtension __MINGW_NAME_AW(PathRemoveExtension)
    533 #define PathRemoveFileSpec __MINGW_NAME_AW(PathRemoveFileSpec)
    534 #define PathRenameExtension __MINGW_NAME_AW(PathRenameExtension)
    535 #define PathSearchAndQualify __MINGW_NAME_AW(PathSearchAndQualify)
    536 #define PathSetDlgItemPath __MINGW_NAME_AW(PathSetDlgItemPath)
    537 #define PathUnquoteSpaces __MINGW_NAME_AW(PathUnquoteSpaces)
    538 
    539   typedef enum {
    540     URL_SCHEME_INVALID = -1,
    541     URL_SCHEME_UNKNOWN = 0,
    542     URL_SCHEME_FTP,
    543     URL_SCHEME_HTTP,
    544     URL_SCHEME_GOPHER,
    545     URL_SCHEME_MAILTO,
    546     URL_SCHEME_NEWS,
    547     URL_SCHEME_NNTP,
    548     URL_SCHEME_TELNET,
    549     URL_SCHEME_WAIS,
    550     URL_SCHEME_FILE,
    551     URL_SCHEME_MK,
    552     URL_SCHEME_HTTPS,
    553     URL_SCHEME_SHELL,
    554     URL_SCHEME_SNEWS,
    555     URL_SCHEME_LOCAL,
    556     URL_SCHEME_JAVASCRIPT,
    557     URL_SCHEME_VBSCRIPT,
    558     URL_SCHEME_ABOUT,
    559     URL_SCHEME_RES,
    560 #if (_WIN32_IE >= _WIN32_IE_IE60)
    561     URL_SCHEME_MSSHELLROOTED,
    562     URL_SCHEME_MSSHELLIDLIST,
    563     URL_SCHEME_MSHELP,
    564 #endif
    565 #if (_WIN32_IE >= _WIN32_IE_IE70)
    566     URL_SCHEME_MSSHELLDEVICE,
    567     URL_SCHEME_WILDCARD,
    568 #endif
    569 #if (NTDDI_VERSION >= NTDDI_VISTA)
    570     URL_SCHEME_SEARCH_MS,
    571 #endif
    572 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
    573     URL_SCHEME_SEARCH,
    574 #endif
    575 #if (NTDDI_VERSION >= NTDDI_WIN7)
    576     URL_SCHEME_KNOWNFOLDER,
    577 #endif
    578     URL_SCHEME_MAXVALUE
    579   } URL_SCHEME;
    580 
    581   typedef enum {
    582     URL_PART_NONE = 0,URL_PART_SCHEME = 1,URL_PART_HOSTNAME,URL_PART_USERNAME,URL_PART_PASSWORD,URL_PART_PORT,URL_PART_QUERY
    583   } URL_PART;
    584 
    585   typedef enum {
    586     URLIS_URL,URLIS_OPAQUE,URLIS_NOHISTORY,URLIS_FILEURL,URLIS_APPLIABLE,URLIS_DIRECTORY,URLIS_HASQUERY
    587   } URLIS;
    588 
    589 #define URL_UNESCAPE 0x10000000
    590 #define URL_ESCAPE_UNSAFE 0x20000000
    591 #define URL_PLUGGABLE_PROTOCOL 0x40000000
    592 #define URL_WININET_COMPATIBILITY 0x80000000
    593 #define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
    594 #define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
    595 #define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO
    596 #define URL_ESCAPE_SPACES_ONLY 0x04000000
    597 #define URL_DONT_SIMPLIFY 0x08000000
    598 #define URL_NO_META URL_DONT_SIMPLIFY
    599 #define URL_UNESCAPE_INPLACE 0x00100000
    600 #define URL_CONVERT_IF_DOSPATH 0x00200000
    601 #define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
    602 #define URL_INTERNAL_PATH 0x00800000
    603 #define URL_FILE_USE_PATHURL 0x00010000
    604 #if _WIN32_IE >= _WIN32_IE_IE60SP2
    605 #define URL_DONT_UNESCAPE 0x00020000
    606 #endif
    607 #if NTDDI_VERSION >= NTDDI_WIN7
    608 #define URL_ESCAPE_AS_UTF8 0x00040000
    609 #endif
    610 #if NTDDI_VERSION >= NTDDI_WIN8
    611 #define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8
    612 #define URL_ESCAPE_ASCII_URI_COMPONENT 0x00080000
    613 #define URL_ESCAPE_URI_COMPONENT (URL_ESCAPE_ASCII_URI_COMPONENT | URL_ESCAPE_AS_UTF8)
    614 #define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8
    615 #endif
    616 #define URL_ESCAPE_PERCENT 0x00001000
    617 #define URL_ESCAPE_SEGMENT_ONLY 0x00002000
    618 
    619 #define URL_PARTFLAG_KEEPSCHEME 0x00000001
    620 
    621 #define URL_APPLY_DEFAULT 0x00000001
    622 #define URL_APPLY_GUESSSCHEME 0x00000002
    623 #define URL_APPLY_GUESSFILE 0x00000004
    624 #define URL_APPLY_FORCEAPPLY 0x00000008
    625 
    626   LWSTDAPI_(int) UrlCompareA(LPCSTR psz1,LPCSTR psz2,WINBOOL fIgnoreSlash);
    627   LWSTDAPI_(int) UrlCompareW(LPCWSTR psz1,LPCWSTR psz2,WINBOOL fIgnoreSlash);
    628   LWSTDAPI UrlCombineA(LPCSTR pszBase,LPCSTR pszRelative,LPSTR pszCombined,LPDWORD pcchCombined,DWORD dwFlags);
    629   LWSTDAPI UrlCombineW(LPCWSTR pszBase,LPCWSTR pszRelative,LPWSTR pszCombined,LPDWORD pcchCombined,DWORD dwFlags);
    630   LWSTDAPI UrlCanonicalizeA(LPCSTR pszUrl,LPSTR pszCanonicalized,LPDWORD pcchCanonicalized,DWORD dwFlags);
    631   LWSTDAPI UrlCanonicalizeW(LPCWSTR pszUrl,LPWSTR pszCanonicalized,LPDWORD pcchCanonicalized,DWORD dwFlags);
    632   LWSTDAPI_(WINBOOL) UrlIsOpaqueA(LPCSTR pszURL);
    633   LWSTDAPI_(WINBOOL) UrlIsOpaqueW(LPCWSTR pszURL);
    634   LWSTDAPI_(WINBOOL) UrlIsNoHistoryA(LPCSTR pszURL);
    635   LWSTDAPI_(WINBOOL) UrlIsNoHistoryW(LPCWSTR pszURL);
    636 #define UrlIsFileUrlA(pszURL) UrlIsA(pszURL,URLIS_FILEURL)
    637 #define UrlIsFileUrlW(pszURL) UrlIsW(pszURL,URLIS_FILEURL)
    638   LWSTDAPI_(WINBOOL) UrlIsA(LPCSTR pszUrl,URLIS UrlIs);
    639   LWSTDAPI_(WINBOOL) UrlIsW(LPCWSTR pszUrl,URLIS UrlIs);
    640   LWSTDAPI_(LPCSTR) UrlGetLocationA(LPCSTR psz1);
    641   LWSTDAPI_(LPCWSTR) UrlGetLocationW(LPCWSTR psz1);
    642   LWSTDAPI UrlUnescapeA(LPSTR pszUrl,LPSTR pszUnescaped,LPDWORD pcchUnescaped,DWORD dwFlags);
    643   LWSTDAPI UrlUnescapeW(LPWSTR pszUrl,LPWSTR pszUnescaped,LPDWORD pcchUnescaped,DWORD dwFlags);
    644   LWSTDAPI UrlEscapeA(LPCSTR pszUrl,LPSTR pszEscaped,LPDWORD pcchEscaped,DWORD dwFlags);
    645   LWSTDAPI UrlEscapeW(LPCWSTR pszUrl,LPWSTR pszEscaped,LPDWORD pcchEscaped,DWORD dwFlags);
    646   LWSTDAPI UrlCreateFromPathA(LPCSTR pszPath,LPSTR pszUrl,LPDWORD pcchUrl,DWORD dwFlags);
    647   LWSTDAPI UrlCreateFromPathW(LPCWSTR pszPath,LPWSTR pszUrl,LPDWORD pcchUrl,DWORD dwFlags);
    648   LWSTDAPI PathCreateFromUrlA(LPCSTR pszUrl,LPSTR pszPath,LPDWORD pcchPath,DWORD dwFlags);
    649   LWSTDAPI PathCreateFromUrlW(LPCWSTR pszUrl,LPWSTR pszPath,LPDWORD pcchPath,DWORD dwFlags);
    650 #if (_WIN32_IE >= _WIN32_IE_IE70)
    651   LWSTDAPI PathCreateFromUrlAlloc(PCWSTR pszIn, PWSTR *ppszOut, DWORD dwFlags);
    652 #endif
    653   LWSTDAPI UrlHashA(LPCSTR pszUrl,LPBYTE pbHash,DWORD cbHash);
    654   LWSTDAPI UrlHashW(LPCWSTR pszUrl,LPBYTE pbHash,DWORD cbHash);
    655   LWSTDAPI UrlGetPartW(LPCWSTR pszIn,LPWSTR pszOut,LPDWORD pcchOut,DWORD dwPart,DWORD dwFlags);
    656   LWSTDAPI UrlGetPartA(LPCSTR pszIn,LPSTR pszOut,LPDWORD pcchOut,DWORD dwPart,DWORD dwFlags);
    657   LWSTDAPI UrlApplySchemeA(LPCSTR pszIn,LPSTR pszOut,LPDWORD pcchOut,DWORD dwFlags);
    658   LWSTDAPI UrlApplySchemeW(LPCWSTR pszIn,LPWSTR pszOut,LPDWORD pcchOut,DWORD dwFlags);
    659   LWSTDAPI HashData(LPBYTE pbData,DWORD cbData,LPBYTE pbHash,DWORD cbHash);
    660   LWSTDAPI UrlFixupW(PCWSTR pcszUrl, PWSTR pszTranslatedUrl, DWORD cchMax);
    661 #if defined(UNICODE)
    662 #define UrlFixup UrlFixupW
    663 #endif
    664 
    665 #define UrlCompare __MINGW_NAME_AW(UrlCompare)
    666 #define UrlCombine __MINGW_NAME_AW(UrlCombine)
    667 #define UrlCanonicalize __MINGW_NAME_AW(UrlCanonicalize)
    668 #define UrlIsOpaque __MINGW_NAME_AW(UrlIsOpaque)
    669 #define UrlIsFileUrl __MINGW_NAME_AW(UrlIsFileUrl)
    670 #define UrlGetLocation __MINGW_NAME_AW(UrlGetLocation)
    671 #define UrlUnescape __MINGW_NAME_AW(UrlUnescape)
    672 #define UrlEscape __MINGW_NAME_AW(UrlEscape)
    673 #define UrlCreateFromPath __MINGW_NAME_AW(UrlCreateFromPath)
    674 #define PathCreateFromUrl __MINGW_NAME_AW(PathCreateFromUrl)
    675 #define UrlHash __MINGW_NAME_AW(UrlHash)
    676 #define UrlGetPart __MINGW_NAME_AW(UrlGetPart)
    677 #define UrlApplyScheme __MINGW_NAME_AW(UrlApplyScheme)
    678 #define UrlIs __MINGW_NAME_AW(UrlIs)
    679 
    680 #define UrlEscapeSpaces(pszUrl,pszEscaped,pcchEscaped) UrlCanonicalize(pszUrl,pszEscaped,pcchEscaped,URL_ESCAPE_SPACES_ONLY |URL_DONT_ESCAPE_EXTRA_INFO)
    681 #define UrlUnescapeInPlace(pszUrl,dwFlags) UrlUnescape(pszUrl,NULL,NULL,dwFlags | URL_UNESCAPE_INPLACE)
    682 
    683   typedef struct tagPARSEDURLA {
    684     DWORD     cbSize;
    685     LPCSTR    pszProtocol;
    686     UINT      cchProtocol;
    687     LPCSTR    pszSuffix;
    688     UINT      cchSuffix;
    689     UINT      nScheme;
    690   } PARSEDURLA, *PPARSEDURLA;
    691 
    692   typedef struct tagPARSEDURLW {
    693     DWORD     cbSize;
    694     LPCWSTR   pszProtocol;
    695     UINT      cchProtocol;
    696     LPCWSTR   pszSuffix;
    697     UINT      cchSuffix;
    698     UINT      nScheme;
    699    } PARSEDURLW, *PPARSEDURLW;
    700 
    701   LWSTDAPI ParseURLA(LPCSTR pcszURL, PARSEDURLA *ppu);
    702   LWSTDAPI ParseURLW(LPCWSTR pcszURL, PARSEDURLW *ppu);
    703 
    704 #if defined(UNICODE)
    705 #define ParseURL  ParseURLW
    706   typedef PARSEDURLW PARSEDURL;
    707   typedef PPARSEDURLW PPARSEDURL;
    708 #else
    709 #define ParseURL  ParseURLA
    710   typedef PARSEDURLA PARSEDURL;
    711   typedef PPARSEDURLA PPARSEDURL;
    712 #endif
    713 
    714 #endif
    715 
    716 #ifndef NO_SHLWAPI_REG
    717 
    718   LWSTDAPI_(DWORD) SHDeleteEmptyKeyA(HKEY hkey,LPCSTR pszSubKey);
    719   LWSTDAPI_(DWORD) SHDeleteEmptyKeyW(HKEY hkey,LPCWSTR pszSubKey);
    720 
    721 #define SHDeleteEmptyKey __MINGW_NAME_AW(SHDeleteEmptyKey)
    722 
    723   LWSTDAPI_(DWORD) SHDeleteKeyA(HKEY hkey,LPCSTR pszSubKey);
    724   LWSTDAPI_(DWORD) SHDeleteKeyW(HKEY hkey,LPCWSTR pszSubKey);
    725 
    726 #define SHDeleteKey __MINGW_NAME_AW(SHDeleteKey)
    727 
    728   LWSTDAPI_(HKEY) SHRegDuplicateHKey(HKEY hkey);
    729 
    730   LWSTDAPI_(DWORD) SHDeleteValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue);
    731   LWSTDAPI_(DWORD) SHDeleteValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue);
    732 
    733 #define SHDeleteValue __MINGW_NAME_AW(SHDeleteValue)
    734 
    735   LWSTDAPI_(DWORD) SHGetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD *pdwType,void *pvData,DWORD *pcbData);
    736   LWSTDAPI_(DWORD) SHGetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,DWORD *pdwType,void *pvData,DWORD *pcbData);
    737 
    738 #define SHGetValue __MINGW_NAME_AW(SHGetValue)
    739 
    740   LWSTDAPI_(DWORD) SHSetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD dwType,LPCVOID pvData,DWORD cbData);
    741   LWSTDAPI_(DWORD) SHSetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,DWORD dwType,LPCVOID pvData,DWORD cbData);
    742 
    743 #define SHSetValue __MINGW_NAME_AW(SHSetValue)
    744 
    745 #if (_WIN32_IE >= 0x0602)
    746 
    747   typedef DWORD SRRF;
    748 
    749 #define SRRF_RT_REG_NONE 0x00000001
    750 #define SRRF_RT_REG_SZ 0x00000002
    751 #define SRRF_RT_REG_EXPAND_SZ 0x00000004
    752 #define SRRF_RT_REG_BINARY 0x00000008
    753 #define SRRF_RT_REG_DWORD 0x00000010
    754 #define SRRF_RT_REG_MULTI_SZ 0x00000020
    755 #define SRRF_RT_REG_QWORD 0x00000040
    756 
    757 #define SRRF_RT_DWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_DWORD)
    758 #define SRRF_RT_QWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_QWORD)
    759 #define SRRF_RT_ANY 0x0000ffff
    760 
    761 #define SRRF_RM_ANY 0x00000000
    762 #define SRRF_RM_NORMAL 0x00010000
    763 #define SRRF_RM_SAFE 0x00020000
    764 #define SRRF_RM_SAFENETWORK 0x00040000
    765 
    766 #define SRRF_NOEXPAND 0x10000000
    767 #define SRRF_ZEROONFAILURE 0x20000000
    768 #define SRRF_NOVIRT 0x40000000
    769 
    770   LWSTDAPI_(LONG) SHRegGetValueA(HKEY hkey,LPCSTR pszSubKey,LPCSTR pszValue,SRRF dwFlags,DWORD *pdwType,void *pvData,DWORD *pcbData);
    771   LWSTDAPI_(LONG) SHRegGetValueW(HKEY hkey,LPCWSTR pszSubKey,LPCWSTR pszValue,SRRF dwFlags,DWORD *pdwType,void *pvData,DWORD *pcbData);
    772 
    773 #define SHRegGetValue __MINGW_NAME_AW(SHRegGetValue)
    774 
    775   LWSTDAPI_(LSTATUS) SHRegSetValue(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue, SRRF srrfFlags,
    776                                         DWORD dwType, LPCVOID pvData, DWORD cbData);
    777 
    778   LWSTDAPI_(LSTATUS) SHRegGetValueFromHKCUHKLM(PCWSTR pwszKey, PCWSTR pwszValue, SRRF srrfFlags,
    779                                         DWORD *pdwType, void *pvData, DWORD * pcbData);
    780   STDAPI_(WINBOOL) SHRegGetBoolValueFromHKCUHKLM(PCWSTR pszKey, PCWSTR pszValue, WINBOOL fDefault);
    781 #endif
    782 
    783 #define SHQueryValueEx __MINGW_NAME_AW(SHQueryValueEx)
    784 #define SHEnumKeyEx __MINGW_NAME_AW(SHEnumKeyEx)
    785 #define SHEnumValue __MINGW_NAME_AW(SHEnumValue)
    786 #define SHQueryInfoKey __MINGW_NAME_AW(SHQueryInfoKey)
    787 #define SHCopyKey __MINGW_NAME_AW(SHCopyKey)
    788 #define SHRegGetPath __MINGW_NAME_AW(SHRegGetPath)
    789 #define SHRegSetPath __MINGW_NAME_AW(SHRegSetPath)
    790 
    791   LWSTDAPI_(DWORD) SHQueryValueExA(HKEY hkey,LPCSTR pszValue,DWORD *pdwReserved,DWORD *pdwType,void *pvData,DWORD *pcbData);
    792   LWSTDAPI_(DWORD) SHQueryValueExW(HKEY hkey,LPCWSTR pszValue,DWORD *pdwReserved,DWORD *pdwType,void *pvData,DWORD *pcbData);
    793   LWSTDAPI_(LONG) SHEnumKeyExA(HKEY hkey,DWORD dwIndex,LPSTR pszName,LPDWORD pcchName);
    794   LWSTDAPI_(LONG) SHEnumKeyExW(HKEY hkey,DWORD dwIndex,LPWSTR pszName,LPDWORD pcchName);
    795   LWSTDAPI_(LONG) SHEnumValueA(HKEY hkey,DWORD dwIndex,LPSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData);
    796   LWSTDAPI_(LONG) SHEnumValueW(HKEY hkey,DWORD dwIndex,LPWSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData);
    797   LWSTDAPI_(LONG) SHQueryInfoKeyA(HKEY hkey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen);
    798   LWSTDAPI_(LONG) SHQueryInfoKeyW(HKEY hkey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen);
    799   LWSTDAPI_(DWORD) SHCopyKeyA(HKEY hkeySrc,LPCSTR szSrcSubKey,HKEY hkeyDest,DWORD fReserved);
    800   LWSTDAPI_(DWORD) SHCopyKeyW(HKEY hkeySrc,LPCWSTR wszSrcSubKey,HKEY hkeyDest,DWORD fReserved);
    801   LWSTDAPI_(DWORD) SHRegGetPathA(HKEY hKey,LPCSTR pcszSubKey,LPCSTR pcszValue,LPSTR pszPath,DWORD dwFlags);
    802   LWSTDAPI_(DWORD) SHRegGetPathW(HKEY hKey,LPCWSTR pcszSubKey,LPCWSTR pcszValue,LPWSTR pszPath,DWORD dwFlags);
    803   LWSTDAPI_(DWORD) SHRegSetPathA(HKEY hKey,LPCSTR pcszSubKey,LPCSTR pcszValue,LPCSTR pcszPath,DWORD dwFlags);
    804   LWSTDAPI_(DWORD) SHRegSetPathW(HKEY hKey,LPCWSTR pcszSubKey,LPCWSTR pcszValue,LPCWSTR pcszPath,DWORD dwFlags);
    805 
    806   typedef enum {
    807     SHREGDEL_DEFAULT = 0x00000000,SHREGDEL_HKCU = 0x00000001,SHREGDEL_HKLM = 0x00000010,SHREGDEL_BOTH = 0x00000011
    808   } SHREGDEL_FLAGS;
    809 
    810   typedef enum {
    811     SHREGENUM_DEFAULT = 0x00000000,SHREGENUM_HKCU = 0x00000001,SHREGENUM_HKLM = 0x00000010,SHREGENUM_BOTH = 0x00000011
    812   } SHREGENUM_FLAGS;
    813 
    814 #define SHREGSET_HKCU 0x00000001
    815 #define SHREGSET_FORCE_HKCU 0x00000002
    816 #define SHREGSET_HKLM 0x00000004
    817 #define SHREGSET_FORCE_HKLM 0x00000008
    818 #define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
    819 
    820   typedef HANDLE HUSKEY;
    821   typedef HUSKEY *PHUSKEY;
    822 
    823   LWSTDAPI_(LONG) SHRegCreateUSKeyA(LPCSTR pszPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,DWORD dwFlags);
    824   LWSTDAPI_(LONG) SHRegCreateUSKeyW(LPCWSTR pwzPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,DWORD dwFlags);
    825   LWSTDAPI_(LONG) SHRegOpenUSKeyA(LPCSTR pszPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,WINBOOL fIgnoreHKCU);
    826   LWSTDAPI_(LONG) SHRegOpenUSKeyW(LPCWSTR pwzPath,REGSAM samDesired,HUSKEY hRelativeUSKey,PHUSKEY phNewUSKey,WINBOOL fIgnoreHKCU);
    827   LWSTDAPI_(LONG) SHRegQueryUSValueA(HUSKEY hUSKey,LPCSTR pszValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
    828   LWSTDAPI_(LONG) SHRegQueryUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
    829   LWSTDAPI_(LONG) SHRegWriteUSValueA(HUSKEY hUSKey,LPCSTR pszValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
    830   LWSTDAPI_(LONG) SHRegWriteUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
    831   LWSTDAPI_(LONG) SHRegDeleteUSValueA(HUSKEY hUSKey,LPCSTR pszValue,SHREGDEL_FLAGS delRegFlags);
    832   LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyW(HUSKEY hUSKey,LPCWSTR pwzSubKey,SHREGDEL_FLAGS delRegFlags);
    833   LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyA(HUSKEY hUSKey,LPCSTR pszSubKey,SHREGDEL_FLAGS delRegFlags);
    834   LWSTDAPI_(LONG) SHRegDeleteUSValueW(HUSKEY hUSKey,LPCWSTR pwzValue,SHREGDEL_FLAGS delRegFlags);
    835   LWSTDAPI_(LONG) SHRegEnumUSKeyA(HUSKEY hUSKey,DWORD dwIndex,LPSTR pszName,LPDWORD pcchName,SHREGENUM_FLAGS enumRegFlags);
    836   LWSTDAPI_(LONG) SHRegEnumUSKeyW(HUSKEY hUSKey,DWORD dwIndex,LPWSTR pwzName,LPDWORD pcchName,SHREGENUM_FLAGS enumRegFlags);
    837   LWSTDAPI_(LONG) SHRegEnumUSValueA(HUSKEY hUSkey,DWORD dwIndex,LPSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData,SHREGENUM_FLAGS enumRegFlags);
    838   LWSTDAPI_(LONG) SHRegEnumUSValueW(HUSKEY hUSkey,DWORD dwIndex,LPWSTR pszValueName,LPDWORD pcchValueName,LPDWORD pdwType,void *pvData,LPDWORD pcbData,SHREGENUM_FLAGS enumRegFlags);
    839   LWSTDAPI_(LONG) SHRegQueryInfoUSKeyA(HUSKEY hUSKey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen,SHREGENUM_FLAGS enumRegFlags);
    840   LWSTDAPI_(LONG) SHRegQueryInfoUSKeyW(HUSKEY hUSKey,LPDWORD pcSubKeys,LPDWORD pcchMaxSubKeyLen,LPDWORD pcValues,LPDWORD pcchMaxValueNameLen,SHREGENUM_FLAGS enumRegFlags);
    841   LWSTDAPI_(LONG) SHRegCloseUSKey(HUSKEY hUSKey);
    842   LWSTDAPI_(LONG) SHRegGetUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
    843   LWSTDAPI_(LONG) SHRegGetUSValueW(LPCWSTR pwzSubKey,LPCWSTR pwzValue,LPDWORD pdwType,void *pvData,LPDWORD pcbData,WINBOOL fIgnoreHKCU,void *pvDefaultData,DWORD dwDefaultDataSize);
    844   LWSTDAPI_(LONG) SHRegSetUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
    845   LWSTDAPI_(LONG) SHRegSetUSValueW(LPCWSTR pwzSubKey,LPCWSTR pwzValue,DWORD dwType,const void *pvData,DWORD cbData,DWORD dwFlags);
    846   LWSTDAPI_(int) SHRegGetIntW(HKEY hk,LPCWSTR pwzKey,int iDefault);
    847 
    848 #define SHRegCreateUSKey __MINGW_NAME_AW(SHRegCreateUSKey)
    849 #define SHRegOpenUSKey __MINGW_NAME_AW(SHRegOpenUSKey)
    850 #define SHRegQueryUSValue __MINGW_NAME_AW(SHRegQueryUSValue)
    851 #define SHRegWriteUSValue __MINGW_NAME_AW(SHRegWriteUSValue)
    852 #define SHRegDeleteUSValue __MINGW_NAME_AW(SHRegDeleteUSValue)
    853 #define SHRegDeleteEmptyUSKey __MINGW_NAME_AW(SHRegDeleteEmptyUSKey)
    854 #define SHRegEnumUSKey __MINGW_NAME_AW(SHRegEnumUSKey)
    855 #define SHRegEnumUSValue __MINGW_NAME_AW(SHRegEnumUSValue)
    856 #define SHRegQueryInfoUSKey __MINGW_NAME_AW(SHRegQueryInfoUSKey)
    857 #define SHRegGetUSValue __MINGW_NAME_AW(SHRegGetUSValue)
    858 #define SHRegSetUSValue __MINGW_NAME_AW(SHRegSetUSValue)
    859 #define SHRegGetInt __MINGW_NAME_AW(SHRegGetInt)
    860 #define SHRegGetBoolUSValue __MINGW_NAME_AW(SHRegGetBoolUSValue)
    861 
    862   LWSTDAPI_(WINBOOL) SHRegGetBoolUSValueA(LPCSTR pszSubKey,LPCSTR pszValue,WINBOOL fIgnoreHKCU,WINBOOL fDefault);
    863   LWSTDAPI_(WINBOOL) SHRegGetBoolUSValueW(LPCWSTR pszSubKey,LPCWSTR pszValue,WINBOOL fIgnoreHKCU,WINBOOL fDefault);
    864 
    865   enum {
    866     ASSOCF_NONE = 0x00000000,
    867     ASSOCF_INIT_NOREMAPCLSID = 0x00000001,
    868     ASSOCF_INIT_BYEXENAME = 0x00000002,
    869     ASSOCF_OPEN_BYEXENAME = 0x00000002,
    870     ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004,
    871     ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008,
    872     ASSOCF_NOUSERSETTINGS = 0x00000010,
    873     ASSOCF_NOTRUNCATE = 0x00000020,
    874     ASSOCF_VERIFY = 0x00000040,
    875     ASSOCF_REMAPRUNDLL = 0x00000080,
    876     ASSOCF_NOFIXUPS = 0x00000100,
    877     ASSOCF_IGNOREBASECLASS = 0x00000200,
    878     ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400
    879 #if NTDDI_VERSION >= NTDDI_WIN8
    880     ,ASSOCF_INIT_FIXED_PROGID = 0x00000800
    881     ,ASSOCF_IS_PROTOCOL = 0x00001000
    882     ,ASSOCF_INIT_FOR_FILE = 0x00002000
    883 #endif
    884 #if NTDDI_VERSION >= NTDDI_WIN10_RS1
    885     ,ASSOCF_IS_FULL_URI = 0x00004000
    886     ,ASSOCF_PER_MACHINE_ONLY = 0x00008000
    887 #endif
    888 #if NTDDI_VERSION >= NTDDI_WIN10_RS4
    889     ,ASSOCF_APP_TO_APP = 0x00010000
    890 #endif
    891   };
    892 
    893   typedef DWORD ASSOCF;
    894 
    895   typedef enum {
    896     ASSOCSTR_COMMAND = 1,
    897     ASSOCSTR_EXECUTABLE,
    898     ASSOCSTR_FRIENDLYDOCNAME,
    899     ASSOCSTR_FRIENDLYAPPNAME,
    900     ASSOCSTR_NOOPEN,
    901     ASSOCSTR_SHELLNEWVALUE,
    902     ASSOCSTR_DDECOMMAND,
    903     ASSOCSTR_DDEIFEXEC,
    904     ASSOCSTR_DDEAPPLICATION,
    905     ASSOCSTR_DDETOPIC,
    906     ASSOCSTR_INFOTIP,
    907     ASSOCSTR_QUICKTIP,
    908     ASSOCSTR_TILEINFO,
    909     ASSOCSTR_CONTENTTYPE,
    910     ASSOCSTR_DEFAULTICON,
    911     ASSOCSTR_SHELLEXTENSION,
    912 #if _WIN32_WINNT >= 0x601
    913     ASSOCSTR_DROPTARGET,
    914     ASSOCSTR_DELEGATEEXECUTE,
    915 #endif
    916     ASSOCSTR_SUPPORTED_URI_PROTOCOLS,
    917 #if (NTDDI_VERSION >= NTDDI_WIN10)
    918     ASSOCSTR_PROGID,
    919     ASSOCSTR_APPID,
    920     ASSOCSTR_APPPUBLISHER,
    921     ASSOCSTR_APPICONREFERENCE,
    922 #endif
    923     ASSOCSTR_MAX
    924   } ASSOCSTR;
    925 
    926   typedef enum {
    927     ASSOCKEY_SHELLEXECCLASS = 1,
    928     ASSOCKEY_APP,
    929     ASSOCKEY_CLASS,
    930     ASSOCKEY_BASECLASS,
    931     ASSOCKEY_MAX
    932   } ASSOCKEY;
    933 
    934   typedef enum {
    935     ASSOCDATA_MSIDESCRIPTOR = 1,
    936     ASSOCDATA_NOACTIVATEHANDLER,
    937     ASSOCDATA_QUERYCLASSSTORE,
    938     ASSOCDATA_HASPERUSERASSOC,
    939     ASSOCDATA_EDITFLAGS,
    940     ASSOCDATA_VALUE,
    941     ASSOCDATA_MAX
    942   } ASSOCDATA;
    943 
    944   typedef enum {
    945     ASSOCENUM_NONE
    946   } ASSOCENUM;
    947 
    948   typedef enum {
    949     FTA_None                    = 0x00000000,
    950     FTA_Exclude                 = 0x00000001,
    951     FTA_Show                    = 0x00000002,
    952     FTA_HasExtension            = 0x00000004,
    953     FTA_NoEdit                  = 0x00000008,
    954     FTA_NoRemove                = 0x00000010,
    955     FTA_NoNewVerb               = 0x00000020,
    956     FTA_NoEditVerb              = 0x00000040,
    957     FTA_NoRemoveVerb            = 0x00000080,
    958     FTA_NoEditDesc              = 0x00000100,
    959     FTA_NoEditIcon              = 0x00000200,
    960     FTA_NoEditDflt              = 0x00000400,
    961     FTA_NoEditVerbCmd           = 0x00000800,
    962     FTA_NoEditVerbExe           = 0x00001000,
    963     FTA_NoDDE                   = 0x00002000,
    964 
    965     FTA_NoEditMIME              = 0x00008000,
    966     FTA_OpenIsSafe              = 0x00010000,
    967     FTA_AlwaysUnsafe            = 0x00020000,
    968 
    969     FTA_NoRecentDocs            = 0x00100000,
    970     FTA_SafeForElevation        = 0x00200000,
    971     FTA_AlwaysUseDirectInvoke   = 0x00400000
    972   } FILETYPEATTRIBUTEFLAGS;
    973 
    974   DEFINE_ENUM_FLAG_OPERATORS(FILETYPEATTRIBUTEFLAGS)
    975 
    976 #undef INTERFACE
    977 #define INTERFACE IQueryAssociations
    978   DECLARE_INTERFACE_(IQueryAssociations,IUnknown) {
    979     BEGIN_INTERFACE
    980 
    981     STDMETHOD (QueryInterface)(THIS_ REFIID riid,void **ppv) PURE;
    982     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
    983     STDMETHOD_(ULONG,Release) (THIS) PURE;
    984     STDMETHOD (Init)(THIS_ ASSOCF flags,LPCWSTR pszAssoc,HKEY hkProgid,HWND hwnd) PURE;
    985     STDMETHOD (GetString)(THIS_ ASSOCF flags,ASSOCSTR str,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut) PURE;
    986     STDMETHOD (GetKey)(THIS_ ASSOCF flags,ASSOCKEY key,LPCWSTR pszExtra,HKEY *phkeyOut) PURE;
    987     STDMETHOD (GetData)(THIS_ ASSOCF flags,ASSOCDATA data,LPCWSTR pszExtra,LPVOID pvOut,DWORD *pcbOut) PURE;
    988     STDMETHOD (GetEnum)(THIS_ ASSOCF flags,ASSOCENUM assocenum,LPCWSTR pszExtra,REFIID riid,LPVOID *ppvOut) PURE;
    989 
    990     END_INTERFACE
    991   };
    992 
    993 #define AssocQueryString __MINGW_NAME_AW(AssocQueryString)
    994 #define AssocQueryStringByKey __MINGW_NAME_AW(AssocQueryStringByKey)
    995 #define AssocQueryKey __MINGW_NAME_AW(AssocQueryKey)
    996 
    997   LWSTDAPI AssocCreate(CLSID clsid,REFIID riid,LPVOID *ppv);
    998   STDAPI_(DWORD) SHGetAssocKeys(IQueryAssociations *pqa, HKEY *rgKeys, DWORD cKeys);
    999   LWSTDAPI AssocQueryStringA(ASSOCF flags,ASSOCSTR str,LPCSTR pszAssoc,LPCSTR pszExtra,LPSTR pszOut,DWORD *pcchOut);
   1000   LWSTDAPI AssocQueryStringW(ASSOCF flags,ASSOCSTR str,LPCWSTR pszAssoc,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut);
   1001   LWSTDAPI AssocQueryStringByKeyA(ASSOCF flags,ASSOCSTR str,HKEY hkAssoc,LPCSTR pszExtra,LPSTR pszOut,DWORD *pcchOut);
   1002   LWSTDAPI AssocQueryStringByKeyW(ASSOCF flags,ASSOCSTR str,HKEY hkAssoc,LPCWSTR pszExtra,LPWSTR pszOut,DWORD *pcchOut);
   1003   LWSTDAPI AssocQueryKeyA(ASSOCF flags,ASSOCKEY key,LPCSTR pszAssoc,LPCSTR pszExtra,HKEY *phkeyOut);
   1004   LWSTDAPI AssocQueryKeyW(ASSOCF flags,ASSOCKEY key,LPCWSTR pszAssoc,LPCWSTR pszExtra,HKEY *phkeyOut);
   1005 
   1006 #if (_WIN32_IE >= 0x0601)
   1007   LWSTDAPI_(WINBOOL) AssocIsDangerous(LPCWSTR pszAssoc);
   1008 #endif
   1009 
   1010 #if (_WIN32_IE >= 0x0603)
   1011   LWSTDAPI AssocGetPerceivedType(LPCWSTR pszExt,PERCEIVED *ptype,PERCEIVEDFLAG *pflag,LPWSTR *ppszType);
   1012 #endif
   1013 
   1014 #endif
   1015 
   1016 #ifndef NO_SHLWAPI_STREAM
   1017 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   1018 
   1019 #ifndef __IStream_FWD_DEFINED__
   1020 #define __IStream_FWD_DEFINED__
   1021   typedef interface IStream IStream;
   1022 #endif
   1023 
   1024 #define SHOpenRegStream __MINGW_NAME_AW(SHOpenRegStream)
   1025 #define SHOpenRegStream2 __MINGW_NAME_AW(SHOpenRegStream2)
   1026 #define SHCreateStreamOnFile __MINGW_NAME_AW(SHCreateStreamOnFile)
   1027 
   1028   LWSTDAPI_(struct IStream *) SHOpenRegStreamA(HKEY hkey,LPCSTR pszSubkey,LPCSTR pszValue,DWORD grfMode);
   1029   LWSTDAPI_(struct IStream *) SHOpenRegStreamW(HKEY hkey,LPCWSTR pszSubkey,LPCWSTR pszValue,DWORD grfMode);
   1030   LWSTDAPI_(struct IStream *) SHOpenRegStream2A(HKEY hkey,LPCSTR pszSubkey,LPCSTR pszValue,DWORD grfMode);
   1031   LWSTDAPI_(struct IStream *) SHOpenRegStream2W(HKEY hkey,LPCWSTR pszSubkey,LPCWSTR pszValue,DWORD grfMode);
   1032 
   1033 #undef SHOpenRegStream
   1034 #define SHOpenRegStream SHOpenRegStream2
   1035   LWSTDAPI SHCreateStreamOnFileA(LPCSTR pszFile,DWORD grfMode,struct IStream **ppstm);
   1036   LWSTDAPI SHCreateStreamOnFileW(LPCWSTR pszFile,DWORD grfMode,struct IStream **ppstm);
   1037 
   1038 #if (_WIN32_IE >= 0x0600)
   1039   LWSTDAPI SHCreateStreamOnFileEx(LPCWSTR pszFile,DWORD grfMode,DWORD dwAttributes,WINBOOL fCreate,struct IStream *pstmTemplate,struct IStream **ppstm);
   1040 #endif
   1041 
   1042   LWSTDAPI_(IStream *) SHCreateMemStream(const BYTE *pInit, UINT cbInit);
   1043 
   1044 #endif
   1045 #endif
   1046 
   1047 #if !defined(NO_SHLWAPI_ISOS)
   1048 #define OS_WINDOWS                  0
   1049 #define OS_NT                       1
   1050 #define OS_WIN95ORGREATER           2
   1051 #define OS_NT4ORGREATER             3
   1052 #define OS_WIN98ORGREATER           5
   1053 #define OS_WIN98_GOLD               6
   1054 #define OS_WIN2000ORGREATER         7
   1055 #define OS_WIN2000PRO               8
   1056 #define OS_WIN2000SERVER            9
   1057 #define OS_WIN2000ADVSERVER         10
   1058 #define OS_WIN2000DATACENTER        11
   1059 #define OS_WIN2000TERMINAL          12
   1060 #define OS_EMBEDDED                 13
   1061 #define OS_TERMINALCLIENT           14
   1062 #define OS_TERMINALREMOTEADMIN      15
   1063 #define OS_WIN95_GOLD               16
   1064 #define OS_MEORGREATER              17
   1065 #define OS_XPORGREATER              18
   1066 #define OS_HOME                     19
   1067 #define OS_PROFESSIONAL             20
   1068 #define OS_DATACENTER               21
   1069 #define OS_ADVSERVER                22
   1070 #define OS_SERVER                   23
   1071 #define OS_TERMINALSERVER           24
   1072 #define OS_PERSONALTERMINALSERVER   25
   1073 #define OS_FASTUSERSWITCHING        26
   1074 #define OS_WELCOMELOGONUI           27
   1075 #define OS_DOMAINMEMBER             28
   1076 #define OS_ANYSERVER                29
   1077 #define OS_WOW6432                  30
   1078 #define OS_WEBSERVER                31
   1079 #define OS_SMALLBUSINESSSERVER      32
   1080 #define OS_TABLETPC                 33
   1081 #define OS_SERVERADMINUI            34
   1082 #define OS_MEDIACENTER              35
   1083 #define OS_APPLIANCE                36
   1084 
   1085   LWSTDAPI_(WINBOOL) IsOS(DWORD dwOS);
   1086 #endif
   1087 
   1088   typedef enum {
   1089     GLOBALCOUNTER_SEARCHMANAGER,
   1090     GLOBALCOUNTER_SEARCHOPTIONS,
   1091     GLOBALCOUNTER_FOLDERSETTINGSCHANGE,
   1092     GLOBALCOUNTER_RATINGS,
   1093     GLOBALCOUNTER_APPROVEDSITES,
   1094     GLOBALCOUNTER_RESTRICTIONS,
   1095     GLOBALCOUNTER_SHELLSETTINGSCHANGED,
   1096     GLOBALCOUNTER_SYSTEMPIDLCHANGE,
   1097     GLOBALCOUNTER_OVERLAYMANAGER,
   1098     GLOBALCOUNTER_QUERYASSOCIATIONS,
   1099     GLOBALCOUNTER_IESESSIONS,
   1100     GLOBALCOUNTER_IEONLY_SESSIONS,
   1101     GLOBALCOUNTER_APPLICATION_DESTINATIONS,
   1102     __UNUSED_RECYCLE_WAS_GLOBALCOUNTER_CSCSYNCINPROGRESS,
   1103     GLOBALCOUNTER_BITBUCKETNUMDELETERS,
   1104     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_SHARES,
   1105     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_A,
   1106     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_B,
   1107     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_C,
   1108     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_D,
   1109     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_E,
   1110     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_F,
   1111     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_G,
   1112     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_H,
   1113     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_I,
   1114     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_J,
   1115     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_K,
   1116     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_L,
   1117     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_M,
   1118     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_N,
   1119     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_O,
   1120     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_P,
   1121     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_Q,
   1122     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_R,
   1123     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_S,
   1124     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_T,
   1125     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_U,
   1126     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_V,
   1127     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_W,
   1128     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_X,
   1129     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_Y,
   1130     GLOBALCOUNTER_RECYCLEDIRTYCOUNT_DRIVE_Z,
   1131     __UNUSED_RECYCLE_WAS_GLOBALCOUNTER_RECYCLEDIRTYCOUNT_SERVERDRIVE,
   1132     __UNUSED_RECYCLE_WAS_GLOBALCOUNTER_RECYCLEGLOBALDIRTYCOUNT,
   1133     GLOBALCOUNTER_RECYCLEBINENUM,
   1134     GLOBALCOUNTER_RECYCLEBINCORRUPTED,
   1135     GLOBALCOUNTER_RATINGS_STATECOUNTER,
   1136     GLOBALCOUNTER_PRIVATE_PROFILE_CACHE,
   1137     GLOBALCOUNTER_INTERNETTOOLBAR_LAYOUT,
   1138     GLOBALCOUNTER_FOLDERDEFINITION_CACHE,
   1139     GLOBALCOUNTER_COMMONPLACES_LIST_CACHE,
   1140     GLOBALCOUNTER_PRIVATE_PROFILE_CACHE_MACHINEWIDE,
   1141     GLOBALCOUNTER_ASSOCCHANGED,
   1142 #if (NTDDI_VERSION >= NTDDI_WIN8)
   1143     GLOBALCOUNTER_APP_ITEMS_STATE_STORE_CACHE,
   1144     GLOBALCOUNTER_SETTINGSYNC_ENABLED,
   1145     GLOBALCOUNTER_APPSFOLDER_FILETYPEASSOCIATION_COUNTER,
   1146     GLOBALCOUNTER_USERINFOCHANGED,
   1147 #if (NTDDI_VERSION >= NTDDI_WINBLUE)
   1148     GLOBALCOUNTER_SYNC_ENGINE_INFORMATION_CACHE_MACHINEWIDE,
   1149 #endif
   1150 #endif
   1151 #if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
   1152     GLOBALCOUNTER_BANNERS_DATAMODEL_CACHE_MACHINEWIDE,
   1153 #endif
   1154     GLOBALCOUNTER_MAXIMUMVALUE
   1155   } SHGLOBALCOUNTER;
   1156 
   1157 #if (NTDDI_VERSION >= NTDDI_WIN7)
   1158   LWSTDAPI_(long) SHGlobalCounterGetValue(const SHGLOBALCOUNTER id);
   1159   LWSTDAPI_(long) SHGlobalCounterIncrement(const SHGLOBALCOUNTER id);
   1160   LWSTDAPI_(long) SHGlobalCounterDecrement(const SHGLOBALCOUNTER id);
   1161 #endif
   1162 
   1163 #if (_WIN32_IE >= 0x0603)
   1164   LWSTDAPI_(HANDLE) SHAllocShared(const void *pvData,DWORD dwSize,DWORD dwProcessId);
   1165   LWSTDAPI_(WINBOOL) SHFreeShared(HANDLE hData,DWORD dwProcessId);
   1166   LWSTDAPI_(void *) SHLockShared(HANDLE hData,DWORD dwProcessId);
   1167   LWSTDAPI_(WINBOOL) SHUnlockShared(void *pvData);
   1168 #endif
   1169 
   1170 #if (_WIN32_IE >= 0x0501)
   1171 #define PLATFORM_UNKNOWN 0
   1172 #define PLATFORM_IE3 1
   1173 #define PLATFORM_BROWSERONLY 1
   1174 #define PLATFORM_INTEGRATED 2
   1175 
   1176   LWSTDAPI WhichPlatform(void);
   1177 
   1178 typedef struct {
   1179   const IID *piid;
   1180 #if (NTDDI_VERSION >= NTDDI_WIN10_RS2)
   1181   DWORD dwOffset;
   1182 #else
   1183   int dwOffset;
   1184 #endif
   1185 } QITAB, *LPQITAB;
   1186 typedef 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