Reactos
at listview 1280 lines 62 kB view raw
1/* 2 * PROJECT: ReactOS SDK 3 * LICENSE: MIT (https://spdx.org/licenses/MIT) 4 * PURPOSE: shlwapi header 5 * COPYRIGHT: Copyright 2025 Carl Bialorucki (carl.bialorucki@reactos.org) 6 */ 7 8#ifndef _INC_SHLWAPI 9#define _INC_SHLWAPI 10#ifndef NOSHLWAPI 11 12#include <specstrings.h> 13#include <objbase.h> 14#include <shtypes.h> 15#include <pshpack8.h> 16 17#ifndef WINSHLWAPI 18#ifdef __GNUC__ 19/* FIXME: HACK: CORE-6504 */ 20#define LWSTDAPI_(t) t WINAPI 21#define LWSTDAPIV_(t) t WINAPIV 22#else 23#ifndef _SHLWAPI_ 24#define LWSTDAPI_(t) EXTERN_C DECLSPEC_IMPORT t STDAPICALLTYPE 25#define LWSTDAPIV_(t) EXTERN_C DECLSPEC_IMPORT t STDAPIVCALLTYPE 26#else 27#define LWSTDAPI_(t) STDAPI_(t) 28#define LWSTDAPIV_(t) STDAPIV_(t) 29#endif // _SHLWAPI_ 30#endif // __GNUC__ 31#define LWSTDAPI LWSTDAPI_(HRESULT) 32#define LWSTDAPIV LWSTDAPIV_(HRESULT) 33#endif // WINSHLWAPI 34 35#ifdef __cplusplus 36extern "C" { 37#endif 38 39/* 40 * GLOBAL SHLWAPI DEFINITIONS 41 * These definitions are always available. 42 */ 43 44/* SHAutoComplete definitions */ 45#define SHACF_DEFAULT 0x00000000 46#define SHACF_FILESYSTEM 0x00000001 47#define SHACF_URLHISTORY 0x00000002 48#define SHACF_URLMRU 0x00000004 49#define SHACF_URLALL (SHACF_URLHISTORY|SHACF_URLMRU) 50#define SHACF_USETAB 0x00000008 51#define SHACF_FILESYS_ONLY 0x00000010 52#if (_WIN32_IE >= _WIN32_IE_IE60) 53#define SHACF_FILESYS_DIRS 0x00000020 54#endif // _WIN32_IE_IE60 55#if (_WIN32_IE >= _WIN32_IE_IE70) 56#define SHACF_VIRTUAL_NAMESPACE 0x00000040 57#endif // _WIN32_IE_IE70 58#define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000 59#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000 60#define SHACF_AUTOAPPEND_FORCE_ON 0x40000000 61#define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000 62 63LWSTDAPI SHAutoComplete(_In_ HWND, DWORD); 64LWSTDAPI SHGetThreadRef(_Outptr_ IUnknown**); 65LWSTDAPI SHSetThreadRef(_In_opt_ IUnknown*); 66LWSTDAPI_(BOOL) SHCreateThread(_In_ LPTHREAD_START_ROUTINE pfnThreadProc, _In_opt_ void* pData, _In_ DWORD flags, _In_opt_ LPTHREAD_START_ROUTINE pfnCallback); 67LWSTDAPI_(BOOL) SHSkipJunction(_In_opt_ struct IBindCtx*, _In_ const CLSID*); 68 69/* SHCreateThread definitions */ 70enum { 71 CTF_INSIST = 0x0001, 72 CTF_THREAD_REF = 0x0002, 73 CTF_PROCESS_REF = 0x0004, 74 CTF_COINIT_STA = 0x0008, 75 CTF_COINIT = 0x0008, 76#if (_WIN32_IE >= _WIN32_IE_IE60) 77 CTF_FREELIBANDEXIT = 0x0010, 78 CTF_REF_COUNTED = 0x0020, 79 CTF_WAIT_ALLOWCOM = 0x0040, 80#endif // _WIN32_IE_IE60 81#if (_WIN32_IE >= _WIN32_IE_IE70) 82 CTF_UNUSED = 0x0080, 83 CTF_INHERITWOW64 = 0x0100, 84#endif // _WIN32_IE_IE70 85#if (NTDDI_VERSION >= NTDDI_VISTA) 86 CTF_WAIT_NO_REENTRANCY = 0x0200, 87#endif // NTDDI_VERSION >= NTDDI_VISTA 88#if (NTDDI_VERSION >= NTDDI_WIN7) 89 CTF_KEYBOARD_LOCALE = 0x0400, 90 CTF_OLEINITIALIZE = 0x0800, 91 CTF_COINIT_MTA = 0x1000, 92 CTF_NOADDREFLIB = 0x2000, 93#endif // NTDDI_VERSION >= NTDDI_WIN7 94}; 95 96/* SHFormatDateTime definitions */ 97#define FDTF_SHORTTIME 0x00000001 98#define FDTF_SHORTDATE 0x00000002 99#define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME) 100#define FDTF_LONGDATE 0x00000004 101#define FDTF_LONGTIME 0x00000008 102#define FDTF_RELATIVE 0x00000010 103#define FDTF_LTRDATE 0x00000100 104#define FDTF_RTLDATE 0x00000200 105#define FDTF_NOAUTOREADINGORDER 0x00000400 106 107/* DLL version definitions */ 108#define DLLVER_MAJOR_MASK 0xFFFF000000000000 109#define DLLVER_MINOR_MASK 0x0000FFFF00000000 110#define DLLVER_BUILD_MASK 0x00000000FFFF0000 111#define DLLVER_QFE_MASK 0x000000000000FFFF 112 113#define MAKEDLLVERULL(major, minor, build, qfe) \ 114 (((ULONGLONG)(major) << 48) | ((ULONGLONG)(minor) << 32) | ((ULONGLONG)(build) << 16) | (ULONGLONG)(qfe)) 115 116#define DLLVER_PLATFORM_WINDOWS 0x01 // Windows 9.x 117#define DLLVER_PLATFORM_NT 0x02 // Windows NT 118 119typedef struct _DllVersionInfo { 120 DWORD cbSize; 121 DWORD dwMajorVersion; 122 DWORD dwMinorVersion; 123 DWORD dwBuildNumber; 124 DWORD dwPlatformID; 125} DLLVERSIONINFO; 126 127typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *); 128 129typedef struct _DLLVERSIONINFO2 { 130 DLLVERSIONINFO info1; 131 DWORD dwFlags; 132 ULONGLONG ullVersion; 133} DLLVERSIONINFO2; 134 135STDAPI DllInstall(BOOL, _In_opt_ LPCWSTR) DECLSPEC_HIDDEN; 136 137/* QueryInterface definitions */ 138typedef struct 139{ 140 const IID *piid; 141#if defined(__REACTOS__) || (WINVER >= _WIN32_WINNT_WIN10) 142 DWORD dwOffset; 143#else 144 int dwOffset; 145#endif 146} QITAB, *LPQITAB; 147 148#define OFFSETOFCLASS(base, derived) \ 149 ((DWORD)(DWORD_PTR)(static_cast<base*>((derived*)8))-8) 150 151#define QITABENTMULTI(Cthis, Ifoo, Iimpl) { &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) } 152#define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo) 153STDAPI QISearch(_Inout_ void* base, _In_ const QITAB *pqit, _In_ REFIID riid, _Outptr_ void **ppv); 154 155/* Miscellaneous shell functions */ 156LWSTDAPI_(int) GetMenuPosFromID(_In_ HMENU hMenu, _In_ UINT uID); 157LWSTDAPI_(void) IUnknown_AtomicRelease(_Inout_opt_ IUnknown **punk); 158LWSTDAPI_(void) IUnknown_Set(_Inout_ IUnknown **ppunk, _In_opt_ IUnknown *punk); 159LWSTDAPI IUnknown_GetWindow(_In_ IUnknown *punk, _Out_ HWND *phwnd); 160LWSTDAPI IUnknown_SetSite(_In_ IUnknown *punk, _In_opt_ IUnknown *punkSite); 161LWSTDAPI IUnknown_GetSite(_In_ IUnknown *punk, _In_ REFIID riid, _Outptr_ void **ppv); 162LWSTDAPI IUnknown_QueryService(_In_opt_ IUnknown *punk, _In_ REFGUID guidService, _In_ REFIID riid, _Outptr_ void **ppvOut); 163LWSTDAPI IStream_Size(_In_ IStream *pstm, _Out_ ULARGE_INTEGER *pui); 164 165/* Version gated definitions */ 166#if (_WIN32_IE >= _WIN32_IE_IE60) 167#define SHGVSPB_PERUSER 0x00000001 168#define SHGVSPB_ALLUSERS 0x00000002 169#define SHGVSPB_PERFOLDER 0x00000004 170#define SHGVSPB_ALLFOLDERS 0x00000008 171#define SHGVSPB_INHERIT 0x00000010 172#define SHGVSPB_ROAM 0x00000020 173#define SHGVSPB_NOAUTODEFAULTS 0x80000000 174#define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER) 175#define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS) 176#define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS) 177#define SHGVSPB_GLOBALDEFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS) 178 179LWSTDAPI SHGetViewStatePropertyBag(_In_opt_ PCIDLIST_ABSOLUTE pidl, _In_opt_ LPCWSTR bag_name, _In_ DWORD flags, _In_ REFIID riid, _Outptr_ void **ppv); 180LWSTDAPI SHReleaseThreadRef(void); 181#endif // (_WIN32_IE >= _WIN32_IE_IE60) 182 183#if (_WIN32_IE >= 0x0602) 184LWSTDAPI_(BOOL) IsInternetESCEnabled(void); 185#endif // (_WIN32_IE >= 0x0602) 186 187/* According to Geoff Chappell, SHAllocShared, SHFreeShared, SHLockShared, and SHUnlockShared 188 * were available in shlwapi.dll starting with IE40. However, Microsoft didn't expose them 189 * in their public shlwapi header until IE60SP2. 190 */ 191#if (_WIN32_IE >= _WIN32_IE_IE60SP2) 192LWSTDAPI_(HANDLE) SHAllocShared(_In_opt_ const void *pvData, _In_ DWORD dwSize, _In_ DWORD dwDestinationProcessId); 193LWSTDAPI_(BOOL) SHFreeShared(_In_ HANDLE hData, _In_ DWORD dwProcessId); 194LWSTDAPI_(PVOID) SHLockShared(_In_ HANDLE hData, _In_ DWORD dwProcessId); 195LWSTDAPI_(BOOL) SHUnlockShared(_In_ void *pvData); 196LWSTDAPI SHCreateThreadRef(_Inout_ LONG*, _Outptr_ IUnknown**); 197#endif // _WIN32_IE >= _WIN32_IE_IE60SP2 198 199/* 200 * OPTIONAL SHLWAPI DEFINITIONS 201 * These definitions can be turned on or off depending on what constants are defined. 202 * 203 * | Constant | Effect | 204 * |--------------------|-----------------------------| 205 * | NO_SHLWAPI_GDI | Disables GDI functions | 206 * | NO_SHLWAPI_ISOS | Disables IsOS function | 207 * | NO_SHLWAPI_PATH | Disables path functions | 208 * | NO_SHLWAPI_REG | Disables registry functions | 209 * | NO_SHLWAPI_STREAM | Disables stream functions | 210 * | NO_SHLWAPI_STRFCNS | Disables string functions | 211 */ 212 213/* GDI functions */ 214#ifndef NO_SHLWAPI_GDI 215 216LWSTDAPI_(COLORREF) ColorAdjustLuma(COLORREF,int,BOOL); 217LWSTDAPI_(COLORREF) ColorHLSToRGB(WORD,WORD,WORD); 218LWSTDAPI_(void) ColorRGBToHLS(COLORREF, _Out_ LPWORD, _Out_ LPWORD, _Out_ LPWORD); 219LWSTDAPI_(HPALETTE) SHCreateShellPalette(_In_opt_ HDC); 220 221#endif // NO_SHLWAPI_GDI 222 223/* IsOS function */ 224#ifndef NO_SHLWAPI_ISOS 225 226#define OS_WINDOWS 0 227#define OS_NT 1 228#define OS_WIN95ORGREATER 2 229#define OS_NT4ORGREATER 3 230/* 4 is omitted on purpose */ 231#define OS_WIN98ORGREATER 5 232#define OS_WIN98_GOLD 6 233#define OS_WIN2000ORGREATER 7 234#define OS_WIN2000PRO 8 235#define OS_WIN2000SERVER 9 236#define OS_WIN2000ADVSERVER 10 237#define OS_WIN2000DATACENTER 11 238#define OS_WIN2000TERMINAL 12 239#define OS_EMBEDDED 13 240#define OS_TERMINALCLIENT 14 241#define OS_TERMINALREMOTEADMIN 15 242#define OS_WIN95_GOLD 16 243#define OS_MEORGREATER 17 244#define OS_XPORGREATER 18 245#define OS_HOME 19 246#define OS_PROFESSIONAL 20 247#define OS_DATACENTER 21 248#define OS_ADVSERVER 22 249#define OS_SERVER 23 250#define OS_TERMINALSERVER 24 251#define OS_PERSONALTERMINALSERVER 25 252#define OS_FASTUSERSWITCHING 26 253#define OS_WELCOMELOGONUI 27 254#define OS_DOMAINMEMBER 28 255#define OS_ANYSERVER 29 256#define OS_WOW6432 30 257#define OS_WEBSERVER 31 258#define OS_SMALLBUSINESSSERVER 32 259#define OS_TABLETPC 33 260#define OS_SERVERADMINUI 34 261#define OS_MEDIACENTER 35 262#define OS_APPLIANCE 36 263 264LWSTDAPI_(BOOL) IsOS(DWORD dwOS); 265 266#endif // NO_SHLWAPI_ISOS 267 268/* Path functions */ 269#ifndef NO_SHLWAPI_PATH 270 271#define GCT_INVALID 0x0 272#define GCT_LFNCHAR 0x1 273#define GCT_SHORTCHAR 0x2 274#define GCT_WILD 0x4 275#define GCT_SEPARATOR 0x8 276 277LWSTDAPI HashData(_In_reads_bytes_(cbData) const unsigned char *, DWORD cbData, _Out_writes_bytes_(cbHash) unsigned char *lpDest, DWORD cbHash); 278#if (_WIN32_IE >= _WIN32_IE_IE70) 279LWSTDAPI PathCreateFromUrlAlloc(_In_ LPCWSTR pszUrl, _Outptr_ LPWSTR* pszPath, DWORD dwReserved); 280#endif // _WIN32_IE_IE70 281 282LWSTDAPI_(LPSTR) PathAddBackslashA(_Inout_updates_(MAX_PATH) LPSTR); 283LWSTDAPI_(LPWSTR) PathAddBackslashW(_Inout_updates_(MAX_PATH) LPWSTR); 284LWSTDAPI_(BOOL) PathAddExtensionA(_Inout_updates_(MAX_PATH) LPSTR, _In_opt_ LPCSTR); 285LWSTDAPI_(BOOL) PathAddExtensionW(_Inout_updates_(MAX_PATH) LPWSTR,_In_opt_ LPCWSTR); 286LWSTDAPI_(BOOL) PathAppendA(_Inout_updates_(MAX_PATH) LPSTR, _In_ LPCSTR); 287LWSTDAPI_(BOOL) PathAppendW(_Inout_updates_(MAX_PATH) LPWSTR, _In_ LPCWSTR); 288LWSTDAPI_(LPSTR) PathBuildRootA(_Out_writes_(4) LPSTR, int); 289LWSTDAPI_(LPWSTR) PathBuildRootW(_Out_writes_(4) LPWSTR, int); 290LWSTDAPI_(BOOL) PathCanonicalizeA(_Out_writes_(MAX_PATH) LPSTR, _In_ LPCSTR); 291LWSTDAPI_(BOOL) PathCanonicalizeW(_Out_writes_(MAX_PATH) LPWSTR, _In_ LPCWSTR); 292LWSTDAPI_(LPSTR) PathCombineA(_Out_writes_(MAX_PATH) LPSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR); 293LWSTDAPI_(LPWSTR) PathCombineW(_Out_writes_(MAX_PATH) LPWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR); 294LWSTDAPI_(BOOL) PathCompactPathA(_In_opt_ HDC, _Inout_updates_(MAX_PATH) LPSTR, _In_ UINT); 295LWSTDAPI_(BOOL) PathCompactPathW(_In_opt_ HDC, _Inout_updates_(MAX_PATH) LPWSTR, _In_ UINT); 296LWSTDAPI_(BOOL) PathCompactPathExA(_Out_writes_(cchMax) LPSTR, _In_ LPCSTR, _In_ UINT cchMax, _In_ DWORD); 297LWSTDAPI_(BOOL) PathCompactPathExW(_Out_writes_(cchMax) LPWSTR, _In_ LPCWSTR, _In_ UINT cchMax, _In_ DWORD); 298LWSTDAPI_(int) PathCommonPrefixA(_In_ LPCSTR, _In_ LPCSTR, _Out_writes_opt_(MAX_PATH) LPSTR); 299LWSTDAPI_(int) PathCommonPrefixW(_In_ LPCWSTR, _In_ LPCWSTR, _Out_writes_opt_(MAX_PATH) LPWSTR); 300LWSTDAPI PathCreateFromUrlA(_In_ LPCSTR, _Out_writes_to_(*pcchPath, *pcchPath) LPSTR, _Inout_ LPDWORD pcchPath, DWORD); 301LWSTDAPI PathCreateFromUrlW(_In_ LPCWSTR pszUrl, _Out_writes_to_(*pcchPath, *pcchPath) LPWSTR pszPath, _Inout_ LPDWORD pcchPath, DWORD dwFlags); 302LWSTDAPI_(BOOL) PathFileExistsA(_In_ LPCSTR pszPath); 303LWSTDAPI_(BOOL) PathFileExistsW(_In_ LPCWSTR pszPath); 304LWSTDAPI_(LPSTR) PathFindExtensionA(_In_ LPCSTR pszPath); 305LWSTDAPI_(LPWSTR) PathFindExtensionW(_In_ LPCWSTR pszPath); 306LWSTDAPI_(LPSTR) PathFindFileNameA(_In_ LPCSTR pszPath); 307LWSTDAPI_(LPWSTR) PathFindFileNameW(_In_ LPCWSTR pszPath); 308LWSTDAPI_(LPSTR) PathFindNextComponentA(_In_ LPCSTR); 309LWSTDAPI_(LPWSTR) PathFindNextComponentW(_In_ LPCWSTR); 310LWSTDAPI_(BOOL) PathFindOnPathA(_Inout_updates_(MAX_PATH) LPSTR, _In_opt_ LPCSTR*); 311LWSTDAPI_(BOOL) PathFindOnPathW(_Inout_updates_(MAX_PATH) LPWSTR, _In_opt_ LPCWSTR*); 312LWSTDAPI_(LPCSTR) PathFindSuffixArrayA(_In_ LPCSTR, _In_reads_(iArraySize) LPCSTR *, int iArraySize); 313LWSTDAPI_(LPCWSTR) PathFindSuffixArrayW(_In_ LPCWSTR, _In_reads_(iArraySize) LPCWSTR *, int iArraySize); 314LWSTDAPI_(LPSTR) PathGetArgsA(_In_ LPCSTR pszPath); 315LWSTDAPI_(LPWSTR) PathGetArgsW(_In_ LPCWSTR pszPath); 316LWSTDAPI_(UINT) PathGetCharTypeA(_In_ UCHAR ch); 317LWSTDAPI_(UINT) PathGetCharTypeW(_In_ WCHAR ch); 318LWSTDAPI_(int) PathGetDriveNumberA(_In_ LPCSTR); 319LWSTDAPI_(int) PathGetDriveNumberW(_In_ LPCWSTR); 320LWSTDAPI_(BOOL) PathIsContentTypeA(_In_ LPCSTR, _In_ LPCSTR); 321LWSTDAPI_(BOOL) PathIsContentTypeW(_In_ LPCWSTR, _In_ LPCWSTR); 322LWSTDAPI_(BOOL) PathIsDirectoryA(_In_ LPCSTR); 323LWSTDAPI_(BOOL) PathIsDirectoryW(_In_ LPCWSTR); 324LWSTDAPI_(BOOL) PathIsDirectoryEmptyA(_In_ LPCSTR); 325LWSTDAPI_(BOOL) PathIsDirectoryEmptyW(_In_ LPCWSTR); 326LWSTDAPI_(BOOL) PathIsFileSpecA(_In_ LPCSTR); 327LWSTDAPI_(BOOL) PathIsFileSpecW(_In_ LPCWSTR); 328LWSTDAPI_(BOOL) PathIsLFNFileSpecA(_In_ LPCSTR); 329LWSTDAPI_(BOOL) PathIsLFNFileSpecW(_In_ LPCWSTR); 330LWSTDAPI_(BOOL) PathIsNetworkPathA(_In_ LPCSTR); 331LWSTDAPI_(BOOL) PathIsNetworkPathW(_In_ LPCWSTR); 332LWSTDAPI_(BOOL) PathIsPrefixA(_In_ LPCSTR, _In_ LPCSTR); 333LWSTDAPI_(BOOL) PathIsPrefixW(_In_ LPCWSTR, _In_ LPCWSTR); 334LWSTDAPI_(BOOL) PathIsRelativeA(_In_ LPCSTR); 335LWSTDAPI_(BOOL) PathIsRelativeW(_In_ LPCWSTR); 336LWSTDAPI_(BOOL) PathIsRootA(_In_ LPCSTR); 337LWSTDAPI_(BOOL) PathIsRootW(_In_ LPCWSTR); 338LWSTDAPI_(BOOL) PathIsSameRootA(_In_ LPCSTR, _In_ LPCSTR); 339LWSTDAPI_(BOOL) PathIsSameRootW(_In_ LPCWSTR, _In_ LPCWSTR); 340LWSTDAPI_(BOOL) PathIsSystemFolderA(_In_opt_ LPCSTR, _In_ DWORD); 341LWSTDAPI_(BOOL) PathIsSystemFolderW(_In_opt_ LPCWSTR, _In_ DWORD); 342LWSTDAPI_(BOOL) PathIsUNCA(_In_ LPCSTR); 343LWSTDAPI_(BOOL) PathIsUNCW(_In_ LPCWSTR); 344LWSTDAPI_(BOOL) PathIsUNCServerA(_In_ LPCSTR); 345LWSTDAPI_(BOOL) PathIsUNCServerW(_In_ LPCWSTR); 346LWSTDAPI_(BOOL) PathIsUNCServerShareA(_In_ LPCSTR); 347LWSTDAPI_(BOOL) PathIsUNCServerShareW(_In_ LPCWSTR); 348LWSTDAPI_(BOOL) PathIsURLA(_In_ LPCSTR); 349LWSTDAPI_(BOOL) PathIsURLW(_In_ LPCWSTR); 350LWSTDAPI_(BOOL) PathMakePrettyA(_Inout_ LPSTR); 351LWSTDAPI_(BOOL) PathMakePrettyW(_Inout_ LPWSTR); 352LWSTDAPI_(BOOL) PathMakeSystemFolderA(_In_ LPCSTR); 353LWSTDAPI_(BOOL) PathMakeSystemFolderW(_In_ LPCWSTR); 354LWSTDAPI_(BOOL) PathMatchSpecA(_In_ LPCSTR pszFile, _In_ LPCSTR pszSpec); 355LWSTDAPI_(BOOL) PathMatchSpecW(_In_ LPCWSTR pszFile, _In_ LPCWSTR pszSpec); 356#if (_WIN32_IE >= _WIN32_IE_IE70) 357LWSTDAPI PathMatchSpecExA(_In_ LPCSTR, _In_ LPCSTR, _In_ DWORD); 358LWSTDAPI PathMatchSpecExW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD); 359#endif // _WIN32_IE_IE70 360LWSTDAPI_(int) PathParseIconLocationA(_Inout_ LPSTR); 361LWSTDAPI_(int) PathParseIconLocationW(_Inout_ LPWSTR); 362LWSTDAPI_(BOOL) PathQuoteSpacesA(_Inout_updates_(MAX_PATH) LPSTR); 363LWSTDAPI_(BOOL) PathQuoteSpacesW(_Inout_updates_(MAX_PATH) LPWSTR); 364LWSTDAPI_(BOOL) PathRelativePathToA(_Out_writes_(MAX_PATH) LPSTR, _In_ LPCSTR, _In_ DWORD, _In_ LPCSTR, _In_ DWORD); 365LWSTDAPI_(BOOL) PathRelativePathToW(_Out_writes_(MAX_PATH) LPWSTR, _In_ LPCWSTR, _In_ DWORD, _In_ LPCWSTR, _In_ DWORD); 366LWSTDAPI_(void) PathRemoveArgsA(_Inout_ LPSTR); 367LWSTDAPI_(void) PathRemoveArgsW(_Inout_ LPWSTR); 368LWSTDAPI_(LPSTR) PathRemoveBackslashA(_Inout_ LPSTR); 369LWSTDAPI_(LPWSTR) PathRemoveBackslashW(_Inout_ LPWSTR); 370LWSTDAPI_(void) PathRemoveBlanksA(_Inout_ LPSTR); 371LWSTDAPI_(void) PathRemoveBlanksW(_Inout_ LPWSTR); 372LWSTDAPI_(void) PathRemoveExtensionA(_Inout_ LPSTR); 373LWSTDAPI_(void) PathRemoveExtensionW(_Inout_ LPWSTR); 374LWSTDAPI_(BOOL) PathRemoveFileSpecA(_Inout_ LPSTR); 375LWSTDAPI_(BOOL) PathRemoveFileSpecW(_Inout_ LPWSTR); 376LWSTDAPI_(BOOL) PathRenameExtensionA(_Inout_updates_(MAX_PATH) LPSTR, _In_ LPCSTR); 377LWSTDAPI_(BOOL) PathRenameExtensionW(_Inout_updates_(MAX_PATH) LPWSTR, _In_ LPCWSTR); 378LWSTDAPI_(BOOL) PathSearchAndQualifyA(_In_ LPCSTR, _Out_writes_(cchBuf) LPSTR, _In_ UINT cchBuf); 379LWSTDAPI_(BOOL) PathSearchAndQualifyW(_In_ LPCWSTR, _Out_writes_(cchBuf) LPWSTR, _In_ UINT cchBuf); 380LWSTDAPI_(void) PathSetDlgItemPathA(_In_ HWND, int, LPCSTR); 381LWSTDAPI_(void) PathSetDlgItemPathW(_In_ HWND, int, LPCWSTR); 382LWSTDAPI_(LPSTR) PathSkipRootA(_In_ LPCSTR); 383LWSTDAPI_(LPWSTR) PathSkipRootW(_In_ LPCWSTR); 384LWSTDAPI_(void) PathStripPathA(_Inout_ LPSTR); 385LWSTDAPI_(void) PathStripPathW(_Inout_ LPWSTR); 386LWSTDAPI_(BOOL) PathStripToRootA(_Inout_ LPSTR); 387LWSTDAPI_(BOOL) PathStripToRootW(_Inout_ LPWSTR); 388LWSTDAPI_(void) PathUndecorateA(_Inout_ LPSTR); 389LWSTDAPI_(void) PathUndecorateW(_Inout_ LPWSTR); 390LWSTDAPI_(BOOL) PathUnExpandEnvStringsA(_In_ LPCSTR, _Out_writes_(cchBuf) LPSTR, _In_ UINT cchBuf); 391LWSTDAPI_(BOOL) PathUnExpandEnvStringsW(_In_ LPCWSTR, _Out_writes_(cchBuf) LPWSTR, _In_ UINT cchBuf); 392LWSTDAPI_(BOOL) PathUnmakeSystemFolderA(_In_ LPCSTR); 393LWSTDAPI_(BOOL) PathUnmakeSystemFolderW(_In_ LPCWSTR); 394LWSTDAPI_(BOOL) PathUnquoteSpacesA(_Inout_ LPSTR); 395LWSTDAPI_(BOOL) PathUnquoteSpacesW(_Inout_ LPWSTR); 396 397#ifdef UNICODE 398#define PathAddBackslash PathAddBackslashW 399#define PathAddExtension PathAddExtensionW 400#define PathAppend PathAppendW 401#define PathBuildRoot PathBuildRootW 402#define PathCanonicalize PathCanonicalizeW 403#define PathCombine PathCombineW 404#define PathCompactPath PathCompactPathW 405#define PathCompactPathEx PathCompactPathExW 406#define PathCommonPrefix PathCommonPrefixW 407#define PathCreateFromUrl PathCreateFromUrlW 408#define PathFileExists PathFileExistsW 409#define PathFindExtension PathFindExtensionW 410#define PathFindFileName PathFindFileNameW 411#define PathFindNextComponent PathFindNextComponentW 412#define PathFindOnPath PathFindOnPathW 413#define PathFindSuffixArray PathFindSuffixArrayW 414#define PathGetArgs PathGetArgsW 415#define PathGetCharType PathGetCharTypeW 416#define PathGetDriveNumber PathGetDriveNumberW 417#define PathIsContentType PathIsContentTypeW 418#define PathIsDirectory PathIsDirectoryW 419#define PathIsDirectoryEmpty PathIsDirectoryEmptyW 420#define PathIsFileSpec PathIsFileSpecW 421#define PathIsLFNFileSpec PathIsLFNFileSpecW 422#define PathIsNetworkPath PathIsNetworkPathW 423#define PathIsPrefix PathIsPrefixW 424#define PathIsRelative PathIsRelativeW 425#define PathIsRoot PathIsRootW 426#define PathIsSameRoot PathIsSameRootW 427#define PathIsSystemFolder PathIsSystemFolderW 428#define PathIsUNC PathIsUNCW 429#define PathIsUNCServer PathIsUNCServerW 430#define PathIsUNCServerShare PathIsUNCServerShareW 431#define PathIsURL PathIsURLW 432#define PathMakePretty PathMakePrettyW 433#define PathMakeSystemFolder PathMakeSystemFolderW 434#define PathMatchSpec PathMatchSpecW 435#if (_WIN32_IE >= _WIN32_IE_IE70) 436#define PathMatchSpecEx PathMatchSpecExW 437#endif // _WIN32_IE_IE70 438#define PathParseIconLocation PathParseIconLocationW 439#define PathQuoteSpaces PathQuoteSpacesW 440#define PathRelativePathTo PathRelativePathToW 441#define PathRemoveArgs PathRemoveArgsW 442#define PathRemoveBackslash PathRemoveBackslashW 443#define PathRemoveBlanks PathRemoveBlanksW 444#define PathRemoveExtension PathRemoveExtensionW 445#define PathRemoveFileSpec PathRemoveFileSpecW 446#define PathRenameExtension PathRenameExtensionW 447#define PathSearchAndQualify PathSearchAndQualifyW 448#define PathSetDlgItemPath PathSetDlgItemPathW 449#define PathSkipRoot PathSkipRootW 450#define PathStripPath PathStripPathW 451#define PathStripToRoot PathStripToRootW 452#define PathUndecorate PathUndecorateW 453#define PathUnExpandEnvStrings PathUnExpandEnvStringsW 454#define PathUnmakeSystemFolder PathUnmakeSystemFolderW 455#define PathUnquoteSpaces PathUnquoteSpacesW 456#else 457#define PathAddBackslash PathAddBackslashA 458#define PathAddExtension PathAddExtensionA 459#define PathAppend PathAppendA 460#define PathBuildRoot PathBuildRootA 461#define PathCanonicalize PathCanonicalizeA 462#define PathCombine PathCombineA 463#define PathCompactPath PathCompactPathA 464#define PathCompactPathEx PathCompactPathExA 465#define PathCommonPrefix PathCommonPrefixA 466#define PathCreateFromUrl PathCreateFromUrlA 467#define PathFileExists PathFileExistsA 468#define PathFindExtension PathFindExtensionA 469#define PathFindFileName PathFindFileNameA 470#define PathFindNextComponent PathFindNextComponentA 471#define PathFindOnPath PathFindOnPathA 472#define PathFindSuffixArray PathFindSuffixArrayA 473#define PathGetArgs PathGetArgsA 474#define PathGetCharType PathGetCharTypeA 475#define PathGetDriveNumber PathGetDriveNumberA 476#define PathIsContentType PathIsContentTypeA 477#define PathIsDirectory PathIsDirectoryA 478#define PathIsDirectoryEmpty PathIsDirectoryEmptyA 479#define PathIsFileSpec PathIsFileSpecA 480#define PathIsLFNFileSpec PathIsLFNFileSpecA 481#define PathIsNetworkPath PathIsNetworkPathA 482#define PathIsPrefix PathIsPrefixA 483#define PathIsRelative PathIsRelativeA 484#define PathIsRoot PathIsRootA 485#define PathIsSameRoot PathIsSameRootA 486#define PathIsSystemFolder PathIsSystemFolderA 487#define PathIsUNC PathIsUNCA 488#define PathIsUNCServer PathIsUNCServerA 489#define PathIsUNCServerShare PathIsUNCServerShareA 490#define PathIsURL PathIsURLA 491#define PathMakePretty PathMakePrettyA 492#define PathMakeSystemFolder PathMakeSystemFolderA 493#define PathMatchSpec PathMatchSpecA 494#if (_WIN32_IE >= _WIN32_IE_IE70) 495#define PathMatchSpecEx PathMatchSpecExA 496#endif // _WIN32_IE_IE70 497#define PathParseIconLocation PathParseIconLocationA 498#define PathQuoteSpaces PathQuoteSpacesA 499#define PathRelativePathTo PathRelativePathToA 500#define PathRemoveArgs PathRemoveArgsA 501#define PathRemoveBackslash PathRemoveBackslashA 502#define PathRemoveBlanks PathRemoveBlanksA 503#define PathRemoveExtension PathRemoveExtensionA 504#define PathRemoveFileSpec PathRemoveFileSpecA 505#define PathRenameExtension PathRenameExtensionA 506#define PathSearchAndQualify PathSearchAndQualifyA 507#define PathSetDlgItemPath PathSetDlgItemPathA 508#define PathSkipRoot PathSkipRootA 509#define PathStripPath PathStripPathA 510#define PathStripToRoot PathStripToRootA 511#define PathUndecorate PathUndecorateA 512#define PathUnExpandEnvStrings PathUnExpandEnvStringsA 513#define PathUnmakeSystemFolder PathUnmakeSystemFolderA 514#define PathUnquoteSpaces PathUnquoteSpacesA 515#endif // UNICODE 516 517#define URL_APPLY_DEFAULT 0x00000001 518#define URL_APPLY_GUESSSCHEME 0x00000002 519#define URL_APPLY_GUESSFILE 0x00000004 520#define URL_APPLY_FORCEAPPLY 0x00000008 521#define URL_ESCAPE_PERCENT 0x00001000 522#define URL_ESCAPE_SEGMENT_ONLY 0x00002000 523#define URL_FILE_USE_PATHURL 0x00010000 524#define URL_ESCAPE_AS_UTF8 0x00040000 525#define URL_UNESCAPE_INPLACE 0x00100000 526#define URL_CONVERT_IF_DOSPATH 0x00200000 527#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000 528#define URL_INTERNAL_PATH 0x00800000 529#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000 530#define URL_ESCAPE_SPACES_ONLY 0x04000000 531#define URL_DONT_SIMPLIFY 0x08000000 532#define URL_UNESCAPE 0x10000000 533#define URL_ESCAPE_UNSAFE 0x20000000 534#define URL_PLUGGABLE_PROTOCOL 0x40000000 535#define URL_WININET_COMPATIBILITY 0x80000000 536#define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8 537#define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8 538#define URL_NO_META URL_DONT_SIMPLIFY 539#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO 540#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO 541 542typedef enum { 543 URL_SCHEME_INVALID = -1, 544 URL_SCHEME_UNKNOWN = 0, 545 URL_SCHEME_FTP, 546 URL_SCHEME_HTTP, 547 URL_SCHEME_GOPHER, 548 URL_SCHEME_MAILTO, 549 URL_SCHEME_NEWS, 550 URL_SCHEME_NNTP, 551 URL_SCHEME_TELNET, 552 URL_SCHEME_WAIS, 553 URL_SCHEME_FILE, 554 URL_SCHEME_MK, 555 URL_SCHEME_HTTPS, 556 URL_SCHEME_SHELL, 557 URL_SCHEME_SNEWS, 558 URL_SCHEME_LOCAL, 559 URL_SCHEME_JAVASCRIPT, 560 URL_SCHEME_VBSCRIPT, 561 URL_SCHEME_ABOUT, 562 URL_SCHEME_RES, 563#if (_WIN32_IE >= _WIN32_IE_IE60) 564 URL_SCHEME_MSSHELLROOTED, 565 URL_SCHEME_MSSHELLIDLIST, 566 URL_SCHEME_MSHELP, 567#endif // _WIN32_IE_IE60 568#if (_WIN32_IE >= _WIN32_IE_IE70) 569 URL_SCHEME_MSSHELLDEVICE, 570 URL_SCHEME_WILDCARD, 571#endif // _WIN32_IE_IE70 572#if (NTDDI_VERSION >= NTDDI_VISTA) 573 URL_SCHEME_SEARCH_MS, 574#endif // NTDDI_VISTA 575#if (NTDDI_VERSION >= NTDDI_VISTASP1) 576 URL_SCHEME_SEARCH, 577#endif // NTDDI_VISTASP1 578#if (NTDDI_VERSION >= NTDDI_WIN7) 579 URL_SCHEME_KNOWNFOLDER, 580#endif // NTDDI_WIN7 581 URL_SCHEME_MAXVALUE 582} URL_SCHEME; 583 584typedef enum { 585 URL_PART_NONE = 0, 586 URL_PART_SCHEME = 1, 587 URL_PART_HOSTNAME, 588 URL_PART_USERNAME, 589 URL_PART_PASSWORD, 590 URL_PART_PORT, 591 URL_PART_QUERY 592} URL_PART; 593 594#define URL_PARTFLAG_KEEPSCHEME 0x00000001 595 596typedef enum { 597 URLIS_URL, 598 URLIS_OPAQUE, 599 URLIS_NOHISTORY, 600 URLIS_FILEURL, 601 URLIS_APPLIABLE, 602 URLIS_DIRECTORY, 603 URLIS_HASQUERY 604} URLIS; 605 606typedef struct tagPARSEDURLA { 607 DWORD cbSize; 608 LPCSTR pszProtocol; 609 UINT cchProtocol; 610 LPCSTR pszSuffix; 611 UINT cchSuffix; 612 UINT nScheme; 613} PARSEDURLA, *PPARSEDURLA; 614 615typedef struct tagPARSEDURLW { 616 DWORD cbSize; 617 LPCWSTR pszProtocol; 618 UINT cchProtocol; 619 LPCWSTR pszSuffix; 620 UINT cchSuffix; 621 UINT nScheme; 622} PARSEDURLW, *PPARSEDURLW; 623 624LWSTDAPI UrlApplySchemeA(_In_ LPCSTR, _Out_writes_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut, DWORD); 625LWSTDAPI UrlApplySchemeW(_In_ LPCWSTR, _Out_writes_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut, DWORD); 626LWSTDAPI UrlCanonicalizeA(_In_ LPCSTR, _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPSTR, _Inout_ LPDWORD pcchCanonicalized, DWORD); 627LWSTDAPI UrlCanonicalizeW(_In_ LPCWSTR, _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPWSTR, _Inout_ LPDWORD pcchCanonicalized, DWORD); 628LWSTDAPI UrlCombineA(_In_ LPCSTR, _In_ LPCSTR, _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPSTR, _Inout_ LPDWORD pcchCombined, DWORD); 629LWSTDAPI UrlCombineW(_In_ LPCWSTR, _In_ LPCWSTR, _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPWSTR, _Inout_ LPDWORD pcchCombined, DWORD); 630LWSTDAPI_(int) UrlCompareA(_In_ LPCSTR, _In_ LPCSTR, BOOL); 631LWSTDAPI_(int) UrlCompareW(_In_ LPCWSTR, _In_ LPCWSTR, BOOL); 632LWSTDAPI UrlEscapeA(_In_ LPCSTR, _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPSTR, _Inout_ LPDWORD pcchEscaped, DWORD); 633LWSTDAPI UrlEscapeW(_In_ LPCWSTR, _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPWSTR, _Inout_ LPDWORD pcchEscaped, DWORD); 634LWSTDAPI_(LPCSTR) UrlGetLocationA(_In_ LPCSTR); 635LWSTDAPI_(LPCWSTR) UrlGetLocationW(_In_ LPCWSTR); 636LWSTDAPI UrlGetPartA(_In_ LPCSTR, _Out_writes_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut, DWORD, DWORD); 637LWSTDAPI UrlGetPartW(_In_ LPCWSTR, _Out_writes_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut, DWORD, DWORD); 638LWSTDAPI UrlHashA(_In_ LPCSTR, _Out_writes_bytes_(cbHash) unsigned char *, DWORD cbHash); 639LWSTDAPI UrlHashW(_In_ LPCWSTR, _Out_writes_bytes_(cbHash) unsigned char *, DWORD cbHash); 640LWSTDAPI_(BOOL) UrlIsA(_In_ LPCSTR, URLIS); 641LWSTDAPI_(BOOL) UrlIsW(_In_ LPCWSTR, URLIS); 642#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL) 643#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL) 644LWSTDAPI_(BOOL) UrlIsNoHistoryA(_In_ LPCSTR); 645LWSTDAPI_(BOOL) UrlIsNoHistoryW(_In_ LPCWSTR); 646LWSTDAPI_(BOOL) UrlIsOpaqueA(_In_ LPCSTR); 647LWSTDAPI_(BOOL) UrlIsOpaqueW(_In_ LPCWSTR); 648LWSTDAPI UrlUnescapeA(_Inout_ LPSTR, _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPSTR, _Inout_opt_ LPDWORD pcchUnescaped, DWORD); 649LWSTDAPI UrlUnescapeW(_Inout_ LPWSTR, _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPWSTR, _Inout_opt_ LPDWORD pcchUnescaped, DWORD); 650LWSTDAPI UrlCreateFromPathA(_In_ LPCSTR, _Out_writes_to_(*pcchUrl, *pcchUrl) LPSTR, _Inout_ LPDWORD pcchUrl, DWORD); 651LWSTDAPI UrlCreateFromPathW(_In_ LPCWSTR, _Out_writes_to_(*pcchUrl, *pcchUrl) LPWSTR, _Inout_ LPDWORD pcchUrl, DWORD); 652LWSTDAPI ParseURLA(_In_ LPCSTR pszUrl, _Inout_ PARSEDURLA *ppu); 653LWSTDAPI ParseURLW(_In_ LPCWSTR pszUrl, _Inout_ PARSEDURLW *ppu); 654 655#ifdef UNICODE 656#define UrlApplyScheme UrlApplySchemeW 657#define UrlCanonicalize UrlCanonicalizeW 658#define UrlCombine UrlCombineW 659#define UrlCompare UrlCompareW 660#define UrlEscape UrlEscapeW 661#define UrlGetLocation UrlGetLocationW 662#define UrlGetPart UrlGetPartW 663#define UrlHash UrlHashW 664#define UrlIs UrlIsW 665#define UrlIsFileUrl UrlIsFileUrlW 666#define UrlIsNoHistory UrlIsNoHistoryW 667#define UrlIsOpaque UrlIsOpaqueW 668#define UrlUnescape UrlUnescapeW 669#define UrlCreateFromPath UrlCreateFromPathW 670#define ParseURL ParseURLW 671#else 672#define UrlApplyScheme UrlApplySchemeA 673#define UrlCanonicalize UrlCanonicalizeA 674#define UrlCombine UrlCombineA 675#define UrlCompare UrlCompareA 676#define UrlEscape UrlEscapeA 677#define UrlGetLocation UrlGetLocationA 678#define UrlGetPart UrlGetPartA 679#define UrlHash UrlHashA 680#define UrlIs UrlIsA 681#define UrlIsFileUrl UrlIsFileUrlA 682#define UrlIsNoHistory UrlIsNoHistoryA 683#define UrlIsOpaque UrlIsOpaqueA 684#define UrlUnescape UrlUnescapeA 685#define UrlCreateFromPath UrlCreateFromPathA 686#define ParseURL ParseURLA 687#endif // UNICODE 688 689#define UrlEscapeSpaces(x, y, z) UrlCanonicalize(x, y, z, URL_ESCAPE_SPACES_ONLY | URL_DONT_ESCAPE_EXTRA_INFO) 690#define UrlUnescapeInPlace(x, y) UrlUnescape(x, NULL, NULL, y | URL_UNESCAPE_INPLACE) 691 692#endif // NO_SHLWAPI_PATH 693 694/* Registry functions */ 695#ifndef NO_SHLWAPI_REG 696 697#define SRRF_RT_REG_NONE 0x0001 698#define SRRF_RT_REG_SZ 0x0002 699#define SRRF_RT_REG_EXPAND_SZ 0x0004 700#define SRRF_RT_REG_BINARY 0x0008 701#define SRRF_RT_REG_DWORD 0x0010 702#define SRRF_RT_REG_MULTI_SZ 0x0020 703#define SRRF_RT_REG_QWORD 0x0040 704#define SRRF_RT_ANY 0xFFFF 705#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_DWORD) 706#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_QWORD) 707 708#define SRRF_RM_ANY 0x00000 709#define SRRF_RM_NORMAL 0x10000 710#define SRRF_RM_SAFE 0x20000 711#define SRRF_RM_SAFENETWORK 0x40000 712 713#define SRRF_NOEXPAND 0x10000000 714#define SRRF_ZEROONFAILURE 0x20000000 715#define SRRF_NOVIRT 0x40000000 716 717typedef INT SRRF; 718 719#define SHREGSET_HKCU 0x1 720#define SHREGSET_FORCE_HKCU 0x2 721#define SHREGSET_HKLM 0x4 722#define SHREGSET_FORCE_HKLM 0x8 723#define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM) 724 725typedef enum { 726 SHREGDEL_DEFAULT = 0, 727 SHREGDEL_HKCU = 0x1, 728 SHREGDEL_HKLM = 0x10, 729 SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU 730} SHREGDEL_FLAGS; 731 732typedef enum { 733 SHREGENUM_DEFAULT = 0, 734 SHREGENUM_HKCU = 0x1, 735 SHREGENUM_HKLM = 0x10, 736 SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU 737} SHREGENUM_FLAGS; 738 739typedef HANDLE HUSKEY; 740typedef HUSKEY *PHUSKEY; 741 742LWSTDAPI_(LONG) SHRegCloseUSKey(_In_ HUSKEY); 743LWSTDAPI_(HKEY) SHRegDuplicateHKey(_In_ HKEY); 744 745LWSTDAPI_(DWORD) SHCopyKeyA(_In_ HKEY, _In_opt_ LPCSTR, _In_ HKEY, _Reserved_ DWORD); 746LWSTDAPI_(DWORD) SHCopyKeyW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ HKEY, _Reserved_ DWORD); 747LWSTDAPI_(DWORD) SHDeleteEmptyKeyA(_In_ HKEY, _In_opt_ LPCSTR); 748LWSTDAPI_(DWORD) SHDeleteEmptyKeyW(_In_ HKEY, _In_opt_ LPCWSTR); 749LWSTDAPI_(DWORD) SHDeleteKeyA(_In_ HKEY, _In_opt_ LPCSTR); 750LWSTDAPI_(DWORD) SHDeleteKeyW(_In_ HKEY, _In_opt_ LPCWSTR); 751LWSTDAPI_(DWORD) SHDeleteOrphanKeyA(HKEY, LPCSTR); 752LWSTDAPI_(DWORD) SHDeleteOrphanKeyW(HKEY, LPCWSTR); 753LWSTDAPI_(DWORD) SHDeleteValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_ LPCSTR); 754LWSTDAPI_(DWORD) SHDeleteValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ LPCWSTR); 755LWSTDAPI_(LONG) SHEnumKeyExA(_In_ HKEY, _In_ DWORD, _Out_writes_(*pcchName) LPSTR, _Inout_ LPDWORD pcchName); 756LWSTDAPI_(LONG) SHEnumKeyExW(_In_ HKEY, _In_ DWORD, _Out_writes_(*pcchName) LPWSTR, _Inout_ LPDWORD pcchName); 757LWSTDAPI_(LONG) SHEnumValueA(_In_ HKEY, _In_ DWORD, _Out_writes_opt_(*pcchValueName) LPSTR, _Inout_opt_ LPDWORD pcchValueName, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); 758LWSTDAPI_(LONG) SHEnumValueW(_In_ HKEY, _In_ DWORD, _Out_writes_opt_(*pcchValueName) LPWSTR, _Inout_opt_ LPDWORD pcchValueName, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); 759LWSTDAPI_(DWORD) SHGetValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_opt_ LPDWORD, _Out_writes_bytes_opt_(*pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); 760LWSTDAPI_(DWORD) SHGetValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_opt_ LPDWORD, _Out_writes_bytes_opt_(*pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); 761LWSTDAPI_(DWORD) SHSetValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPCVOID, _In_ DWORD cbData); 762LWSTDAPI_(DWORD) SHSetValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPCVOID, _In_ DWORD cbData); 763LWSTDAPI_(DWORD) SHQueryValueExA(_In_ HKEY, _In_opt_ LPCSTR, _Reserved_ LPDWORD, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); 764LWSTDAPI_(DWORD) SHQueryValueExW(_In_ HKEY, _In_opt_ LPCWSTR, _Reserved_ LPDWORD, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); 765LWSTDAPI_(LONG) SHQueryInfoKeyA(_In_ HKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD); 766LWSTDAPI_(LONG) SHQueryInfoKeyW(_In_ HKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD); 767LWSTDAPI_(LONG) SHRegCreateUSKeyA(_In_ LPCSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ DWORD); 768LWSTDAPI_(LONG) SHRegCreateUSKeyW(_In_ LPCWSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ DWORD); 769LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyA(_In_ HUSKEY, _In_ LPCSTR, _In_ SHREGDEL_FLAGS); 770LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyW(_In_ HUSKEY, _In_ LPCWSTR, _In_ SHREGDEL_FLAGS); 771LWSTDAPI_(LONG) SHRegDeleteUSValueA(_In_ HUSKEY, _In_ LPCSTR, _In_ SHREGDEL_FLAGS); 772LWSTDAPI_(LONG) SHRegDeleteUSValueW(_In_ HUSKEY, _In_ LPCWSTR, _In_ SHREGDEL_FLAGS); 773LWSTDAPI_(LONG) SHRegEnumUSKeyA(_In_ HUSKEY, _In_ DWORD, _Out_writes_to_(*pcchName, *pcchName) LPSTR, _Inout_ LPDWORD pcchName, _In_ SHREGENUM_FLAGS); 774LWSTDAPI_(LONG) SHRegEnumUSKeyW(_In_ HUSKEY, _In_ DWORD, _Out_writes_to_(*pcchName, *pcchName) LPWSTR, _Inout_ LPDWORD pcchName, _In_ SHREGENUM_FLAGS); 775LWSTDAPI_(LONG) SHRegEnumUSValueA(_In_ HUSKEY, _In_ DWORD, _Out_writes_to_(*pcchValueName, *pcchValueName) LPSTR, _Inout_ LPDWORD pcchValueName, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData, _In_ SHREGENUM_FLAGS); 776LWSTDAPI_(LONG) SHRegEnumUSValueW(_In_ HUSKEY, _In_ DWORD, _Out_writes_to_(*pcchValueName, *pcchValueName) LPWSTR, _Inout_ LPDWORD pcchValueName, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData, _In_ SHREGENUM_FLAGS); 777LWSTDAPI_(BOOL) SHRegGetBoolUSValueA(_In_ LPCSTR, _In_opt_ LPCSTR, _In_ BOOL, _In_ BOOL); 778LWSTDAPI_(BOOL) SHRegGetBoolUSValueW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ BOOL, _In_ BOOL); 779LWSTDAPI_(DWORD) SHRegGetPathA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_writes_(MAX_PATH) LPSTR, _In_ DWORD); 780LWSTDAPI_(DWORD) SHRegGetPathW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_writes_(MAX_PATH) LPWSTR, _In_ DWORD); 781LWSTDAPI_(LONG) SHRegGetUSValueA(_In_ LPCSTR, _In_opt_ LPCSTR, _Inout_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData, _In_ BOOL, _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID, _In_ DWORD dwDefaultDataSize); 782LWSTDAPI_(LONG) SHRegGetUSValueW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _Inout_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData, _In_ BOOL, _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID, _In_ DWORD dwDefaultDataSize); 783LWSTDAPI_(LSTATUS) SHRegGetValueA(_In_ HKEY hkey, _In_opt_ LPCSTR pszSubKey, _In_opt_ LPCSTR pszValue, _In_ SRRF srrfFlags, _Out_opt_ LPDWORD pdwType, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID pvData, _Inout_opt_ LPDWORD pcbData); 784LWSTDAPI_(LSTATUS) SHRegGetValueW(_In_ HKEY hkey, _In_opt_ LPCWSTR pszSubKey, _In_opt_ LPCWSTR pszValue, _In_ SRRF srrfFlags, _Out_opt_ LPDWORD pdwType, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID pvData, _Inout_opt_ LPDWORD pcbData); 785LWSTDAPI_(LONG) SHRegOpenUSKeyA(_In_ LPCSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ BOOL); 786LWSTDAPI_(LONG) SHRegOpenUSKeyW(_In_ LPCWSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ BOOL); 787LWSTDAPI_(LONG) SHRegQueryInfoUSKeyA(_In_ HUSKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _In_ SHREGENUM_FLAGS); 788LWSTDAPI_(LONG) SHRegQueryInfoUSKeyW(_In_ HUSKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _In_ SHREGENUM_FLAGS); 789LWSTDAPI_(LONG) SHRegQueryUSValueA(_In_ HUSKEY, _In_opt_ LPCSTR, _Inout_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData, _In_ BOOL, _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID, _In_opt_ DWORD dwDefaultDataSize); 790LWSTDAPI_(LONG) SHRegQueryUSValueW(_In_ HUSKEY, _In_opt_ LPCWSTR, _Inout_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData, _In_ BOOL, _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID, _In_opt_ DWORD dwDefaultDataSize); 791LWSTDAPI_(DWORD) SHRegSetPathA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ LPCSTR, _In_ DWORD); 792LWSTDAPI_(DWORD) SHRegSetPathW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD); 793LWSTDAPI_(LONG) SHRegSetUSValueA(_In_ LPCSTR, _In_ LPCSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPVOID, _In_opt_ DWORD cbData, _In_opt_ DWORD); 794LWSTDAPI_(LONG) SHRegSetUSValueW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPVOID, _In_opt_ DWORD cbData, _In_opt_ DWORD); 795LWSTDAPI_(LONG) SHRegWriteUSValueA(_In_ HUSKEY, _In_ LPCSTR, _In_ DWORD, _In_reads_bytes_(cbData) LPVOID, _In_ DWORD cbData, _In_ DWORD); 796LWSTDAPI_(LONG) SHRegWriteUSValueW(_In_ HUSKEY, _In_ LPCWSTR, _In_ DWORD, _In_reads_bytes_(cbData) LPVOID, _In_ DWORD cbData, _In_ DWORD); 797/* This only exists for the -W variant. */ 798LWSTDAPI_(int) SHRegGetIntW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ int); 799 800#ifdef UNICODE 801#define SHCopyKey SHCopyKeyW 802#define SHDeleteEmptyKey SHDeleteEmptyKeyW 803#define SHDeleteKey SHDeleteKeyW 804#define SHDeleteOrphanKey SHDeleteOrphanKeyW 805#define SHDeleteValue SHDeleteValueW 806#define SHEnumKeyEx SHEnumKeyExW 807#define SHEnumValue SHEnumValueW 808#define SHGetValue SHGetValueW 809#define SHSetValue SHSetValueW 810#define SHQueryValueEx SHQueryValueExW 811#define SHQueryInfoKey SHQueryInfoKeyW 812#define SHRegCreateUSKey SHRegCreateUSKeyW 813#define SHRegDeleteEmptyUSKey SHRegDeleteEmptyUSKeyW 814#define SHRegDeleteUSValue SHRegDeleteUSValueW 815#define SHRegEnumUSKey SHRegEnumUSKeyW 816#define SHRegEnumUSValue SHRegEnumUSValueW 817#define SHRegGetBoolUSValue SHRegGetBoolUSValueW 818#define SHRegGetPath SHRegGetPathW 819#define SHRegGetUSValue SHRegGetUSValueW 820#define SHRegGetValue SHRegGetValueW 821#define SHRegOpenUSKey SHRegOpenUSKeyW 822#define SHRegQueryInfoUSKey SHRegQueryInfoUSKeyW 823#define SHRegQueryUSValue SHRegQueryUSValueW 824#define SHRegSetPath SHRegSetPathW 825#define SHRegSetUSValue SHRegSetUSValueW 826#define SHRegWriteUSValue SHRegWriteUSValueW 827#define SHRegGetInt SHRegGetIntW 828#else 829#define SHCopyKey SHCopyKeyA 830#define SHDeleteEmptyKey SHDeleteEmptyKeyA 831#define SHDeleteKey SHDeleteKeyA 832#define SHDeleteOrphanKey SHDeleteOrphanKeyA 833#define SHDeleteValue SHDeleteValueA 834#define SHEnumKeyEx SHEnumKeyExA 835#define SHEnumValue SHEnumValueA 836#define SHGetValue SHGetValueA 837#define SHSetValue SHSetValueA 838#define SHQueryValueEx SHQueryValueExA 839#define SHQueryInfoKey SHQueryInfoKeyA 840#define SHRegCreateUSKey SHRegCreateUSKeyA 841#define SHRegDeleteEmptyUSKey SHRegDeleteEmptyUSKeyA 842#define SHRegDeleteUSValue SHRegDeleteUSValueA 843#define SHRegEnumUSKey SHRegEnumUSKeyA 844#define SHRegEnumUSValue SHRegEnumUSValueA 845#define SHRegGetBoolUSValue SHRegGetBoolUSValueA 846#define SHRegGetPath SHRegGetPathA 847#define SHRegGetUSValue SHRegGetUSValueA 848#define SHRegGetValue SHRegGetValueA 849#define SHRegOpenUSKey SHRegOpenUSKeyA 850#define SHRegQueryInfoUSKey SHRegQueryInfoUSKeyA 851#define SHRegQueryUSValue SHRegQueryUSValueA 852#define SHRegSetPath SHRegSetPathA 853#define SHRegSetUSValue SHRegSetUSValueA 854#define SHRegWriteUSValue SHRegWriteUSValueA 855#endif // UNICODE 856 857enum { 858 ASSOCF_NONE = 0x00000000, 859 ASSOCF_INIT_NOREMAPCLSID = 0x00000001, 860 ASSOCF_INIT_BYEXENAME = 0x00000002, 861 ASSOCF_OPEN_BYEXENAME = 0x00000002, 862 ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004, 863 ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008, 864 ASSOCF_NOUSERSETTINGS = 0x00000010, 865 ASSOCF_NOTRUNCATE = 0x00000020, 866 ASSOCF_VERIFY = 0x00000040, 867 ASSOCF_REMAPRUNDLL = 0x00000080, 868 ASSOCF_NOFIXUPS = 0x00000100, 869 ASSOCF_IGNOREBASECLASS = 0x00000200, 870 ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400, 871#if (NTDDI_VERSION >= NTDDI_WIN8) 872 ASSOCF_INIT_FIXED_PROGID = 0x00000800, 873 ASSOCF_IS_PROTOCOL = 0x00001000, 874 ASSOCF_INIT_FOR_FILE = 0x00002000, 875#endif // NTDDI_WIN8 876#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) 877 ASSOCF_IS_FULL_URI = 0x00004000, 878 ASSOCF_PER_MACHINE_ONLY = 0x00008000, 879#endif // NTDDI_WIN10_RS1 880#if (NTDDI_VERSION >= NTDDI_WIN10_RS4) 881ASSOCF_APP_TO_APP = 0x00010000, 882#endif // NTDDI_WIN10_RS4 883}; 884 885typedef enum { 886 ASSOCSTR_COMMAND = 1, 887 ASSOCSTR_EXECUTABLE, 888 ASSOCSTR_FRIENDLYDOCNAME, 889 ASSOCSTR_FRIENDLYAPPNAME, 890 ASSOCSTR_NOOPEN, 891 ASSOCSTR_SHELLNEWVALUE, 892 ASSOCSTR_DDECOMMAND, 893 ASSOCSTR_DDEIFEXEC, 894 ASSOCSTR_DDEAPPLICATION, 895 ASSOCSTR_DDETOPIC, 896 ASSOCSTR_INFOTIP, 897#if (_WIN32_IE >= _WIN32_IE_IE60) 898 ASSOCSTR_QUICKTIP, 899 ASSOCSTR_TILEINFO, 900 ASSOCSTR_CONTENTTYPE, 901 ASSOCSTR_DEFAULTICON, 902 ASSOCSTR_SHELLEXTENSION, 903#endif // _WIN32_IE_IE60 904#if (_WIN32_IE >= _WIN32_IE_IE80) 905 ASSOCSTR_DROPTARGET, 906 ASSOCSTR_DELEGATEEXECUTE, 907#endif // _WIN32_IE_IE80 908 ASSOCSTR_SUPPORTED_URI_PROTOCOLS, 909#if (NTDDI_VERSION >= NTDDI_WIN10) 910 ASSOCSTR_PROGID, 911 ASSOCSTR_APPID, 912 ASSOCSTR_APPPUBLISHER, 913 ASSOCSTR_APPICONREFERENCE, 914#endif // NTDDI_WIN10 915 ASSOCSTR_MAX 916} ASSOCSTR; 917 918typedef enum { 919 ASSOCKEY_SHELLEXECCLASS = 1, 920 ASSOCKEY_APP, 921 ASSOCKEY_CLASS, 922 ASSOCKEY_BASECLASS, 923 ASSOCKEY_MAX 924} ASSOCKEY; 925 926typedef enum { 927 ASSOCDATA_MSIDESCRIPTOR = 1, 928 ASSOCDATA_NOACTIVATEHANDLER, 929 ASSOCDATA_QUERYCLASSSTORE, 930 ASSOCDATA_HASPERUSERASSOC, 931#if (_WIN32_IE >= _WIN32_IE_IE60) 932 ASSOCDATA_EDITFLAGS, 933 ASSOCDATA_VALUE, 934#endif // _WIN32_IE_IE60 935 ASSOCDATA_MAX 936} ASSOCDATA; 937 938typedef enum { 939 ASSOCENUM_NONE 940} ASSOCENUM; 941 942typedef enum { 943 FTA_None = 0x00000000, 944 FTA_Exclude = 0x00000001, 945 FTA_Show = 0x00000002, 946 FTA_HasExtension = 0x00000004, 947 FTA_NoEdit = 0x00000008, 948 FTA_NoRemove = 0x00000010, 949 FTA_NoNewVerb = 0x00000020, 950 FTA_NoEditVerb = 0x00000040, 951 FTA_NoRemoveVerb = 0x00000080, 952 FTA_NoEditDesc = 0x00000100, 953 FTA_NoEditIcon = 0x00000200, 954 FTA_NoEditDflt = 0x00000400, 955 FTA_NoEditVerbCmd = 0x00000800, 956 FTA_NoEditVerbExe = 0x00001000, 957 FTA_NoDDE = 0x00002000, 958 FTA_NoEditMIME = 0x00008000, 959 FTA_OpenIsSafe = 0x00010000, 960 FTA_AlwaysUnsafe = 0x00020000, 961 FTA_NoRecentDocs = 0x00100000, 962 FTA_SafeForElevation = 0x00200000, 963 FTA_AlwaysUseDirectInvoke = 0x00400000 964} FILETYPEATTRIBUTEFLAGS; 965DEFINE_ENUM_FLAG_OPERATORS(FILETYPEATTRIBUTEFLAGS) 966 967typedef DWORD ASSOCF; 968 969#define INTERFACE IQueryAssociations 970DECLARE_INTERFACE_(IQueryAssociations,IUnknown) 971{ 972 STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; 973 STDMETHOD_(ULONG,AddRef)(THIS) PURE; 974 STDMETHOD_(ULONG,Release)(THIS) PURE; 975 976 STDMETHOD(Init)(THIS_ _In_ ASSOCF flags, _In_opt_ LPCWSTR pszAssoc, _In_opt_ HKEY hkProgid, _In_opt_ HWND hwnd) PURE; 977 STDMETHOD(GetString)(THIS_ _In_ ASSOCF flags, _In_ ASSOCSTR str, _In_opt_ LPCWSTR pszExtra, _Out_writes_opt_(*pcchOut) LPWSTR pszOut, _Inout_ DWORD *pcchOut) PURE; 978 STDMETHOD(GetKey)(THIS_ _In_ ASSOCF flags, _In_ ASSOCKEY key, _In_opt_ LPCWSTR pszExtra, _Out_ HKEY *phkeyOut) PURE; 979 STDMETHOD(GetData)(THIS_ _In_ ASSOCF flags, _In_ ASSOCDATA data, _In_opt_ LPCWSTR pszExtra, _Out_writes_bytes_opt_(*pcbOut) LPVOID pvOut, _Inout_opt_ DWORD *pcbOut) PURE; 980 STDMETHOD(GetEnum)(THIS_ _In_ ASSOCF flags, _In_ ASSOCENUM assocenum, _In_opt_ LPCWSTR pszExtra, _In_ REFIID riid, _Outptr_ LPVOID *ppvOut) PURE; 981}; 982#undef INTERFACE 983 984#if !defined(__cplusplus) || defined(CINTERFACE) 985#define IQueryAssociations_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 986#define IQueryAssociations_AddRef(p) (p)->lpVtbl->AddRef(p) 987#define IQueryAssociations_Release(p) (p)->lpVtbl->Release(p) 988#define IQueryAssociations_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d) 989#define IQueryAssociations_GetString(p,a,b,c,d,e) (p)->lpVtbl->GetString(p,a,b,c,d,e) 990#define IQueryAssociations_GetKey(p,a,b,c,d) (p)->lpVtbl->GetKey(p,a,b,c,d) 991#define IQueryAssociations_GetData(p,a,b,c,d,e) (p)->lpVtbl->GetData(p,a,b,c,d,e) 992#define IQueryAssociations_GetEnum(p,a,b,c,d,e) (p)->lpVtbl->GetEnum(p,a,b,c,d,e) 993#endif 994 995typedef struct IQueryAssociations *LPQUERYASSOCIATIONS; 996 997LWSTDAPI AssocCreate(_In_ CLSID, _In_ REFIID, _Outptr_ LPVOID*); 998#if (_WIN32_IE >= _WIN32_IE_IE60SP1) 999LWSTDAPI_(BOOL) AssocIsDangerous(_In_ LPCWSTR); 1000#endif // _WIN32_IE_IE60SP1 1001 1002LWSTDAPI AssocQueryStringA(_In_ ASSOCF, _In_ ASSOCSTR, _In_ LPCSTR, _In_opt_ LPCSTR, _Out_writes_opt_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut); 1003LWSTDAPI AssocQueryStringW(_In_ ASSOCF, _In_ ASSOCSTR, _In_ LPCWSTR, _In_opt_ LPCWSTR, _Out_writes_opt_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut); 1004LWSTDAPI AssocQueryStringByKeyA(_In_ ASSOCF, _In_ ASSOCSTR, _In_ HKEY, _In_opt_ LPCSTR, _Out_writes_opt_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut); 1005LWSTDAPI AssocQueryStringByKeyW(_In_ ASSOCF, _In_ ASSOCSTR, _In_ HKEY, _In_opt_ LPCWSTR, _Out_writes_opt_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut); 1006LWSTDAPI AssocQueryKeyA(_In_ ASSOCF, _In_ ASSOCKEY, _In_ LPCSTR, _In_opt_ LPCSTR, _Out_ PHKEY); 1007LWSTDAPI AssocQueryKeyW(_In_ ASSOCF, _In_ ASSOCKEY, _In_ LPCWSTR, _In_opt_ LPCWSTR, _Out_ PHKEY); 1008 1009#ifdef UNICODE 1010#define AssocQueryString AssocQueryStringW 1011#define AssocQueryStringByKey AssocQueryStringByKeyW 1012#define AssocQueryKey AssocQueryKeyW 1013#else 1014#define AssocQueryString AssocQueryStringA 1015#define AssocQueryStringByKey AssocQueryStringByKeyA 1016#define AssocQueryKey AssocQueryKeyA 1017#endif 1018 1019#endif // NO_SHLWAPI_REG 1020 1021/* Stream functions */ 1022#ifndef NO_SHLWAPI_STREAM 1023 1024LWSTDAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); 1025LWSTDAPI_(IStream *) SHCreateMemStream(_In_reads_bytes_opt_(cbInit) const BYTE *pInit, _In_ UINT cbInit); 1026LWSTDAPI SHCreateStreamOnFileEx(_In_ LPCWSTR, _In_ DWORD, _In_ DWORD, _In_ BOOL, _In_opt_ struct IStream*, _Outptr_ struct IStream**); 1027 1028LWSTDAPI SHCreateStreamOnFileA(_In_ LPCSTR, _In_ DWORD, _Outptr_ struct IStream**); 1029LWSTDAPI SHCreateStreamOnFileW(_In_ LPCWSTR, _In_ DWORD, _Outptr_ struct IStream**); 1030LWSTDAPI_(IStream *) SHOpenRegStreamA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD); 1031LWSTDAPI_(IStream *) SHOpenRegStreamW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD); 1032LWSTDAPI_(IStream *) SHOpenRegStream2A(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD); 1033LWSTDAPI_(IStream *) SHOpenRegStream2W(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD); 1034 1035#ifdef UNICODE 1036#define SHCreateStreamOnFile SHCreateStreamOnFileW 1037#define SHOpenRegStream SHOpenRegStream2W 1038#define SHOpenRegStream2 SHOpenRegStream2W 1039#else 1040#define SHCreateStreamOnFile SHCreateStreamOnFileA 1041#define SHOpenRegStream SHOpenRegStream2A 1042#define SHOpenRegStream2 SHOpenRegStream2A 1043#endif // UNICODE 1044 1045#ifndef _SHLWAPI_ 1046LWSTDAPI IStream_Reset(_In_ struct IStream*); 1047#if !defined(IStream_Read) && defined(__cplusplus) 1048LWSTDAPI IStream_Read(_In_ struct IStream*, _Out_ void*, _In_ ULONG); 1049LWSTDAPI IStream_Write(_In_ struct IStream*, _In_ const void*, _In_ ULONG); 1050#endif 1051#endif // _SHLWAPI_ 1052 1053#endif // NO_SHLWAPI_STREAM 1054 1055/* String functions */ 1056#ifndef NO_SHLWAPI_STRFCNS 1057 1058#define STIF_DEFAULT 0x0L 1059#define STIF_SUPPORT_HEX 0x1L 1060 1061// These functions don't have -A and -W variants 1062LWSTDAPI SHLoadIndirectString(_In_ LPCWSTR, _Out_writes_(cchOutBuf) LPWSTR, _In_ UINT cchOutBuf, _Reserved_ PVOID*); 1063LWSTDAPI StrRetToBSTR(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Outptr_ BSTR*); 1064 1065// These functions only exist as -W variants and don't have suffixless definitions 1066LWSTDAPI_(DWORD) StrCatChainW(_Out_writes_(cchDst) LPWSTR, DWORD cchDst, DWORD, _In_ LPCWSTR); 1067LWSTDAPI_(int) StrCmpLogicalW(_In_ LPCWSTR, _In_ LPCWSTR); 1068#if (_WIN32_IE >= _WIN32_IE_IE60) 1069LWSTDAPI_(LPWSTR) StrStrNW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); 1070LWSTDAPI_(LPWSTR) StrStrNIW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); 1071#endif // _WIN32_IE_IE60 1072 1073// IntlStrEqWorker exists in both an -A and -W variant but doesn't have a suffixless definition 1074LWSTDAPI_(BOOL) IntlStrEqWorkerA(BOOL, _In_reads_(nChar) LPCSTR, _In_reads_(nChar) LPCSTR, int nChar); 1075LWSTDAPI_(BOOL) IntlStrEqWorkerW(BOOL, _In_reads_(nChar) LPCWSTR, _In_reads_(nChar) LPCWSTR, int nChar); 1076 1077// Normal -A and -W functions with a suffixless definition 1078LWSTDAPI_(BOOL) ChrCmpIA (WORD,WORD); 1079LWSTDAPI_(BOOL) ChrCmpIW (WCHAR,WCHAR); 1080#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n) 1081#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n) 1082#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n) 1083#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n) 1084LWSTDAPI SHStrDupA(_In_ LPCSTR psz, _Outptr_ WCHAR** ppwsz); 1085LWSTDAPI SHStrDupW(_In_ LPCWSTR psz, _Outptr_ WCHAR** ppwsz); 1086#define StrCatA lstrcatA 1087LWSTDAPI_(LPWSTR) StrCatW(_Inout_ LPWSTR, _In_ LPCWSTR); 1088LWSTDAPI_(LPSTR) StrCatBuffA(_Inout_updates_(cchDestBuffSize) LPSTR, _In_ LPCSTR, int cchDestBuffSize); 1089LWSTDAPI_(LPWSTR) StrCatBuffW(_Inout_updates_(cchDestBuffSize) LPWSTR, _In_ LPCWSTR, int cchDestBuffSize); 1090LWSTDAPI_(LPSTR) StrChrA(_In_ LPCSTR, WORD); 1091LWSTDAPI_(LPWSTR) StrChrW(_In_ LPCWSTR, WCHAR); 1092LWSTDAPI_(LPSTR) StrChrIA(_In_ LPCSTR, WORD); 1093LWSTDAPI_(LPWSTR) StrChrIW(_In_ LPCWSTR, WCHAR); 1094#define StrCmpA lstrcmpA 1095LWSTDAPI_(int) StrCmpW(_In_ LPCWSTR, _In_ LPCWSTR); 1096#define StrCmpIA lstrcmpiA 1097LWSTDAPI_(int) StrCmpIW(_In_ LPCWSTR, _In_ LPCWSTR); 1098LWSTDAPI_(int) StrCmpNA(_In_ LPCSTR, _In_ LPCSTR, INT); 1099LWSTDAPI_(int) StrCmpNW(_In_ LPCWSTR, _In_ LPCWSTR, INT); 1100LWSTDAPI_(int) StrCmpNIA(_In_ LPCSTR, _In_ LPCSTR, INT); 1101LWSTDAPI_(int) StrCmpNIW(_In_ LPCWSTR, _In_ LPCWSTR, INT); 1102#define StrCpyA lstrcpyA 1103LWSTDAPI_(LPWSTR) StrCpyW(_Out_ LPWSTR, _In_ LPCWSTR); 1104#define StrCpyNA lstrcpynA 1105LWSTDAPI_(LPWSTR) StrCpyNW(_Out_writes_(cchMax) LPWSTR, _In_ LPCWSTR, int cchMax); 1106LWSTDAPI_(int) StrCSpnA(_In_ LPCSTR, _In_ LPCSTR); 1107LWSTDAPI_(int) StrCSpnW(_In_ LPCWSTR, _In_ LPCWSTR); 1108LWSTDAPI_(int) StrCSpnIA(_In_ LPCSTR, _In_ LPCSTR); 1109LWSTDAPI_(int) StrCSpnIW(_In_ LPCWSTR, _In_ LPCWSTR); 1110LWSTDAPI_(LPSTR) StrDupA(_In_ LPCSTR); 1111LWSTDAPI_(LPWSTR) StrDupW(_In_ LPCWSTR); 1112LWSTDAPI_(LPSTR) StrFormatByteSize64A(LONGLONG, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); 1113LWSTDAPI_(LPSTR) StrFormatByteSizeA(DWORD, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); 1114LWSTDAPI_(LPWSTR) StrFormatByteSizeW(LONGLONG, _Out_writes_(cchBuf) LPWSTR, UINT cchBuf); 1115LWSTDAPI_(LPSTR) StrFormatKBSizeA(LONGLONG, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); 1116LWSTDAPI_(LPWSTR) StrFormatKBSizeW(LONGLONG, _Out_writes_(cchBuf) LPWSTR, UINT cchBuf); 1117LWSTDAPI_(int) StrFromTimeIntervalA(_Out_writes_(cchMax) LPSTR, UINT cchMax, DWORD, int); 1118LWSTDAPI_(int) StrFromTimeIntervalW(_Out_writes_(cchMax) LPWSTR, UINT cchMax, DWORD, int); 1119#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c) 1120#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c) 1121#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c) 1122#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c) 1123LWSTDAPI_(BOOL) StrIsIntlEqualA(BOOL, _In_ LPCSTR, _In_ LPCSTR, int); 1124LWSTDAPI_(BOOL) StrIsIntlEqualW(BOOL, _In_ LPCWSTR, _In_ LPCWSTR, int); 1125LWSTDAPI_(LPSTR) StrNCatA(_Inout_updates_(cchMax) LPSTR, LPCSTR, int cchMax); 1126LWSTDAPI_(LPWSTR) StrNCatW(_Inout_updates_(cchMax) LPWSTR, LPCWSTR, int cchMax); 1127LWSTDAPI_(LPSTR) StrPBrkA(_In_ LPCSTR, _In_ LPCSTR); 1128LWSTDAPI_(LPWSTR) StrPBrkW(_In_ LPCWSTR, _In_ LPCWSTR); 1129LWSTDAPI_(LPSTR) StrRChrA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD); 1130LWSTDAPI_(LPWSTR) StrRChrW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR); 1131LWSTDAPI_(LPSTR) StrRChrIA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD); 1132LWSTDAPI_(LPWSTR) StrRChrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR); 1133LWSTDAPI_(LPSTR) StrRStrIA(_In_ LPCSTR, _In_opt_ LPCSTR, _In_ LPCSTR); 1134LWSTDAPI_(LPWSTR) StrRStrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ LPCWSTR); 1135LWSTDAPI StrRetToBufA(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); 1136LWSTDAPI StrRetToBufW(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Out_writes_(cchBuf) LPWSTR, UINT cchBuf); 1137LWSTDAPI StrRetToStrA(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Outptr_ LPSTR*); 1138LWSTDAPI StrRetToStrW(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Outptr_ LPWSTR*); 1139LWSTDAPI_(int) StrSpnA(_In_ LPCSTR psz, _In_ LPCSTR pszSet); 1140LWSTDAPI_(int) StrSpnW(_In_ LPCWSTR psz, _In_ LPCWSTR pszSet); 1141LWSTDAPI_(LPSTR) StrStrA(_In_ LPCSTR pszFirst, _In_ LPCSTR pszSrch); 1142LWSTDAPI_(LPWSTR) StrStrW(_In_ LPCWSTR pszFirst, _In_ LPCWSTR pszSrch); 1143LWSTDAPI_(LPSTR) StrStrIA(_In_ LPCSTR pszFirst, _In_ LPCSTR pszSrch); 1144LWSTDAPI_(LPWSTR) StrStrIW(_In_ LPCWSTR pszFirst, _In_ LPCWSTR pszSrch); 1145LWSTDAPI_(int) StrToIntA(_In_ LPCSTR); 1146LWSTDAPI_(int) StrToIntW(_In_ LPCWSTR); 1147LWSTDAPI_(BOOL) StrToIntExA(_In_ LPCSTR, DWORD, _Out_ int*); 1148LWSTDAPI_(BOOL) StrToIntExW(_In_ LPCWSTR, DWORD, _Out_ int*); 1149LWSTDAPI_(BOOL) StrTrimA(_Inout_ LPSTR, _In_ LPCSTR); 1150LWSTDAPI_(BOOL) StrTrimW(_Inout_ LPWSTR, _In_ LPCWSTR); 1151LWSTDAPIV_(int) wnsprintfA(_Out_writes_(cchDest) LPSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCSTR, ...); 1152LWSTDAPIV_(int) wnsprintfW(_Out_writes_(cchDest) LPWSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCWSTR, ...); 1153LWSTDAPI_(int) wvnsprintfA(_Out_writes_(cchDest) LPSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCSTR, _In_ va_list); 1154LWSTDAPI_(int) wvnsprintfW(_Out_writes_(cchDest) LPWSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCWSTR, _In_ va_list); 1155#if (_WIN32_IE >= _WIN32_IE_IE60) 1156LWSTDAPI_(BOOL) StrToInt64ExA(_In_ LPCSTR, DWORD, _Out_ LONGLONG*); 1157LWSTDAPI_(BOOL) StrToInt64ExW(_In_ LPCWSTR, DWORD, _Out_ LONGLONG*); 1158#endif // _WIN32_IE_IE60 1159#if (_WIN32_IE >= _WIN32_IE_IE60SP2) 1160LWSTDAPI_(BOOL) IsCharSpaceA(CHAR); 1161LWSTDAPI_(BOOL) IsCharSpaceW(WCHAR); 1162#endif // _WIN32_IE_IE60SP2 1163 1164 1165#ifdef UNICODE 1166#define ChrCmpI ChrCmpIW 1167#define IntlStrEqN IntlStrEqNW 1168#define IntlStrEqNI IntlStrEqNIW 1169#define SHStrDup SHStrDupW 1170#define StrCat StrCatW 1171#define StrCatBuff StrCatBuffW 1172#define StrChr StrChrW 1173#define StrChrI StrChrIW 1174#define StrCmp StrCmpW 1175#define StrCmpI StrCmpIW 1176#define StrCmpN StrCmpNW 1177#define StrCmpNI StrCmpNIW 1178#define StrCpy StrCpyW 1179#define StrCpyN StrCpyNW 1180#define StrCSpn StrCSpnW 1181#define StrCSpnI StrCSpnIW 1182#define StrDup StrDupW 1183#define StrFormatByteSize StrFormatByteSizeW 1184#define StrFormatByteSize64 StrFormatByteSizeW 1185#define StrFormatKBSize StrFormatKBSizeW 1186#define StrFromTimeInterval StrFromTimeIntervalW 1187#define StrIntlEqN StrIntlEqNW 1188#define StrIntlEqNI StrIntlEqNIW 1189#define StrIsIntlEqual StrIsIntlEqualW 1190#define StrNCat StrNCatW 1191#define StrPBrk StrPBrkW 1192#define StrRChr StrRChrW 1193#define StrRChrI StrRChrIW 1194#define StrRStrI StrRStrIW 1195#define StrRetToBuf StrRetToBufW 1196#define StrRetToStr StrRetToStrW 1197#define StrSpn StrSpnW 1198#define StrStr StrStrW 1199#define StrStrI StrStrIW 1200#define StrToInt StrToIntW 1201#define StrToIntEx StrToIntExW 1202#define StrTrim StrTrimW 1203#define wnsprintf wnsprintfW 1204#define wvnsprintf wvnsprintfW 1205#if (_WIN32_IE >= _WIN32_IE_IE60) 1206#define StrToInt64Ex StrToInt64ExW 1207#endif // _WIN32_IE_IE60 1208#if (_WIN32_IE >= _WIN32_IE_IE60SP2) 1209#define IsCharSpace IsCharSpaceW 1210#endif // _WIN32_IE_IE60SP2 1211#else 1212#define ChrCmpI ChrCmpIA 1213#define IntlStrEqN IntlStrEqNA 1214#define IntlStrEqNI IntlStrEqNIA 1215#define SHStrDup SHStrDupA 1216#define StrCat StrCatA 1217#define StrCatBuff StrCatBuffA 1218#define StrChr StrChrA 1219#define StrChrI StrChrIA 1220#define StrCmp StrCmpA 1221#define StrCmpI StrCmpIA 1222#define StrCmpN StrCmpNA 1223#define StrCmpNI StrCmpNIA 1224#define StrCpy StrCpyA 1225#define StrCpyN StrCpyNA 1226#define StrCSpn StrCSpnA 1227#define StrCSpnI StrCSpnIA 1228#define StrDup StrDupA 1229#define StrFormatByteSize StrFormatByteSizeA 1230#define StrFormatByteSize64 StrFormatByteSize64A 1231#define StrFormatKBSize StrFormatKBSizeA 1232#define StrFromTimeInterval StrFromTimeIntervalA 1233#define StrIntlEqN StrIntlEqNA 1234#define StrIntlEqNI StrIntlEqNIA 1235#define StrIsIntlEqual StrIsIntlEqualA 1236#define StrNCat StrNCatA 1237#define StrPBrk StrPBrkA 1238#define StrRChr StrRChrA 1239#define StrRChrI StrRChrIA 1240#define StrRStrI StrRStrIA 1241#define StrRetToBuf StrRetToBufA 1242#define StrRetToStr StrRetToStrA 1243#define StrSpn StrSpnA 1244#define StrStr StrStrA 1245#define StrStrI StrStrIA 1246#define StrToInt StrToIntA 1247#define StrToIntEx StrToIntExA 1248#define StrTrim StrTrimA 1249#define wnsprintf wnsprintfA 1250#define wvnsprintf wvnsprintfA 1251#if (_WIN32_IE >= _WIN32_IE_IE60) 1252#define StrToInt64Ex StrToInt64ExA 1253#endif // _WIN32_IE_IE60 1254#if (_WIN32_IE >= _WIN32_IE_IE60SP2) 1255#define IsCharSpace IsCharSpaceA 1256#endif // _WIN32_IE_IE60SP2 1257#endif // UNICODE 1258 1259#if (NTDDI_VERSION >= NTDDI_VISTASP1) 1260typedef int SFBS_FLAGS; 1261 1262enum tagSFBS_FLAGS 1263{ 1264 SFBS_FLAGS_ROUND_TO_NEAREST_DISPLAYED_DIGIT = 0x0001, 1265 SFBS_FLAGS_TRUNCATE_UNDISPLAYED_DECIMAL_DIGITS = 0x0002 1266}; 1267 1268LWSTDAPI StrFormatByteSizeEx(ULONGLONG ull, SFBS_FLAGS flags, _Out_writes_(cchBuf) PWSTR pszBuf, _In_range_(>,0) UINT cchBuf); 1269#endif // NTDDI_VISTASP1 1270 1271#endif // NO_SHLWAPI_STRFCNS 1272 1273#ifdef __cplusplus 1274} 1275#endif // __cplusplus 1276 1277#include <poppack.h> 1278 1279#endif // NOSHLWAPI 1280#endif // _INC_SHLWAPI