From 6762703ce4c0dabdb89f59c1249d874ea5815b65 Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Fri, 17 Oct 2025 09:23:31 -0500 Subject: [PATCH] [PSDK][INCLUDE/WINE] Introduce our own shlwapi.h for PSDK and import wine-10.0 shlwapi.h for Wine code (#8419) - [PSDK] Introduce our own Microsoft compatible and MIT-licensed shlwapi.h and fix breaking changes - [INCLUDE/WINE] Import shlwapi.h from wine-10.0 for use with Wine compatible code - [CMAKELISTS.TXT] Bump up IE version from IE60 to IE60SP2. This is required because we are already using IE60SP2 guarded functionality; the new header unhides this. - [SHLWAPI] Fix breaking changes, including a typo for 'SHGVSPB_GLOBALDEAFAULTS' (should be 'SHGVSPB_GLOBALDEFAULTS') - [MSI] Use wine's shlwapi.h instead of our own in automation.c, don't precompile shlwapi.h. - [URLMON_WINETEST] Primarily use wineheaders for this test --- CMakeLists.txt | 2 +- dll/win32/msi/automation.c | 4 + dll/win32/msi/precomp.h | 2 + dll/win32/shlwapi/ordinal.c | 4 + dll/win32/shlwapi/propbag.cpp | 6 +- .../rostests/winetests/urlmon/CMakeLists.txt | 1 + sdk/include/psdk/shlwapi.h | 3173 ++++++----------- sdk/include/reactos/shellutils.h | 2 +- sdk/include/reactos/shlwapi_undoc.h | 9 +- sdk/include/wine/shlwapi.h | 1221 +++++++ 10 files changed, 2383 insertions(+), 2041 deletions(-) create mode 100644 sdk/include/wine/shlwapi.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ea20aea00e..0c983a7ef4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,7 +238,7 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to # Version Options add_definitions(-DWINVER=0x502 - -D_WIN32_IE=0x600 + -D_WIN32_IE=0x603 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502 diff --git a/dll/win32/msi/automation.c b/dll/win32/msi/automation.c index 36891cc62da..26cf113c78a 100644 --- a/dll/win32/msi/automation.c +++ b/dll/win32/msi/automation.c @@ -30,7 +30,11 @@ #include "msipriv.h" #include "activscp.h" #include "oleauto.h" +#ifdef __REACTOS__ +#include "wine/shlwapi.h" +#else #include "shlwapi.h" +#endif #include "wine/debug.h" #include "msiserver.h" diff --git a/dll/win32/msi/precomp.h b/dll/win32/msi/precomp.h index 99a1cabfcab..f6355679121 100644 --- a/dll/win32/msi/precomp.h +++ b/dll/win32/msi/precomp.h @@ -21,7 +21,9 @@ #include #include #include +#ifndef __REACTOS__ #include +#endif #include #include diff --git a/dll/win32/shlwapi/ordinal.c b/dll/win32/shlwapi/ordinal.c index f4a6cf3bdfe..e0ef146efa0 100644 --- a/dll/win32/shlwapi/ordinal.c +++ b/dll/win32/shlwapi/ordinal.c @@ -3067,7 +3067,11 @@ BOOL WINAPI GUIDFromStringW(LPCWSTR idstr, CLSID *id) * either set to TRUE, or removed depending on whether the browser is deemed * to be integrated. */ +#ifdef __REACTOS__ +UINT WINAPI WhichPlatform(void) +#else DWORD WINAPI WhichPlatform(void) +#endif { static const char szIntegratedBrowser[] = "IntegratedBrowser"; static DWORD dwState = 0; diff --git a/dll/win32/shlwapi/propbag.cpp b/dll/win32/shlwapi/propbag.cpp index b28f4fd40bf..fa36e083184 100644 --- a/dll/win32/shlwapi/propbag.cpp +++ b/dll/win32/shlwapi/propbag.cpp @@ -1392,7 +1392,7 @@ BOOL CViewStatePropertyBag::_CanAccessGlobalDefaultsBag() const if (_CanAccessFolderDefaultsBag()) return TRUE; - return ((m_dwVspbFlags & SHGVSPB_GLOBALDEAFAULTS) == SHGVSPB_GLOBALDEAFAULTS); + return ((m_dwVspbFlags & SHGVSPB_GLOBALDEFAULTS) == SHGVSPB_GLOBALDEFAULTS); } BOOL CViewStatePropertyBag::_CanAccessInheritBag() const @@ -1417,7 +1417,7 @@ void CViewStatePropertyBag::_ResetTryAgainFlag() m_bUserDefaultsBag = FALSE; else if ((m_dwVspbFlags & SHGVSPB_ALLUSERS) && (m_dwVspbFlags & SHGVSPB_PERFOLDER)) m_bFolderDefaultsBag = FALSE; - else if ((m_dwVspbFlags & SHGVSPB_GLOBALDEAFAULTS) == SHGVSPB_GLOBALDEAFAULTS) + else if ((m_dwVspbFlags & SHGVSPB_GLOBALDEFAULTS) == SHGVSPB_GLOBALDEFAULTS) m_bGlobalDefaultsBag = FALSE; } @@ -1678,7 +1678,7 @@ BOOL CViewStatePropertyBag::_EnsureGlobalDefaultsBag(DWORD dwMode, REFIID riid) if (!m_pGlobalDefaultsBag && !m_bGlobalDefaultsBag && _CanAccessGlobalDefaultsBag()) { m_bGlobalDefaultsBag = TRUE; - _CreateBag(NULL, m_pszPath, SHGVSPB_GLOBALDEAFAULTS, dwMode, riid, &m_pGlobalDefaultsBag); + _CreateBag(NULL, m_pszPath, SHGVSPB_GLOBALDEFAULTS, dwMode, riid, &m_pGlobalDefaultsBag); } return (m_pGlobalDefaultsBag != NULL); } diff --git a/modules/rostests/winetests/urlmon/CMakeLists.txt b/modules/rostests/winetests/urlmon/CMakeLists.txt index a2be46fffe2..8092dea1a06 100644 --- a/modules/rostests/winetests/urlmon/CMakeLists.txt +++ b/modules/rostests/winetests/urlmon/CMakeLists.txt @@ -1,4 +1,5 @@ +include_directories(BEFORE ${REACTOS_SOURCE_DIR}/sdk/include/wine) add_definitions(-D__ROS_LONG64__) add_definitions(-DUSE_WINE_TODOS) diff --git a/sdk/include/psdk/shlwapi.h b/sdk/include/psdk/shlwapi.h index 6bcb40e6bfd..80631a34e8d 100644 --- a/sdk/include/psdk/shlwapi.h +++ b/sdk/include/psdk/shlwapi.h @@ -1,1189 +1,544 @@ /* - * SHLWAPI.DLL functions - * - * Copyright (C) 2000 Juergen Schmied - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * PROJECT: ReactOS SDK + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: shlwapi header + * COPYRIGHT: Copyright 2025 Carl Bialorucki (carl.bialorucki@reactos.org) */ -#ifndef __WINE_SHLWAPI_H -#define __WINE_SHLWAPI_H +#ifndef _INC_SHLWAPI +#define _INC_SHLWAPI +#ifndef NOSHLWAPI #include #include #include +#include -#ifndef _SHLWAPI_ -#define LWSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type WINAPI -#define LWSTDAPIV_(type) EXTERN_C DECLSPEC_IMPORT type STDAPIVCALLTYPE +#ifndef WINSHLWAPI +#ifdef __GNUC__ +/* FIXME: HACK: CORE-6504 */ +#define LWSTDAPI_(t) t WINAPI +#define LWSTDAPIV_(t) t WINAPIV #else -#define LWSTDAPI_(type) type WINAPI -#define LWSTDAPIV_(type) type STDAPIVCALLTYPE -#endif -#define LWSTDAPI LWSTDAPI_(HRESULT) +#ifndef _SHLWAPI_ +#define LWSTDAPI_(t) EXTERN_C DECLSPEC_IMPORT t STDAPICALLTYPE +#define LWSTDAPIV_(t) EXTERN_C DECLSPEC_IMPORT t STDAPIVCALLTYPE +#else +#define LWSTDAPI_(t) STDAPI_(t) +#define LWSTDAPIV_(t) STDAPIV_(t) +#endif // _SHLWAPI_ +#endif // __GNUC__ +#define LWSTDAPI LWSTDAPI_(HRESULT) +#define LWSTDAPIV LWSTDAPIV_(HRESULT) +#endif // WINSHLWAPI #ifdef __cplusplus extern "C" { -#endif /* defined(__cplusplus) */ - -#include - -#ifndef NO_SHLWAPI_REG - -/* Registry functions */ - -DWORD WINAPI SHDeleteEmptyKeyA(_In_ HKEY, _In_opt_ LPCSTR); -DWORD WINAPI SHDeleteEmptyKeyW(_In_ HKEY, _In_opt_ LPCWSTR); -#define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey) - -DWORD WINAPI SHDeleteKeyA(_In_ HKEY, _In_opt_ LPCSTR); -DWORD WINAPI SHDeleteKeyW(_In_ HKEY, _In_opt_ LPCWSTR); -#define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey) - -DWORD WINAPI SHDeleteValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_ LPCSTR); -DWORD WINAPI SHDeleteValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ LPCWSTR); -#define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue) - -DWORD -WINAPI -SHGetValueA( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR, - _Out_opt_ LPDWORD, - _Out_writes_bytes_opt_(*pcbData) LPVOID, - _Inout_opt_ LPDWORD pcbData); - -DWORD -WINAPI -SHGetValueW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR, - _Out_opt_ LPDWORD, - _Out_writes_bytes_opt_(*pcbData) LPVOID, - _Inout_opt_ LPDWORD pcbData); - -#define SHGetValue WINELIB_NAME_AW(SHGetValue) - -DWORD -WINAPI -SHSetValueA( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR, - _In_ DWORD, - _In_reads_bytes_opt_(cbData) LPCVOID, - _In_ DWORD cbData); - -DWORD -WINAPI -SHSetValueW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR, - _In_ DWORD, - _In_reads_bytes_opt_(cbData) LPCVOID, - _In_ DWORD cbData); - -#define SHSetValue WINELIB_NAME_AW(SHSetValue) - -DWORD -WINAPI -SHQueryValueExA( - _In_ HKEY, - _In_opt_ LPCSTR, - _Reserved_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, - _Inout_opt_ LPDWORD pcbData); - -DWORD -WINAPI -SHQueryValueExW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _Reserved_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, - _Inout_opt_ LPDWORD pcbData); - -#define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx) - -LONG -WINAPI -SHEnumKeyExA( - _In_ HKEY, - _In_ DWORD, - _Out_writes_(*pcchName) LPSTR, - _Inout_ LPDWORD pcchName); - -LONG -WINAPI -SHEnumKeyExW( - _In_ HKEY, - _In_ DWORD, - _Out_writes_(*pcchName) LPWSTR, - _Inout_ LPDWORD pcchName); - -#define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx) - -LONG -WINAPI -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); - -LONG -WINAPI -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); - -#define SHEnumValue WINELIB_NAME_AW(SHEnumValue) - -LONG -WINAPI -SHQueryInfoKeyA( - _In_ HKEY, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD); - -LONG -WINAPI -SHQueryInfoKeyW( - _In_ HKEY, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD); - -#define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey) - -DWORD -WINAPI -SHRegGetPathA( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR, - _Out_writes_(MAX_PATH) LPSTR, - _In_ DWORD); - -DWORD -WINAPI -SHRegGetPathW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR, - _Out_writes_(MAX_PATH) LPWSTR, - _In_ DWORD); - -#define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath) - -DWORD -WINAPI -SHRegSetPathA( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR, - _In_ LPCSTR, - _In_ DWORD); - -DWORD -WINAPI -SHRegSetPathW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR, - _In_ LPCWSTR, - _In_ DWORD); - -#define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath) - -DWORD -WINAPI -SHCopyKeyA( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_ HKEY, - _Reserved_ DWORD); - -DWORD -WINAPI -SHCopyKeyW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_ HKEY, - _Reserved_ DWORD); - -#define SHCopyKey WINELIB_NAME_AW(SHCopyKey) - -HKEY WINAPI SHRegDuplicateHKey(_In_ HKEY); - -/* SHRegGetValue flags */ -typedef INT SRRF; - -#define SRRF_RT_REG_NONE 0x1 -#define SRRF_RT_REG_SZ 0x2 -#define SRRF_RT_REG_EXPAND_SZ 0x4 -#define SRRF_RT_REG_BINARY 0x8 -#define SRRF_RT_REG_DWORD 0x10 -#define SRRF_RT_REG_MULTI_SZ 0x20 -#define SRRF_RT_REG_QWORD 0x40 - -#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_DWORD) -#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_QWORD) -#define SRRF_RT_ANY 0xffff - -#define SRRF_RM_ANY 0 -#define SRRF_RM_NORMAL 0x10000 -#define SRRF_RM_SAFE 0x20000 -#define SRRF_RM_SAFENETWORK 0x40000 - -#define SRRF_NOEXPAND 0x10000000 -#define SRRF_ZEROONFAILURE 0x20000000 -#define SRRF_NOVIRT 0x40000000 - -LSTATUS -WINAPI -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); - -LSTATUS -WINAPI -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); - -#define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue) - -/* Undocumented registry functions */ - -DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR); -DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR); -#define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey) - - -/* User registry functions */ - -typedef enum -{ - SHREGDEL_DEFAULT = 0, - SHREGDEL_HKCU = 0x1, - SHREGDEL_HKLM = 0x10, - SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU -} SHREGDEL_FLAGS; - -typedef enum -{ - SHREGENUM_DEFAULT = 0, - SHREGENUM_HKCU = 0x1, - SHREGENUM_HKLM = 0x10, - SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU -} SHREGENUM_FLAGS; - -#define SHREGSET_HKCU 0x1 /* Apply to HKCU if empty */ -#define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */ -#define SHREGSET_HKLM 0x4 /* Apply to HKLM if empty */ -#define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */ -#define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM) - -typedef HANDLE HUSKEY; -typedef HUSKEY *PHUSKEY; - -LONG -WINAPI -SHRegCreateUSKeyA( - _In_ LPCSTR, - _In_ REGSAM, - _In_opt_ HUSKEY, - _Out_ PHUSKEY, - _In_ DWORD); - -LONG -WINAPI -SHRegCreateUSKeyW( - _In_ LPCWSTR, - _In_ REGSAM, - _In_opt_ HUSKEY, - _Out_ PHUSKEY, - _In_ DWORD); - -#define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey) - -LONG -WINAPI -SHRegOpenUSKeyA( - _In_ LPCSTR, - _In_ REGSAM, - _In_opt_ HUSKEY, - _Out_ PHUSKEY, - _In_ BOOL); - -LONG -WINAPI -SHRegOpenUSKeyW( - _In_ LPCWSTR, - _In_ REGSAM, - _In_opt_ HUSKEY, - _Out_ PHUSKEY, - _In_ BOOL); - -#define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey) - -LONG -WINAPI -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); - -LONG -WINAPI -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); - -#define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue) - -LONG -WINAPI -SHRegWriteUSValueA( - _In_ HUSKEY, - _In_ LPCSTR, - _In_ DWORD, - _In_reads_bytes_(cbData) LPVOID, - _In_ DWORD cbData, - _In_ DWORD); - -LONG -WINAPI -SHRegWriteUSValueW( - _In_ HUSKEY, - _In_ LPCWSTR, - _In_ DWORD, - _In_reads_bytes_(cbData) LPVOID, - _In_ DWORD cbData, - _In_ DWORD); - -#define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue) - -LONG -WINAPI -SHRegDeleteUSValueA( - _In_ HUSKEY, - _In_ LPCSTR, - _In_ SHREGDEL_FLAGS); - -LONG -WINAPI -SHRegDeleteUSValueW( - _In_ HUSKEY, - _In_ LPCWSTR, - _In_ SHREGDEL_FLAGS); - -#define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue) - -LONG -WINAPI -SHRegDeleteEmptyUSKeyA( - _In_ HUSKEY, - _In_ LPCSTR, - _In_ SHREGDEL_FLAGS); - -LONG -WINAPI -SHRegDeleteEmptyUSKeyW( - _In_ HUSKEY, - _In_ LPCWSTR, - _In_ SHREGDEL_FLAGS); - -#define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey) - -LONG -WINAPI -SHRegEnumUSKeyA( - _In_ HUSKEY, - _In_ DWORD, - _Out_writes_to_(*pcchName, *pcchName) LPSTR, - _Inout_ LPDWORD pcchName, - _In_ SHREGENUM_FLAGS); - -LONG -WINAPI -SHRegEnumUSKeyW( - _In_ HUSKEY, - _In_ DWORD, - _Out_writes_to_(*pcchName, *pcchName) LPWSTR, - _Inout_ LPDWORD pcchName, - _In_ SHREGENUM_FLAGS); - -#define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey) - -LONG -WINAPI -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); - -LONG -WINAPI -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); - -#define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue) - -LONG -WINAPI -SHRegQueryInfoUSKeyA( - _In_ HUSKEY, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _In_ SHREGENUM_FLAGS); - -LONG -WINAPI -SHRegQueryInfoUSKeyW( - _In_ HUSKEY, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _Out_opt_ LPDWORD, - _In_ SHREGENUM_FLAGS); - -#define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey) - -LONG WINAPI SHRegCloseUSKey(_In_ HUSKEY); - -LONG -WINAPI -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); - -LONG -WINAPI -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); - -#define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue) - -LONG -WINAPI -SHRegSetUSValueA( - _In_ LPCSTR, - _In_ LPCSTR, - _In_ DWORD, - _In_reads_bytes_opt_(cbData) LPVOID, - _In_opt_ DWORD cbData, - _In_opt_ DWORD); - -LONG -WINAPI -SHRegSetUSValueW( - _In_ LPCWSTR, - _In_ LPCWSTR, - _In_ DWORD, - _In_reads_bytes_opt_(cbData) LPVOID, - _In_opt_ DWORD cbData, - _In_opt_ DWORD); - -#define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue) - -BOOL -WINAPI -SHRegGetBoolUSValueA( - _In_ LPCSTR, - _In_opt_ LPCSTR, - _In_ BOOL, - _In_ BOOL); - -BOOL -WINAPI -SHRegGetBoolUSValueW( - _In_ LPCWSTR, - _In_opt_ LPCWSTR, - _In_ BOOL, - _In_ BOOL); - -#define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue) - -int WINAPI SHRegGetIntW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ int); - -/* IQueryAssociation and helpers */ -enum -{ - ASSOCF_NONE = 0x0000, - ASSOCF_INIT_NOREMAPCLSID = 0x0001, /* Don't map clsid->progid */ - ASSOCF_INIT_BYEXENAME = 0x0002, /* .exe name given */ - ASSOCF_OPEN_BYEXENAME = 0x0002, /* Synonym */ - ASSOCF_INIT_DEFAULTTOSTAR = 0x0004, /* Use * as base */ - ASSOCF_INIT_DEFAULTTOFOLDER = 0x0008, /* Use folder as base */ - ASSOCF_NOUSERSETTINGS = 0x0010, /* No HKCU reads */ - ASSOCF_NOTRUNCATE = 0x0020, /* Don't truncate return */ - ASSOCF_VERIFY = 0x0040, /* Verify data */ - ASSOCF_REMAPRUNDLL = 0x0080, /* Get rundll args */ - ASSOCF_NOFIXUPS = 0x0100, /* Don't fixup errors */ - ASSOCF_IGNOREBASECLASS = 0x0200, /* Don't read baseclass */ - ASSOCF_INIT_IGNOREUNKNOWN = 0x0400, /* Fail for unknown progid */ - ASSOCF_INIT_FIXED_PROGID = 0x0800, /* Used passed string as progid, don't try to map it */ - ASSOCF_IS_PROTOCOL = 0x1000, /* Treat as protocol, that should be mapped */ - ASSOCF_INIT_FOR_FILE = 0x2000, /* progid is for file extension association */ -}; - -typedef DWORD ASSOCF; - -typedef enum -{ - ASSOCSTR_COMMAND = 1, /* Verb command */ - ASSOCSTR_EXECUTABLE, /* .exe from command string */ - ASSOCSTR_FRIENDLYDOCNAME, /* Friendly doc type name */ - ASSOCSTR_FRIENDLYAPPNAME, /* Friendly .exe name */ - ASSOCSTR_NOOPEN, /* noopen value */ - ASSOCSTR_SHELLNEWVALUE, /* Use shellnew key */ - ASSOCSTR_DDECOMMAND, /* DDE command template */ - ASSOCSTR_DDEIFEXEC, /* DDE command for process create */ - ASSOCSTR_DDEAPPLICATION, /* DDE app name */ - ASSOCSTR_DDETOPIC, /* DDE topic */ - ASSOCSTR_INFOTIP, /* Infotip */ - ASSOCSTR_QUICKTIP, /* Quick infotip */ - ASSOCSTR_TILEINFO, /* Properties for tileview */ - ASSOCSTR_CONTENTTYPE, /* Mimetype */ - ASSOCSTR_DEFAULTICON, /* Icon */ - ASSOCSTR_SHELLEXTENSION, /* GUID for shell extension handler */ - ASSOCSTR_MAX -} ASSOCSTR; - -typedef enum -{ - ASSOCKEY_SHELLEXECCLASS = 1, /* Key for ShellExec */ - ASSOCKEY_APP, /* Application */ - ASSOCKEY_CLASS, /* Progid or class */ - ASSOCKEY_BASECLASS, /* Base class */ - ASSOCKEY_MAX -} ASSOCKEY; - -typedef enum -{ - ASSOCDATA_MSIDESCRIPTOR = 1, /* Component descriptor */ - ASSOCDATA_NOACTIVATEHANDLER, /* Don't activate */ - ASSOCDATA_QUERYCLASSSTORE, /* Look in Class Store */ - ASSOCDATA_HASPERUSERASSOC, /* Use user association */ - ASSOCDATA_EDITFLAGS, /* Edit flags */ - ASSOCDATA_VALUE, /* pszExtra is value */ - ASSOCDATA_MAX -} ASSOCDATA; - -typedef enum -{ - ASSOCENUM_NONE -} ASSOCENUM; - -typedef enum -{ - FTA_None = 0x00000000, - FTA_Exclude = 0x00000001, - FTA_Show = 0x00000002, - FTA_HasExtension = 0x00000004, - FTA_NoEdit = 0x00000008, - FTA_NoRemove = 0x00000010, - FTA_NoNewVerb = 0x00000020, - FTA_NoEditVerb = 0x00000040, - FTA_NoRemoveVerb = 0x00000080, - FTA_NoEditDesc = 0x00000100, - FTA_NoEditIcon = 0x00000200, - FTA_NoEditDflt = 0x00000400, - FTA_NoEditVerbCmd = 0x00000800, - FTA_NoEditVerbExe = 0x00001000, - FTA_NoDDE = 0x00002000, - FTA_NoEditMIME = 0x00008000, - FTA_OpenIsSafe = 0x00010000, - FTA_AlwaysUnsafe = 0x00020000, - FTA_NoRecentDocs = 0x00100000, - FTA_SafeForElevation = 0x00200000, /* Win8+ */ - FTA_AlwaysUseDirectInvoke = 0x00400000 /* Win8+ */ -} FILETYPEATTRIBUTEFLAGS; -DEFINE_ENUM_FLAG_OPERATORS(FILETYPEATTRIBUTEFLAGS) - -typedef struct IQueryAssociations *LPQUERYASSOCIATIONS; - -#define INTERFACE IQueryAssociations -DECLARE_INTERFACE_(IQueryAssociations,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IQueryAssociations methods ***/ - STDMETHOD(Init)(THIS_ _In_ ASSOCF flags, _In_opt_ LPCWSTR pszAssoc, _In_opt_ HKEY hkProgid, _In_opt_ HWND hwnd) PURE; - STDMETHOD(GetString)(THIS_ _In_ ASSOCF flags, _In_ ASSOCSTR str, _In_opt_ LPCWSTR pszExtra, _Out_writes_opt_(*pcchOut) LPWSTR pszOut, _Inout_ DWORD *pcchOut) PURE; - STDMETHOD(GetKey)(THIS_ _In_ ASSOCF flags, _In_ ASSOCKEY key, _In_opt_ LPCWSTR pszExtra, _Out_ HKEY *phkeyOut) PURE; - 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; - STDMETHOD(GetEnum)(THIS_ _In_ ASSOCF flags, _In_ ASSOCENUM assocenum, _In_opt_ LPCWSTR pszExtra, _In_ REFIID riid, _Outptr_ LPVOID *ppvOut) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IQueryAssociations_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IQueryAssociations_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IQueryAssociations_Release(p) (p)->lpVtbl->Release(p) -#define IQueryAssociations_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d) -#define IQueryAssociations_GetString(p,a,b,c,d,e) (p)->lpVtbl->GetString(p,a,b,c,d,e) -#define IQueryAssociations_GetKey(p,a,b,c,d) (p)->lpVtbl->GetKey(p,a,b,c,d) -#define IQueryAssociations_GetData(p,a,b,c,d,e) (p)->lpVtbl->GetData(p,a,b,c,d,e) -#define IQueryAssociations_GetEnum(p,a,b,c,d,e) (p)->lpVtbl->GetEnum(p,a,b,c,d,e) #endif -HRESULT WINAPI AssocCreate(_In_ CLSID, _In_ REFIID, _Outptr_ LPVOID*); +/* + * GLOBAL SHLWAPI DEFINITIONS + * These definitions are always available. + */ -HRESULT -WINAPI -AssocQueryStringA( - _In_ ASSOCF, - _In_ ASSOCSTR, - _In_ LPCSTR, - _In_opt_ LPCSTR, - _Out_writes_opt_(*pcchOut) LPSTR, - _Inout_ LPDWORD pcchOut); +/* SHAutoComplete definitions */ +#define SHACF_DEFAULT 0x00000000 +#define SHACF_FILESYSTEM 0x00000001 +#define SHACF_URLHISTORY 0x00000002 +#define SHACF_URLMRU 0x00000004 +#define SHACF_URLALL (SHACF_URLHISTORY|SHACF_URLMRU) +#define SHACF_USETAB 0x00000008 +#define SHACF_FILESYS_ONLY 0x00000010 +#if (_WIN32_IE >= _WIN32_IE_IE60) +#define SHACF_FILESYS_DIRS 0x00000020 +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE70) +#define SHACF_VIRTUAL_NAMESPACE 0x00000040 +#endif // _WIN32_IE_IE70 +#define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000 +#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000 +#define SHACF_AUTOAPPEND_FORCE_ON 0x40000000 +#define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000 -HRESULT -WINAPI -AssocQueryStringW( - _In_ ASSOCF, - _In_ ASSOCSTR, - _In_ LPCWSTR, - _In_opt_ LPCWSTR, - _Out_writes_opt_(*pcchOut) LPWSTR, - _Inout_ LPDWORD pcchOut); +LWSTDAPI SHAutoComplete(_In_ HWND, DWORD); +LWSTDAPI SHGetThreadRef(_Outptr_ IUnknown**); +LWSTDAPI SHSetThreadRef(_In_opt_ IUnknown*); +LWSTDAPI_(BOOL) SHCreateThread(_In_ LPTHREAD_START_ROUTINE pfnThreadProc, _In_opt_ void* pData, _In_ DWORD flags, _In_opt_ LPTHREAD_START_ROUTINE pfnCallback); +LWSTDAPI_(BOOL) SHSkipJunction(_In_opt_ struct IBindCtx*, _In_ const CLSID*); -#define AssocQueryString WINELIB_NAME_AW(AssocQueryString) +/* SHCreateThread definitions */ +enum { + CTF_INSIST = 0x0001, + CTF_THREAD_REF = 0x0002, + CTF_PROCESS_REF = 0x0004, + CTF_COINIT_STA = 0x0008, + CTF_COINIT = 0x0008, +#if (_WIN32_IE >= _WIN32_IE_IE60) + CTF_FREELIBANDEXIT = 0x0010, + CTF_REF_COUNTED = 0x0020, + CTF_WAIT_ALLOWCOM = 0x0040, +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE70) + CTF_UNUSED = 0x0080, + CTF_INHERITWOW64 = 0x0100, +#endif // _WIN32_IE_IE70 +#if (NTDDI_VERSION >= NTDDI_VISTA) + CTF_WAIT_NO_REENTRANCY = 0x0200, +#endif // NTDDI_VERSION >= NTDDI_VISTA +#if (NTDDI_VERSION >= NTDDI_WIN7) + CTF_KEYBOARD_LOCALE = 0x0400, + CTF_OLEINITIALIZE = 0x0800, + CTF_COINIT_MTA = 0x1000, + CTF_NOADDREFLIB = 0x2000, +#endif // NTDDI_VERSION >= NTDDI_WIN7 +}; -HRESULT -WINAPI -AssocQueryStringByKeyA( - _In_ ASSOCF, - _In_ ASSOCSTR, - _In_ HKEY, - _In_opt_ LPCSTR, - _Out_writes_opt_(*pcchOut) LPSTR, - _Inout_ LPDWORD pcchOut); +/* SHFormatDateTime definitions */ +#define FDTF_SHORTTIME 0x00000001 +#define FDTF_SHORTDATE 0x00000002 +#define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME) +#define FDTF_LONGDATE 0x00000004 +#define FDTF_LONGTIME 0x00000008 +#define FDTF_RELATIVE 0x00000010 +#define FDTF_LTRDATE 0x00000100 +#define FDTF_RTLDATE 0x00000200 +#define FDTF_NOAUTOREADINGORDER 0x00000400 -HRESULT -WINAPI -AssocQueryStringByKeyW( - _In_ ASSOCF, - _In_ ASSOCSTR, - _In_ HKEY, - _In_opt_ LPCWSTR, - _Out_writes_opt_(*pcchOut) LPWSTR, - _Inout_ LPDWORD pcchOut); +/* DLL version definitions */ +#define DLLVER_MAJOR_MASK 0xFFFF000000000000 +#define DLLVER_MINOR_MASK 0x0000FFFF00000000 +#define DLLVER_BUILD_MASK 0x00000000FFFF0000 +#define DLLVER_QFE_MASK 0x000000000000FFFF -#define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey) +#define MAKEDLLVERULL(major, minor, build, qfe) \ + (((ULONGLONG)(major) << 48) | ((ULONGLONG)(minor) << 32) | ((ULONGLONG)(build) << 16) | (ULONGLONG)(qfe)) -HRESULT -WINAPI -AssocQueryKeyA( - _In_ ASSOCF, - _In_ ASSOCKEY, - _In_ LPCSTR, - _In_opt_ LPCSTR, - _Out_ PHKEY); +#define DLLVER_PLATFORM_WINDOWS 0x01 // Windows 9.x +#define DLLVER_PLATFORM_NT 0x02 // Windows NT -HRESULT -WINAPI -AssocQueryKeyW( - _In_ ASSOCF, - _In_ ASSOCKEY, - _In_ LPCWSTR, - _In_opt_ LPCWSTR, - _Out_ PHKEY); +typedef struct _DllVersionInfo { + DWORD cbSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformID; +} DLLVERSIONINFO; -#define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey) +typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *); -BOOL WINAPI AssocIsDangerous(_In_ LPCWSTR); +typedef struct _DLLVERSIONINFO2 { + DLLVERSIONINFO info1; + DWORD dwFlags; + ULONGLONG ullVersion; +} DLLVERSIONINFO2; -#endif /* NO_SHLWAPI_REG */ +STDAPI DllInstall(BOOL, _In_opt_ LPCWSTR) DECLSPEC_HIDDEN; -void WINAPI IUnknown_Set(_Inout_ IUnknown **ppunk, _In_opt_ IUnknown *punk); -void WINAPI IUnknown_AtomicRelease(_Inout_opt_ IUnknown **punk); -HRESULT WINAPI IUnknown_GetWindow(_In_ IUnknown *punk, _Out_ HWND *phwnd); +/* QueryInterface definitions */ +typedef struct +{ + const IID *piid; +#if defined(__REACTOS__) || (WINVER >= _WIN32_WINNT_WIN10) + DWORD dwOffset; +#else + int dwOffset; +#endif +} QITAB, *LPQITAB; -HRESULT -WINAPI -IUnknown_SetSite( - _In_ IUnknown *punk, - _In_opt_ IUnknown *punkSite); +#define OFFSETOFCLASS(base, derived) \ + ((DWORD)(DWORD_PTR)(static_cast((derived*)8))-8) -HRESULT -WINAPI -IUnknown_GetSite( - _In_ IUnknown *punk, - _In_ REFIID riid, - _Outptr_ void **ppv); +#define QITABENTMULTI(Cthis, Ifoo, Iimpl) { &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) } +#define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo) +STDAPI QISearch(_Inout_ void* base, _In_ const QITAB *pqit, _In_ REFIID riid, _Outptr_ void **ppv); -HRESULT -WINAPI -IUnknown_QueryService( - _In_opt_ IUnknown *punk, - _In_ REFGUID guidService, - _In_ REFIID riid, - _Outptr_ void **ppvOut); +/* Miscellaneous shell functions */ +LWSTDAPI_(int) GetMenuPosFromID(_In_ HMENU hMenu, _In_ UINT uID); +LWSTDAPI_(void) IUnknown_AtomicRelease(_Inout_opt_ IUnknown **punk); +LWSTDAPI_(void) IUnknown_Set(_Inout_ IUnknown **ppunk, _In_opt_ IUnknown *punk); +LWSTDAPI IUnknown_GetWindow(_In_ IUnknown *punk, _Out_ HWND *phwnd); +LWSTDAPI IUnknown_SetSite(_In_ IUnknown *punk, _In_opt_ IUnknown *punkSite); +LWSTDAPI IUnknown_GetSite(_In_ IUnknown *punk, _In_ REFIID riid, _Outptr_ void **ppv); +LWSTDAPI IUnknown_QueryService(_In_opt_ IUnknown *punk, _In_ REFGUID guidService, _In_ REFIID riid, _Outptr_ void **ppvOut); +LWSTDAPI IStream_Size(_In_ IStream *pstm, _Out_ ULARGE_INTEGER *pui); + +/* Version gated definitions */ +#if (_WIN32_IE >= _WIN32_IE_IE60) +#define SHGVSPB_PERUSER 0x00000001 +#define SHGVSPB_ALLUSERS 0x00000002 +#define SHGVSPB_PERFOLDER 0x00000004 +#define SHGVSPB_ALLFOLDERS 0x00000008 +#define SHGVSPB_INHERIT 0x00000010 +#define SHGVSPB_ROAM 0x00000020 +#define SHGVSPB_NOAUTODEFAULTS 0x80000000 +#define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER) +#define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS) +#define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS) +#define SHGVSPB_GLOBALDEFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS) + +LWSTDAPI SHGetViewStatePropertyBag(_In_opt_ PCIDLIST_ABSOLUTE pidl, _In_opt_ LPCWSTR bag_name, _In_ DWORD flags, _In_ REFIID riid, _Outptr_ void **ppv); +LWSTDAPI SHReleaseThreadRef(void); +#endif // (_WIN32_IE >= _WIN32_IE_IE60) + +#if (_WIN32_IE >= 0x0602) +LWSTDAPI_(BOOL) IsInternetESCEnabled(void); +#endif // (_WIN32_IE >= 0x0602) + +/* According to Geoff Chappell, SHAllocShared, SHFreeShared, SHLockShared, and SHUnlockShared + * were available in shlwapi.dll starting with IE40. However, Microsoft didn't expose them + * in their public shlwapi header until IE60SP2. + */ +#if (_WIN32_IE >= _WIN32_IE_IE60SP2) +LWSTDAPI_(HANDLE) SHAllocShared(_In_opt_ const void *pvData, _In_ DWORD dwSize, _In_ DWORD dwDestinationProcessId); +LWSTDAPI_(BOOL) SHFreeShared(_In_ HANDLE hData, _In_ DWORD dwProcessId); +LWSTDAPI_(PVOID) SHLockShared(_In_ HANDLE hData, _In_ DWORD dwProcessId); +LWSTDAPI_(BOOL) SHUnlockShared(_In_ void *pvData); +LWSTDAPI SHCreateThreadRef(_Inout_ LONG*, _Outptr_ IUnknown**); +#endif // _WIN32_IE >= _WIN32_IE_IE60SP2 + +/* + * OPTIONAL SHLWAPI DEFINITIONS + * These definitions can be turned on or off depending on what constants are defined. + * + * | Constant | Effect | + * |--------------------|-----------------------------| + * | NO_SHLWAPI_GDI | Disables GDI functions | + * | NO_SHLWAPI_ISOS | Disables IsOS function | + * | NO_SHLWAPI_PATH | Disables path functions | + * | NO_SHLWAPI_REG | Disables registry functions | + * | NO_SHLWAPI_STREAM | Disables stream functions | + * | NO_SHLWAPI_STRFCNS | Disables string functions | + */ + +/* GDI functions */ +#ifndef NO_SHLWAPI_GDI + +LWSTDAPI_(COLORREF) ColorAdjustLuma(COLORREF,int,BOOL); +LWSTDAPI_(COLORREF) ColorHLSToRGB(WORD,WORD,WORD); +LWSTDAPI_(void) ColorRGBToHLS(COLORREF, _Out_ LPWORD, _Out_ LPWORD, _Out_ LPWORD); +LWSTDAPI_(HPALETTE) SHCreateShellPalette(_In_opt_ HDC); + +#endif // NO_SHLWAPI_GDI + +/* IsOS function */ +#ifndef NO_SHLWAPI_ISOS + +#define OS_WINDOWS 0 +#define OS_NT 1 +#define OS_WIN95ORGREATER 2 +#define OS_NT4ORGREATER 3 +/* 4 is omitted on purpose */ +#define OS_WIN98ORGREATER 5 +#define OS_WIN98_GOLD 6 +#define OS_WIN2000ORGREATER 7 +#define OS_WIN2000PRO 8 +#define OS_WIN2000SERVER 9 +#define OS_WIN2000ADVSERVER 10 +#define OS_WIN2000DATACENTER 11 +#define OS_WIN2000TERMINAL 12 +#define OS_EMBEDDED 13 +#define OS_TERMINALCLIENT 14 +#define OS_TERMINALREMOTEADMIN 15 +#define OS_WIN95_GOLD 16 +#define OS_MEORGREATER 17 +#define OS_XPORGREATER 18 +#define OS_HOME 19 +#define OS_PROFESSIONAL 20 +#define OS_DATACENTER 21 +#define OS_ADVSERVER 22 +#define OS_SERVER 23 +#define OS_TERMINALSERVER 24 +#define OS_PERSONALTERMINALSERVER 25 +#define OS_FASTUSERSWITCHING 26 +#define OS_WELCOMELOGONUI 27 +#define OS_DOMAINMEMBER 28 +#define OS_ANYSERVER 29 +#define OS_WOW6432 30 +#define OS_WEBSERVER 31 +#define OS_SMALLBUSINESSSERVER 32 +#define OS_TABLETPC 33 +#define OS_SERVERADMINUI 34 +#define OS_MEDIACENTER 35 +#define OS_APPLIANCE 36 + +LWSTDAPI_(BOOL) IsOS(DWORD dwOS); + +#endif // NO_SHLWAPI_ISOS /* Path functions */ #ifndef NO_SHLWAPI_PATH -/* GetPathCharType return flags */ #define GCT_INVALID 0x0 #define GCT_LFNCHAR 0x1 #define GCT_SHORTCHAR 0x2 #define GCT_WILD 0x4 #define GCT_SEPARATOR 0x8 -LPSTR WINAPI PathAddBackslashA(_Inout_updates_(MAX_PATH) LPSTR); -LPWSTR WINAPI PathAddBackslashW(_Inout_updates_(MAX_PATH) LPWSTR); -#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash) +LWSTDAPI HashData(_In_reads_bytes_(cbData) const unsigned char *, DWORD cbData, _Out_writes_bytes_(cbHash) unsigned char *lpDest, DWORD cbHash); +#if (_WIN32_IE >= _WIN32_IE_IE70) +LWSTDAPI PathCreateFromUrlAlloc(_In_ LPCWSTR pszUrl, _Outptr_ LPWSTR* pszPath, DWORD dwReserved); +#endif // _WIN32_IE_IE70 + +LWSTDAPI_(LPSTR) PathAddBackslashA(_Inout_updates_(MAX_PATH) LPSTR); +LWSTDAPI_(LPWSTR) PathAddBackslashW(_Inout_updates_(MAX_PATH) LPWSTR); +LWSTDAPI_(BOOL) PathAddExtensionA(_Inout_updates_(MAX_PATH) LPSTR, _In_opt_ LPCSTR); +LWSTDAPI_(BOOL) PathAddExtensionW(_Inout_updates_(MAX_PATH) LPWSTR,_In_opt_ LPCWSTR); +LWSTDAPI_(BOOL) PathAppendA(_Inout_updates_(MAX_PATH) LPSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) PathAppendW(_Inout_updates_(MAX_PATH) LPWSTR, _In_ LPCWSTR); +LWSTDAPI_(LPSTR) PathBuildRootA(_Out_writes_(4) LPSTR, int); +LWSTDAPI_(LPWSTR) PathBuildRootW(_Out_writes_(4) LPWSTR, int); +LWSTDAPI_(BOOL) PathCanonicalizeA(_Out_writes_(MAX_PATH) LPSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) PathCanonicalizeW(_Out_writes_(MAX_PATH) LPWSTR, _In_ LPCWSTR); +LWSTDAPI_(LPSTR) PathCombineA(_Out_writes_(MAX_PATH) LPSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR); +LWSTDAPI_(LPWSTR) PathCombineW(_Out_writes_(MAX_PATH) LPWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR); +LWSTDAPI_(BOOL) PathCompactPathA(_In_opt_ HDC, _Inout_updates_(MAX_PATH) LPSTR, _In_ UINT); +LWSTDAPI_(BOOL) PathCompactPathW(_In_opt_ HDC, _Inout_updates_(MAX_PATH) LPWSTR, _In_ UINT); +LWSTDAPI_(BOOL) PathCompactPathExA(_Out_writes_(cchMax) LPSTR, _In_ LPCSTR, _In_ UINT cchMax, _In_ DWORD); +LWSTDAPI_(BOOL) PathCompactPathExW(_Out_writes_(cchMax) LPWSTR, _In_ LPCWSTR, _In_ UINT cchMax, _In_ DWORD); +LWSTDAPI_(int) PathCommonPrefixA(_In_ LPCSTR, _In_ LPCSTR, _Out_writes_opt_(MAX_PATH) LPSTR); +LWSTDAPI_(int) PathCommonPrefixW(_In_ LPCWSTR, _In_ LPCWSTR, _Out_writes_opt_(MAX_PATH) LPWSTR); +LWSTDAPI PathCreateFromUrlA(_In_ LPCSTR, _Out_writes_to_(*pcchPath, *pcchPath) LPSTR, _Inout_ LPDWORD pcchPath, DWORD); +LWSTDAPI PathCreateFromUrlW(_In_ LPCWSTR pszUrl, _Out_writes_to_(*pcchPath, *pcchPath) LPWSTR pszPath, _Inout_ LPDWORD pcchPath, DWORD dwFlags); +LWSTDAPI_(BOOL) PathFileExistsA(_In_ LPCSTR pszPath); +LWSTDAPI_(BOOL) PathFileExistsW(_In_ LPCWSTR pszPath); +LWSTDAPI_(LPSTR) PathFindExtensionA(_In_ LPCSTR pszPath); +LWSTDAPI_(LPWSTR) PathFindExtensionW(_In_ LPCWSTR pszPath); +LWSTDAPI_(LPSTR) PathFindFileNameA(_In_ LPCSTR pszPath); +LWSTDAPI_(LPWSTR) PathFindFileNameW(_In_ LPCWSTR pszPath); +LWSTDAPI_(LPSTR) PathFindNextComponentA(_In_ LPCSTR); +LWSTDAPI_(LPWSTR) PathFindNextComponentW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathFindOnPathA(_Inout_updates_(MAX_PATH) LPSTR, _In_opt_ LPCSTR*); +LWSTDAPI_(BOOL) PathFindOnPathW(_Inout_updates_(MAX_PATH) LPWSTR, _In_opt_ LPCWSTR*); +LWSTDAPI_(LPCSTR) PathFindSuffixArrayA(_In_ LPCSTR, _In_reads_(iArraySize) LPCSTR *, int iArraySize); +LWSTDAPI_(LPCWSTR) PathFindSuffixArrayW(_In_ LPCWSTR, _In_reads_(iArraySize) LPCWSTR *, int iArraySize); +LWSTDAPI_(LPSTR) PathGetArgsA(_In_ LPCSTR pszPath); +LWSTDAPI_(LPWSTR) PathGetArgsW(_In_ LPCWSTR pszPath); +LWSTDAPI_(UINT) PathGetCharTypeA(_In_ UCHAR ch); +LWSTDAPI_(UINT) PathGetCharTypeW(_In_ WCHAR ch); +LWSTDAPI_(int) PathGetDriveNumberA(_In_ LPCSTR); +LWSTDAPI_(int) PathGetDriveNumberW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsContentTypeA(_In_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsContentTypeW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsDirectoryA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsDirectoryW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsDirectoryEmptyA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsDirectoryEmptyW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsFileSpecA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsFileSpecW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsLFNFileSpecA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsLFNFileSpecW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsNetworkPathA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsNetworkPathW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsPrefixA(_In_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsPrefixW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsRelativeA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsRelativeW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsRootA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsRootW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsSameRootA(_In_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsSameRootW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsSystemFolderA(_In_opt_ LPCSTR, _In_ DWORD); +LWSTDAPI_(BOOL) PathIsSystemFolderW(_In_opt_ LPCWSTR, _In_ DWORD); +LWSTDAPI_(BOOL) PathIsUNCA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsUNCW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsUNCServerA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsUNCServerW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsUNCServerShareA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsUNCServerShareW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathIsURLA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathIsURLW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathMakePrettyA(_Inout_ LPSTR); +LWSTDAPI_(BOOL) PathMakePrettyW(_Inout_ LPWSTR); +LWSTDAPI_(BOOL) PathMakeSystemFolderA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathMakeSystemFolderW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathMatchSpecA(_In_ LPCSTR pszFile, _In_ LPCSTR pszSpec); +LWSTDAPI_(BOOL) PathMatchSpecW(_In_ LPCWSTR pszFile, _In_ LPCWSTR pszSpec); +#if (_WIN32_IE >= _WIN32_IE_IE70) +LWSTDAPI PathMatchSpecExA(_In_ LPCSTR, _In_ LPCSTR, _In_ DWORD); +LWSTDAPI PathMatchSpecExW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD); +#endif // _WIN32_IE_IE70 +LWSTDAPI_(int) PathParseIconLocationA(_Inout_ LPSTR); +LWSTDAPI_(int) PathParseIconLocationW(_Inout_ LPWSTR); +LWSTDAPI_(BOOL) PathQuoteSpacesA(_Inout_updates_(MAX_PATH) LPSTR); +LWSTDAPI_(BOOL) PathQuoteSpacesW(_Inout_updates_(MAX_PATH) LPWSTR); +LWSTDAPI_(BOOL) PathRelativePathToA(_Out_writes_(MAX_PATH) LPSTR, _In_ LPCSTR, _In_ DWORD, _In_ LPCSTR, _In_ DWORD); +LWSTDAPI_(BOOL) PathRelativePathToW(_Out_writes_(MAX_PATH) LPWSTR, _In_ LPCWSTR, _In_ DWORD, _In_ LPCWSTR, _In_ DWORD); +LWSTDAPI_(void) PathRemoveArgsA(_Inout_ LPSTR); +LWSTDAPI_(void) PathRemoveArgsW(_Inout_ LPWSTR); +LWSTDAPI_(LPSTR) PathRemoveBackslashA(_Inout_ LPSTR); +LWSTDAPI_(LPWSTR) PathRemoveBackslashW(_Inout_ LPWSTR); +LWSTDAPI_(void) PathRemoveBlanksA(_Inout_ LPSTR); +LWSTDAPI_(void) PathRemoveBlanksW(_Inout_ LPWSTR); +LWSTDAPI_(void) PathRemoveExtensionA(_Inout_ LPSTR); +LWSTDAPI_(void) PathRemoveExtensionW(_Inout_ LPWSTR); +LWSTDAPI_(BOOL) PathRemoveFileSpecA(_Inout_ LPSTR); +LWSTDAPI_(BOOL) PathRemoveFileSpecW(_Inout_ LPWSTR); +LWSTDAPI_(BOOL) PathRenameExtensionA(_Inout_updates_(MAX_PATH) LPSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) PathRenameExtensionW(_Inout_updates_(MAX_PATH) LPWSTR, _In_ LPCWSTR); +LWSTDAPI_(BOOL) PathSearchAndQualifyA(_In_ LPCSTR, _Out_writes_(cchBuf) LPSTR, _In_ UINT cchBuf); +LWSTDAPI_(BOOL) PathSearchAndQualifyW(_In_ LPCWSTR, _Out_writes_(cchBuf) LPWSTR, _In_ UINT cchBuf); +LWSTDAPI_(void) PathSetDlgItemPathA(_In_ HWND, int, LPCSTR); +LWSTDAPI_(void) PathSetDlgItemPathW(_In_ HWND, int, LPCWSTR); +LWSTDAPI_(LPSTR) PathSkipRootA(_In_ LPCSTR); +LWSTDAPI_(LPWSTR) PathSkipRootW(_In_ LPCWSTR); +LWSTDAPI_(void) PathStripPathA(_Inout_ LPSTR); +LWSTDAPI_(void) PathStripPathW(_Inout_ LPWSTR); +LWSTDAPI_(BOOL) PathStripToRootA(_Inout_ LPSTR); +LWSTDAPI_(BOOL) PathStripToRootW(_Inout_ LPWSTR); +LWSTDAPI_(void) PathUndecorateA(_Inout_ LPSTR); +LWSTDAPI_(void) PathUndecorateW(_Inout_ LPWSTR); +LWSTDAPI_(BOOL) PathUnExpandEnvStringsA(_In_ LPCSTR, _Out_writes_(cchBuf) LPSTR, _In_ UINT cchBuf); +LWSTDAPI_(BOOL) PathUnExpandEnvStringsW(_In_ LPCWSTR, _Out_writes_(cchBuf) LPWSTR, _In_ UINT cchBuf); +LWSTDAPI_(BOOL) PathUnmakeSystemFolderA(_In_ LPCSTR); +LWSTDAPI_(BOOL) PathUnmakeSystemFolderW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) PathUnquoteSpacesA(_Inout_ LPSTR); +LWSTDAPI_(BOOL) PathUnquoteSpacesW(_Inout_ LPWSTR); + +#ifdef UNICODE +#define PathAddBackslash PathAddBackslashW +#define PathAddExtension PathAddExtensionW +#define PathAppend PathAppendW +#define PathBuildRoot PathBuildRootW +#define PathCanonicalize PathCanonicalizeW +#define PathCombine PathCombineW +#define PathCompactPath PathCompactPathW +#define PathCompactPathEx PathCompactPathExW +#define PathCommonPrefix PathCommonPrefixW +#define PathCreateFromUrl PathCreateFromUrlW +#define PathFileExists PathFileExistsW +#define PathFindExtension PathFindExtensionW +#define PathFindFileName PathFindFileNameW +#define PathFindNextComponent PathFindNextComponentW +#define PathFindOnPath PathFindOnPathW +#define PathFindSuffixArray PathFindSuffixArrayW +#define PathGetArgs PathGetArgsW +#define PathGetCharType PathGetCharTypeW +#define PathGetDriveNumber PathGetDriveNumberW +#define PathIsContentType PathIsContentTypeW +#define PathIsDirectory PathIsDirectoryW +#define PathIsDirectoryEmpty PathIsDirectoryEmptyW +#define PathIsFileSpec PathIsFileSpecW +#define PathIsLFNFileSpec PathIsLFNFileSpecW +#define PathIsNetworkPath PathIsNetworkPathW +#define PathIsPrefix PathIsPrefixW +#define PathIsRelative PathIsRelativeW +#define PathIsRoot PathIsRootW +#define PathIsSameRoot PathIsSameRootW +#define PathIsSystemFolder PathIsSystemFolderW +#define PathIsUNC PathIsUNCW +#define PathIsUNCServer PathIsUNCServerW +#define PathIsUNCServerShare PathIsUNCServerShareW +#define PathIsURL PathIsURLW +#define PathMakePretty PathMakePrettyW +#define PathMakeSystemFolder PathMakeSystemFolderW +#define PathMatchSpec PathMatchSpecW +#if (_WIN32_IE >= _WIN32_IE_IE70) +#define PathMatchSpecEx PathMatchSpecExW +#endif // _WIN32_IE_IE70 +#define PathParseIconLocation PathParseIconLocationW +#define PathQuoteSpaces PathQuoteSpacesW +#define PathRelativePathTo PathRelativePathToW +#define PathRemoveArgs PathRemoveArgsW +#define PathRemoveBackslash PathRemoveBackslashW +#define PathRemoveBlanks PathRemoveBlanksW +#define PathRemoveExtension PathRemoveExtensionW +#define PathRemoveFileSpec PathRemoveFileSpecW +#define PathRenameExtension PathRenameExtensionW +#define PathSearchAndQualify PathSearchAndQualifyW +#define PathSetDlgItemPath PathSetDlgItemPathW +#define PathSkipRoot PathSkipRootW +#define PathStripPath PathStripPathW +#define PathStripToRoot PathStripToRootW +#define PathUndecorate PathUndecorateW +#define PathUnExpandEnvStrings PathUnExpandEnvStringsW +#define PathUnmakeSystemFolder PathUnmakeSystemFolderW +#define PathUnquoteSpaces PathUnquoteSpacesW +#else +#define PathAddBackslash PathAddBackslashA +#define PathAddExtension PathAddExtensionA +#define PathAppend PathAppendA +#define PathBuildRoot PathBuildRootA +#define PathCanonicalize PathCanonicalizeA +#define PathCombine PathCombineA +#define PathCompactPath PathCompactPathA +#define PathCompactPathEx PathCompactPathExA +#define PathCommonPrefix PathCommonPrefixA +#define PathCreateFromUrl PathCreateFromUrlA +#define PathFileExists PathFileExistsA +#define PathFindExtension PathFindExtensionA +#define PathFindFileName PathFindFileNameA +#define PathFindNextComponent PathFindNextComponentA +#define PathFindOnPath PathFindOnPathA +#define PathFindSuffixArray PathFindSuffixArrayA +#define PathGetArgs PathGetArgsA +#define PathGetCharType PathGetCharTypeA +#define PathGetDriveNumber PathGetDriveNumberA +#define PathIsContentType PathIsContentTypeA +#define PathIsDirectory PathIsDirectoryA +#define PathIsDirectoryEmpty PathIsDirectoryEmptyA +#define PathIsFileSpec PathIsFileSpecA +#define PathIsLFNFileSpec PathIsLFNFileSpecA +#define PathIsNetworkPath PathIsNetworkPathA +#define PathIsPrefix PathIsPrefixA +#define PathIsRelative PathIsRelativeA +#define PathIsRoot PathIsRootA +#define PathIsSameRoot PathIsSameRootA +#define PathIsSystemFolder PathIsSystemFolderA +#define PathIsUNC PathIsUNCA +#define PathIsUNCServer PathIsUNCServerA +#define PathIsUNCServerShare PathIsUNCServerShareA +#define PathIsURL PathIsURLA +#define PathMakePretty PathMakePrettyA +#define PathMakeSystemFolder PathMakeSystemFolderA +#define PathMatchSpec PathMatchSpecA +#if (_WIN32_IE >= _WIN32_IE_IE70) +#define PathMatchSpecEx PathMatchSpecExA +#endif // _WIN32_IE_IE70 +#define PathParseIconLocation PathParseIconLocationA +#define PathQuoteSpaces PathQuoteSpacesA +#define PathRelativePathTo PathRelativePathToA +#define PathRemoveArgs PathRemoveArgsA +#define PathRemoveBackslash PathRemoveBackslashA +#define PathRemoveBlanks PathRemoveBlanksA +#define PathRemoveExtension PathRemoveExtensionA +#define PathRemoveFileSpec PathRemoveFileSpecA +#define PathRenameExtension PathRenameExtensionA +#define PathSearchAndQualify PathSearchAndQualifyA +#define PathSetDlgItemPath PathSetDlgItemPathA +#define PathSkipRoot PathSkipRootA +#define PathStripPath PathStripPathA +#define PathStripToRoot PathStripToRootA +#define PathUndecorate PathUndecorateA +#define PathUnExpandEnvStrings PathUnExpandEnvStringsA +#define PathUnmakeSystemFolder PathUnmakeSystemFolderA +#define PathUnquoteSpaces PathUnquoteSpacesA +#endif // UNICODE + +#define URL_APPLY_DEFAULT 0x00000001 +#define URL_APPLY_GUESSSCHEME 0x00000002 +#define URL_APPLY_GUESSFILE 0x00000004 +#define URL_APPLY_FORCEAPPLY 0x00000008 +#define URL_ESCAPE_PERCENT 0x00001000 +#define URL_ESCAPE_SEGMENT_ONLY 0x00002000 +#define URL_FILE_USE_PATHURL 0x00010000 +#define URL_ESCAPE_AS_UTF8 0x00040000 +#define URL_UNESCAPE_INPLACE 0x00100000 +#define URL_CONVERT_IF_DOSPATH 0x00200000 +#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000 +#define URL_INTERNAL_PATH 0x00800000 +#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000 +#define URL_ESCAPE_SPACES_ONLY 0x04000000 +#define URL_DONT_SIMPLIFY 0x08000000 +#define URL_UNESCAPE 0x10000000 +#define URL_ESCAPE_UNSAFE 0x20000000 +#define URL_PLUGGABLE_PROTOCOL 0x40000000 +#define URL_WININET_COMPATIBILITY 0x80000000 +#define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8 +#define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8 +#define URL_NO_META URL_DONT_SIMPLIFY +#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO +#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO -BOOL -WINAPI -PathAddExtensionA( - _Inout_updates_(MAX_PATH) LPSTR, - _In_opt_ LPCSTR); - -BOOL -WINAPI -PathAddExtensionW( - _Inout_updates_(MAX_PATH) LPWSTR, - _In_opt_ LPCWSTR); - -#define PathAddExtension WINELIB_NAME_AW(PathAddExtension) - -BOOL WINAPI PathAppendA(_Inout_updates_(MAX_PATH) LPSTR, _In_ LPCSTR); -BOOL WINAPI PathAppendW(_Inout_updates_(MAX_PATH) LPWSTR, _In_ LPCWSTR); -#define PathAppend WINELIB_NAME_AW(PathAppend) - -LPSTR WINAPI PathBuildRootA(_Out_writes_(4) LPSTR, int); -LPWSTR WINAPI PathBuildRootW(_Out_writes_(4) LPWSTR, int); -#define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot) - -BOOL WINAPI PathCanonicalizeA(_Out_writes_(MAX_PATH) LPSTR, _In_ LPCSTR); -BOOL WINAPI PathCanonicalizeW(_Out_writes_(MAX_PATH) LPWSTR, _In_ LPCWSTR); -#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize) - -HRESULT WINAPI PathMatchSpecExA(LPCSTR,LPCSTR,DWORD); -HRESULT WINAPI PathMatchSpecExW(LPCWSTR,LPCWSTR,DWORD); -#define PathMatchSpecEx WINELIB_NAME_AW(PathMatchSpecEx) - -HRESULT WINAPI PathMatchSpecExA(LPCSTR,LPCSTR,DWORD); -HRESULT WINAPI PathMatchSpecExW(LPCWSTR,LPCWSTR,DWORD); -#define PathMatchSpecEx WINELIB_NAME_AW(PathMatchSpecEx) - -LPSTR -WINAPI -PathCombineA( - _Out_writes_(MAX_PATH) LPSTR, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR); - -LPWSTR -WINAPI -PathCombineW( - _Out_writes_(MAX_PATH) LPWSTR, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR); - -#define PathCombine WINELIB_NAME_AW(PathCombine) - -BOOL -WINAPI -PathCompactPathA( - _In_opt_ HDC, - _Inout_updates_(MAX_PATH) LPSTR, - _In_ UINT); - -BOOL -WINAPI -PathCompactPathW( - _In_opt_ HDC, - _Inout_updates_(MAX_PATH) LPWSTR, - _In_ UINT); - -#define PathCompactPath WINELIB_NAME_AW(PathCompactPath) - -BOOL -WINAPI -PathCompactPathExA( - _Out_writes_(cchMax) LPSTR, - _In_ LPCSTR, - _In_ UINT cchMax, - _In_ DWORD); - -BOOL -WINAPI -PathCompactPathExW( - _Out_writes_(cchMax) LPWSTR, - _In_ LPCWSTR, - _In_ UINT cchMax, - _In_ DWORD); - -#define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx) - -int -WINAPI -PathCommonPrefixA( - _In_ LPCSTR, - _In_ LPCSTR, - _Out_writes_opt_(MAX_PATH) LPSTR); - -int -WINAPI -PathCommonPrefixW( - _In_ LPCWSTR, - _In_ LPCWSTR, - _Out_writes_opt_(MAX_PATH) LPWSTR); - -#define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix) - -HRESULT -WINAPI -PathCreateFromUrlA( - _In_ LPCSTR, - _Out_writes_to_(*pcchPath, *pcchPath) LPSTR, - _Inout_ LPDWORD pcchPath, - DWORD); - -HRESULT -WINAPI -PathCreateFromUrlW( - _In_ LPCWSTR pszUrl, - _Out_writes_to_(*pcchPath, *pcchPath) LPWSTR pszPath, - _Inout_ LPDWORD pcchPath, - DWORD dwFlags); - -#define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl) - -HRESULT WINAPI PathCreateFromUrlAlloc(_In_ LPCWSTR pszUrl, _Outptr_ LPWSTR* pszPath, DWORD dwReserved); - -BOOL WINAPI PathFileExistsA(_In_ LPCSTR pszPath); -BOOL WINAPI PathFileExistsW(_In_ LPCWSTR pszPath); -#define PathFileExists WINELIB_NAME_AW(PathFileExists) - -BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR lpszPath,DWORD* dwAttr); -BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath,DWORD* dwAttr); -#define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes) - -LPSTR WINAPI PathFindExtensionA(_In_ LPCSTR pszPath); -LPWSTR WINAPI PathFindExtensionW(_In_ LPCWSTR pszPath); -#define PathFindExtension WINELIB_NAME_AW(PathFindExtension) - -LPSTR WINAPI PathFindFileNameA(_In_ LPCSTR pszPath); -LPWSTR WINAPI PathFindFileNameW(_In_ LPCWSTR pszPath); -#define PathFindFileName WINELIB_NAME_AW(PathFindFileName) - -LPSTR WINAPI PathFindNextComponentA(_In_ LPCSTR); -LPWSTR WINAPI PathFindNextComponentW(_In_ LPCWSTR); -#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent) - -BOOL WINAPI PathFindOnPathA(_Inout_updates_(MAX_PATH) LPSTR, _In_opt_ LPCSTR*); -BOOL WINAPI PathFindOnPathW(_Inout_updates_(MAX_PATH) LPWSTR, _In_opt_ LPCWSTR*); -#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath) - -LPSTR WINAPI PathGetArgsA(_In_ LPCSTR pszPath); -LPWSTR WINAPI PathGetArgsW(_In_ LPCWSTR pszPath); -#define PathGetArgs WINELIB_NAME_AW(PathGetArgs) - -UINT WINAPI PathGetCharTypeA(_In_ UCHAR ch); -UINT WINAPI PathGetCharTypeW(_In_ WCHAR ch); -#define PathGetCharType WINELIB_NAME_AW(PathGetCharType) - -int WINAPI PathGetDriveNumberA(_In_ LPCSTR); -int WINAPI PathGetDriveNumberW(_In_ LPCWSTR); -#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber) - -BOOL WINAPI PathIsDirectoryA(_In_ LPCSTR); -BOOL WINAPI PathIsDirectoryW(_In_ LPCWSTR); -#define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory) - -BOOL WINAPI PathIsDirectoryEmptyA(_In_ LPCSTR); -BOOL WINAPI PathIsDirectoryEmptyW(_In_ LPCWSTR); -#define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty) - -BOOL WINAPI PathIsFileSpecA(_In_ LPCSTR); -BOOL WINAPI PathIsFileSpecW(_In_ LPCWSTR); -#define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec); - -BOOL WINAPI PathIsPrefixA(_In_ LPCSTR, _In_ LPCSTR); -BOOL WINAPI PathIsPrefixW(_In_ LPCWSTR, _In_ LPCWSTR); -#define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix) - -BOOL WINAPI PathIsRelativeA(_In_ LPCSTR); -BOOL WINAPI PathIsRelativeW(_In_ LPCWSTR); -#define PathIsRelative WINELIB_NAME_AW(PathIsRelative) - -BOOL WINAPI PathIsRootA(_In_ LPCSTR); -BOOL WINAPI PathIsRootW(_In_ LPCWSTR); -#define PathIsRoot WINELIB_NAME_AW(PathIsRoot) - -BOOL WINAPI PathIsSameRootA(_In_ LPCSTR, _In_ LPCSTR); -BOOL WINAPI PathIsSameRootW(_In_ LPCWSTR, _In_ LPCWSTR); -#define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot) - -BOOL WINAPI PathIsUNCA(_In_ LPCSTR); -BOOL WINAPI PathIsUNCW(_In_ LPCWSTR); -#define PathIsUNC WINELIB_NAME_AW(PathIsUNC) - -BOOL WINAPI PathIsUNCServerA(_In_ LPCSTR); -BOOL WINAPI PathIsUNCServerW(_In_ LPCWSTR); -#define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer) - -BOOL WINAPI PathIsUNCServerShareA(_In_ LPCSTR); -BOOL WINAPI PathIsUNCServerShareW(_In_ LPCWSTR); -#define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare) - -BOOL WINAPI PathIsContentTypeA(_In_ LPCSTR, _In_ LPCSTR); -BOOL WINAPI PathIsContentTypeW(_In_ LPCWSTR, _In_ LPCWSTR); -#define PathIsContentType WINELIB_NAME_AW(PathIsContentType) - -BOOL WINAPI PathIsURLA(_In_ LPCSTR); -BOOL WINAPI PathIsURLW(_In_ LPCWSTR); -#define PathIsURL WINELIB_NAME_AW(PathIsURL) - -BOOL WINAPI PathMakePrettyA(_Inout_ LPSTR); -BOOL WINAPI PathMakePrettyW(_Inout_ LPWSTR); -#define PathMakePretty WINELIB_NAME_AW(PathMakePretty) - -BOOL WINAPI PathMatchSpecA(_In_ LPCSTR, _In_ LPCSTR); -BOOL WINAPI PathMatchSpecW(_In_ LPCWSTR, _In_ LPCWSTR); -#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec) - -int WINAPI PathParseIconLocationA(_Inout_ LPSTR); -int WINAPI PathParseIconLocationW(_Inout_ LPWSTR); -#define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation) - -VOID WINAPI PathQuoteSpacesA(_Inout_updates_(MAX_PATH) LPSTR); -VOID WINAPI PathQuoteSpacesW(_Inout_updates_(MAX_PATH) LPWSTR); -#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces) - -BOOL -WINAPI -PathRelativePathToA( - _Out_writes_(MAX_PATH) LPSTR, - _In_ LPCSTR, - _In_ DWORD, - _In_ LPCSTR, - _In_ DWORD); - -BOOL -WINAPI -PathRelativePathToW( - _Out_writes_(MAX_PATH) LPWSTR, - _In_ LPCWSTR, - _In_ DWORD, - _In_ LPCWSTR, - _In_ DWORD); - -#define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo) - -VOID WINAPI PathRemoveArgsA(_Inout_ LPSTR); -VOID WINAPI PathRemoveArgsW(_Inout_ LPWSTR); -#define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs) - -LPSTR WINAPI PathRemoveBackslashA(_Inout_ LPSTR); -LPWSTR WINAPI PathRemoveBackslashW(_Inout_ LPWSTR); -#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash) - -VOID WINAPI PathRemoveBlanksA(_Inout_ LPSTR); -VOID WINAPI PathRemoveBlanksW(_Inout_ LPWSTR); -#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks) - -VOID WINAPI PathRemoveExtensionA(_Inout_ LPSTR); -VOID WINAPI PathRemoveExtensionW(_Inout_ LPWSTR); -#define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension) - -BOOL WINAPI PathRemoveFileSpecA(_Inout_ LPSTR); -BOOL WINAPI PathRemoveFileSpecW(_Inout_ LPWSTR); -#define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec) - -BOOL -WINAPI -PathRenameExtensionA( - _Inout_updates_(MAX_PATH) LPSTR, - _In_ LPCSTR); - -BOOL -WINAPI -PathRenameExtensionW( - _Inout_updates_(MAX_PATH) LPWSTR, - _In_ LPCWSTR); - -#define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension) - -BOOL -WINAPI -PathSearchAndQualifyA( - _In_ LPCSTR, - _Out_writes_(cchBuf) LPSTR, - _In_ UINT cchBuf); - -BOOL -WINAPI -PathSearchAndQualifyW( - _In_ LPCWSTR, - _Out_writes_(cchBuf) LPWSTR, - _In_ UINT cchBuf); - -#define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify) - -VOID WINAPI PathSetDlgItemPathA(_In_ HWND, int, LPCSTR); -VOID WINAPI PathSetDlgItemPathW(_In_ HWND, int, LPCWSTR); -#define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath) - -LPSTR WINAPI PathSkipRootA(_In_ LPCSTR); -LPWSTR WINAPI PathSkipRootW(_In_ LPCWSTR); -#define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot) - -VOID WINAPI PathStripPathA(_Inout_ LPSTR); -VOID WINAPI PathStripPathW(_Inout_ LPWSTR); -#define PathStripPath WINELIB_NAME_AW(PathStripPath) - -BOOL WINAPI PathStripToRootA(_Inout_ LPSTR); -BOOL WINAPI PathStripToRootW(_Inout_ LPWSTR); -#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot) - -VOID WINAPI PathUnquoteSpacesA(_Inout_ LPSTR); -VOID WINAPI PathUnquoteSpacesW(_Inout_ LPWSTR); -#define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces) - -BOOL WINAPI PathMakeSystemFolderA(_In_ LPCSTR); -BOOL WINAPI PathMakeSystemFolderW(_In_ LPCWSTR); -#define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder) - -BOOL WINAPI PathUnmakeSystemFolderA(_In_ LPCSTR); -BOOL WINAPI PathUnmakeSystemFolderW(_In_ LPCWSTR); -#define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder) - -BOOL WINAPI PathIsSystemFolderA(_In_opt_ LPCSTR, _In_ DWORD); -BOOL WINAPI PathIsSystemFolderW(_In_opt_ LPCWSTR, _In_ DWORD); -#define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder) - -BOOL WINAPI PathIsNetworkPathA(_In_ LPCSTR); -BOOL WINAPI PathIsNetworkPathW(_In_ LPCWSTR); -#define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath) - -BOOL WINAPI PathIsLFNFileSpecA(_In_ LPCSTR); -BOOL WINAPI PathIsLFNFileSpecW(_In_ LPCWSTR); -#define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec) - -LPCSTR -WINAPI -PathFindSuffixArrayA( - _In_ LPCSTR, - _In_reads_(iArraySize) LPCSTR *, - int iArraySize); - -LPCWSTR -WINAPI -PathFindSuffixArrayW( - _In_ LPCWSTR, - _In_reads_(iArraySize) LPCWSTR *, - int iArraySize); - -#define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray) - -VOID WINAPI PathUndecorateA(_Inout_ LPSTR); -VOID WINAPI PathUndecorateW(_Inout_ LPWSTR); -#define PathUndecorate WINELIB_NAME_AW(PathUndecorate) - -BOOL -WINAPI -PathUnExpandEnvStringsA( - _In_ LPCSTR, - _Out_writes_(cchBuf) LPSTR, - _In_ UINT cchBuf); - -BOOL -WINAPI -PathUnExpandEnvStringsW( - _In_ LPCWSTR, - _Out_writes_(cchBuf) LPWSTR, - _In_ UINT cchBuf); - -#define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings) - -/* Url functions */ typedef enum { URL_SCHEME_INVALID = -1, URL_SCHEME_UNKNOWN = 0, @@ -1205,18 +560,27 @@ typedef enum { URL_SCHEME_VBSCRIPT, URL_SCHEME_ABOUT, URL_SCHEME_RES, +#if (_WIN32_IE >= _WIN32_IE_IE60) URL_SCHEME_MSSHELLROOTED, URL_SCHEME_MSSHELLIDLIST, URL_SCHEME_MSHELP, +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE70) URL_SCHEME_MSSHELLDEVICE, URL_SCHEME_WILDCARD, +#endif // _WIN32_IE_IE70 +#if (NTDDI_VERSION >= NTDDI_VISTA) URL_SCHEME_SEARCH_MS, +#endif // NTDDI_VISTA +#if (NTDDI_VERSION >= NTDDI_VISTASP1) URL_SCHEME_SEARCH, +#endif // NTDDI_VISTASP1 +#if (NTDDI_VERSION >= NTDDI_WIN7) URL_SCHEME_KNOWNFOLDER, +#endif // NTDDI_WIN7 URL_SCHEME_MAXVALUE } URL_SCHEME; -/* These are used by UrlGetPart routine */ typedef enum { URL_PART_NONE = 0, URL_PART_SCHEME = 1, @@ -1229,7 +593,6 @@ typedef enum { #define URL_PARTFLAG_KEEPSCHEME 0x00000001 -/* These are used by the UrlIs... routines */ typedef enum { URLIS_URL, URLIS_OPAQUE, @@ -1240,231 +603,6 @@ typedef enum { URLIS_HASQUERY } URLIS; -/* This is used by the UrlApplyScheme... routines */ -#define URL_APPLY_FORCEAPPLY 0x00000008 -#define URL_APPLY_GUESSFILE 0x00000004 -#define URL_APPLY_GUESSSCHEME 0x00000002 -#define URL_APPLY_DEFAULT 0x00000001 - -/* The following are used by UrlEscape..., UrlUnEscape..., - * UrlCanonicalize..., and UrlCombine... routines - */ -#define URL_WININET_COMPATIBILITY 0x80000000 -#define URL_PLUGGABLE_PROTOCOL 0x40000000 -#define URL_ESCAPE_UNSAFE 0x20000000 -#define URL_UNESCAPE 0x10000000 - -#define URL_DONT_SIMPLIFY 0x08000000 -#define URL_NO_META URL_DONT_SIMPLIFY -#define URL_ESCAPE_SPACES_ONLY 0x04000000 -#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000 -#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO -#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO - -#define URL_INTERNAL_PATH 0x00800000 /* Will escape #'s in paths */ -#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000 -#define URL_CONVERT_IF_DOSPATH 0x00200000 -#define URL_UNESCAPE_INPLACE 0x00100000 - -#define URL_FILE_USE_PATHURL 0x00010000 -#define URL_ESCAPE_AS_UTF8 0x00040000 - -#define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8 -#define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8 - -#define URL_ESCAPE_SEGMENT_ONLY 0x00002000 -#define URL_ESCAPE_PERCENT 0x00001000 - -HRESULT -WINAPI -UrlApplySchemeA( - _In_ LPCSTR, - _Out_writes_(*pcchOut) LPSTR, - _Inout_ LPDWORD pcchOut, - DWORD); - -HRESULT -WINAPI -UrlApplySchemeW( - _In_ LPCWSTR, - _Out_writes_(*pcchOut) LPWSTR, - _Inout_ LPDWORD pcchOut, - DWORD); - -#define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme) - -HRESULT -WINAPI -UrlCanonicalizeA( - _In_ LPCSTR, - _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPSTR, - _Inout_ LPDWORD pcchCanonicalized, - DWORD); - -HRESULT -WINAPI -UrlCanonicalizeW( - _In_ LPCWSTR, - _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPWSTR, - _Inout_ LPDWORD pcchCanonicalized, - DWORD); - -#define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize) - -HRESULT -WINAPI -UrlCombineA( - _In_ LPCSTR, - _In_ LPCSTR, - _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPSTR, - _Inout_ LPDWORD pcchCombined, - DWORD); - -HRESULT -WINAPI -UrlCombineW( - _In_ LPCWSTR, - _In_ LPCWSTR, - _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPWSTR, - _Inout_ LPDWORD pcchCombined, - DWORD); - -#define UrlCombine WINELIB_NAME_AW(UrlCombine) - -INT WINAPI UrlCompareA(_In_ LPCSTR, _In_ LPCSTR, BOOL); -INT WINAPI UrlCompareW(_In_ LPCWSTR, _In_ LPCWSTR, BOOL); -#define UrlCompare WINELIB_NAME_AW(UrlCompare) - -HRESULT -WINAPI -UrlEscapeA( - _In_ LPCSTR, - _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPSTR, - _Inout_ LPDWORD pcchEscaped, - DWORD); - -HRESULT -WINAPI -UrlEscapeW( - _In_ LPCWSTR, - _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPWSTR, - _Inout_ LPDWORD pcchEscaped, - DWORD); - -#define UrlEscape WINELIB_NAME_AW(UrlEscape) - -#define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \ - URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY) -#define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \ - URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY) -#define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces) - -LPCSTR WINAPI UrlGetLocationA(_In_ LPCSTR); -LPCWSTR WINAPI UrlGetLocationW(_In_ LPCWSTR); -#define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation) - -HRESULT -WINAPI -UrlGetPartA( - _In_ LPCSTR, - _Out_writes_(*pcchOut) LPSTR, - _Inout_ LPDWORD pcchOut, - DWORD, - DWORD); - -HRESULT -WINAPI -UrlGetPartW( - _In_ LPCWSTR, - _Out_writes_(*pcchOut) LPWSTR, - _Inout_ LPDWORD pcchOut, - DWORD, - DWORD); - -#define UrlGetPart WINELIB_NAME_AW(UrlGetPart) - -HRESULT -WINAPI -HashData( - _In_reads_bytes_(cbData) const unsigned char *, - DWORD cbData, - _Out_writes_bytes_(cbHash) unsigned char *lpDest, - DWORD cbHash); - -HRESULT -WINAPI -UrlHashA( - _In_ LPCSTR, - _Out_writes_bytes_(cbHash) unsigned char *, - DWORD cbHash); - -HRESULT -WINAPI -UrlHashW( - _In_ LPCWSTR, - _Out_writes_bytes_(cbHash) unsigned char *, - DWORD cbHash); - -#define UrlHash WINELIB_NAME_AW(UrlHash) - -BOOL WINAPI UrlIsA(_In_ LPCSTR, URLIS); -BOOL WINAPI UrlIsW(_In_ LPCWSTR, URLIS); -#define UrlIs WINELIB_NAME_AW(UrlIs) - -BOOL WINAPI UrlIsNoHistoryA(_In_ LPCSTR); -BOOL WINAPI UrlIsNoHistoryW(_In_ LPCWSTR); -#define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory) - -BOOL WINAPI UrlIsOpaqueA(_In_ LPCSTR); -BOOL WINAPI UrlIsOpaqueW(_In_ LPCWSTR); -#define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque) - -#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL) -#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL) -#define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl) - -HRESULT -WINAPI -UrlUnescapeA( - _Inout_ LPSTR, - _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPSTR, - _Inout_opt_ LPDWORD pcchUnescaped, - DWORD); - -HRESULT -WINAPI -UrlUnescapeW( - _Inout_ LPWSTR, - _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPWSTR, - _Inout_opt_ LPDWORD pcchUnescaped, - DWORD); - -#define UrlUnescape WINELIB_NAME_AW(UrlUnescape) - -#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \ - y | URL_UNESCAPE_INPLACE) -#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \ - y | URL_UNESCAPE_INPLACE) -#define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace) - -HRESULT -WINAPI -UrlCreateFromPathA( - _In_ LPCSTR, - _Out_writes_to_(*pcchUrl, *pcchUrl) LPSTR, - _Inout_ LPDWORD pcchUrl, - DWORD); - -HRESULT -WINAPI -UrlCreateFromPathW( - _In_ LPCWSTR, - _Out_writes_to_(*pcchUrl, *pcchUrl) LPWSTR, - _Inout_ LPDWORD pcchUrl, - DWORD); - -#define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath) - typedef struct tagPARSEDURLA { DWORD cbSize; LPCSTR pszProtocol; @@ -1483,104 +621,640 @@ typedef struct tagPARSEDURLW { UINT nScheme; } PARSEDURLW, *PPARSEDURLW; -HRESULT WINAPI ParseURLA(_In_ LPCSTR pszUrl, _Inout_ PARSEDURLA *ppu); -HRESULT WINAPI ParseURLW(_In_ LPCWSTR pszUrl, _Inout_ PARSEDURLW *ppu); -#define ParseURL WINELIB_NAME_AW(ParseUrl) +LWSTDAPI UrlApplySchemeA(_In_ LPCSTR, _Out_writes_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut, DWORD); +LWSTDAPI UrlApplySchemeW(_In_ LPCWSTR, _Out_writes_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut, DWORD); +LWSTDAPI UrlCanonicalizeA(_In_ LPCSTR, _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPSTR, _Inout_ LPDWORD pcchCanonicalized, DWORD); +LWSTDAPI UrlCanonicalizeW(_In_ LPCWSTR, _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPWSTR, _Inout_ LPDWORD pcchCanonicalized, DWORD); +LWSTDAPI UrlCombineA(_In_ LPCSTR, _In_ LPCSTR, _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPSTR, _Inout_ LPDWORD pcchCombined, DWORD); +LWSTDAPI UrlCombineW(_In_ LPCWSTR, _In_ LPCWSTR, _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPWSTR, _Inout_ LPDWORD pcchCombined, DWORD); +LWSTDAPI_(int) UrlCompareA(_In_ LPCSTR, _In_ LPCSTR, BOOL); +LWSTDAPI_(int) UrlCompareW(_In_ LPCWSTR, _In_ LPCWSTR, BOOL); +LWSTDAPI UrlEscapeA(_In_ LPCSTR, _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPSTR, _Inout_ LPDWORD pcchEscaped, DWORD); +LWSTDAPI UrlEscapeW(_In_ LPCWSTR, _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPWSTR, _Inout_ LPDWORD pcchEscaped, DWORD); +LWSTDAPI_(LPCSTR) UrlGetLocationA(_In_ LPCSTR); +LWSTDAPI_(LPCWSTR) UrlGetLocationW(_In_ LPCWSTR); +LWSTDAPI UrlGetPartA(_In_ LPCSTR, _Out_writes_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut, DWORD, DWORD); +LWSTDAPI UrlGetPartW(_In_ LPCWSTR, _Out_writes_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut, DWORD, DWORD); +LWSTDAPI UrlHashA(_In_ LPCSTR, _Out_writes_bytes_(cbHash) unsigned char *, DWORD cbHash); +LWSTDAPI UrlHashW(_In_ LPCWSTR, _Out_writes_bytes_(cbHash) unsigned char *, DWORD cbHash); +LWSTDAPI_(BOOL) UrlIsA(_In_ LPCSTR, URLIS); +LWSTDAPI_(BOOL) UrlIsW(_In_ LPCWSTR, URLIS); +#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL) +#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL) +LWSTDAPI_(BOOL) UrlIsNoHistoryA(_In_ LPCSTR); +LWSTDAPI_(BOOL) UrlIsNoHistoryW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) UrlIsOpaqueA(_In_ LPCSTR); +LWSTDAPI_(BOOL) UrlIsOpaqueW(_In_ LPCWSTR); +LWSTDAPI UrlUnescapeA(_Inout_ LPSTR, _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPSTR, _Inout_opt_ LPDWORD pcchUnescaped, DWORD); +LWSTDAPI UrlUnescapeW(_Inout_ LPWSTR, _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPWSTR, _Inout_opt_ LPDWORD pcchUnescaped, DWORD); +LWSTDAPI UrlCreateFromPathA(_In_ LPCSTR, _Out_writes_to_(*pcchUrl, *pcchUrl) LPSTR, _Inout_ LPDWORD pcchUrl, DWORD); +LWSTDAPI UrlCreateFromPathW(_In_ LPCWSTR, _Out_writes_to_(*pcchUrl, *pcchUrl) LPWSTR, _Inout_ LPDWORD pcchUrl, DWORD); +LWSTDAPI ParseURLA(_In_ LPCSTR pszUrl, _Inout_ PARSEDURLA *ppu); +LWSTDAPI ParseURLW(_In_ LPCWSTR pszUrl, _Inout_ PARSEDURLW *ppu); -#endif /* NO_SHLWAPI_PATH */ +#ifdef UNICODE +#define UrlApplyScheme UrlApplySchemeW +#define UrlCanonicalize UrlCanonicalizeW +#define UrlCombine UrlCombineW +#define UrlCompare UrlCompareW +#define UrlEscape UrlEscapeW +#define UrlGetLocation UrlGetLocationW +#define UrlGetPart UrlGetPartW +#define UrlHash UrlHashW +#define UrlIs UrlIsW +#define UrlIsFileUrl UrlIsFileUrlW +#define UrlIsNoHistory UrlIsNoHistoryW +#define UrlIsOpaque UrlIsOpaqueW +#define UrlUnescape UrlUnescapeW +#define UrlCreateFromPath UrlCreateFromPathW +#define ParseURL ParseURLW +#else +#define UrlApplyScheme UrlApplySchemeA +#define UrlCanonicalize UrlCanonicalizeA +#define UrlCombine UrlCombineA +#define UrlCompare UrlCompareA +#define UrlEscape UrlEscapeA +#define UrlGetLocation UrlGetLocationA +#define UrlGetPart UrlGetPartA +#define UrlHash UrlHashA +#define UrlIs UrlIsA +#define UrlIsFileUrl UrlIsFileUrlA +#define UrlIsNoHistory UrlIsNoHistoryA +#define UrlIsOpaque UrlIsOpaqueA +#define UrlUnescape UrlUnescapeA +#define UrlCreateFromPath UrlCreateFromPathA +#define ParseURL ParseURLA +#endif // UNICODE +#define UrlEscapeSpaces(x, y, z) UrlCanonicalize(x, y, z, URL_ESCAPE_SPACES_ONLY | URL_DONT_ESCAPE_EXTRA_INFO) +#define UrlUnescapeInPlace(x, y) UrlUnescape(x, NULL, NULL, y | URL_UNESCAPE_INPLACE) + +#endif // NO_SHLWAPI_PATH + +/* Registry functions */ +#ifndef NO_SHLWAPI_REG + +#define SRRF_RT_REG_NONE 0x0001 +#define SRRF_RT_REG_SZ 0x0002 +#define SRRF_RT_REG_EXPAND_SZ 0x0004 +#define SRRF_RT_REG_BINARY 0x0008 +#define SRRF_RT_REG_DWORD 0x0010 +#define SRRF_RT_REG_MULTI_SZ 0x0020 +#define SRRF_RT_REG_QWORD 0x0040 +#define SRRF_RT_ANY 0xFFFF +#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_DWORD) +#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY | SRRF_RT_REG_QWORD) + +#define SRRF_RM_ANY 0x00000 +#define SRRF_RM_NORMAL 0x10000 +#define SRRF_RM_SAFE 0x20000 +#define SRRF_RM_SAFENETWORK 0x40000 + +#define SRRF_NOEXPAND 0x10000000 +#define SRRF_ZEROONFAILURE 0x20000000 +#define SRRF_NOVIRT 0x40000000 + +typedef INT SRRF; + +#define SHREGSET_HKCU 0x1 +#define SHREGSET_FORCE_HKCU 0x2 +#define SHREGSET_HKLM 0x4 +#define SHREGSET_FORCE_HKLM 0x8 +#define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM) + +typedef enum { + SHREGDEL_DEFAULT = 0, + SHREGDEL_HKCU = 0x1, + SHREGDEL_HKLM = 0x10, + SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU +} SHREGDEL_FLAGS; + +typedef enum { + SHREGENUM_DEFAULT = 0, + SHREGENUM_HKCU = 0x1, + SHREGENUM_HKLM = 0x10, + SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU +} SHREGENUM_FLAGS; + +typedef HANDLE HUSKEY; +typedef HUSKEY *PHUSKEY; + +LWSTDAPI_(LONG) SHRegCloseUSKey(_In_ HUSKEY); +LWSTDAPI_(HKEY) SHRegDuplicateHKey(_In_ HKEY); + +LWSTDAPI_(DWORD) SHCopyKeyA(_In_ HKEY, _In_opt_ LPCSTR, _In_ HKEY, _Reserved_ DWORD); +LWSTDAPI_(DWORD) SHCopyKeyW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ HKEY, _Reserved_ DWORD); +LWSTDAPI_(DWORD) SHDeleteEmptyKeyA(_In_ HKEY, _In_opt_ LPCSTR); +LWSTDAPI_(DWORD) SHDeleteEmptyKeyW(_In_ HKEY, _In_opt_ LPCWSTR); +LWSTDAPI_(DWORD) SHDeleteKeyA(_In_ HKEY, _In_opt_ LPCSTR); +LWSTDAPI_(DWORD) SHDeleteKeyW(_In_ HKEY, _In_opt_ LPCWSTR); +LWSTDAPI_(DWORD) SHDeleteOrphanKeyA(HKEY, LPCSTR); +LWSTDAPI_(DWORD) SHDeleteOrphanKeyW(HKEY, LPCWSTR); +LWSTDAPI_(DWORD) SHDeleteValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(DWORD) SHDeleteValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(LONG) SHEnumKeyExA(_In_ HKEY, _In_ DWORD, _Out_writes_(*pcchName) LPSTR, _Inout_ LPDWORD pcchName); +LWSTDAPI_(LONG) SHEnumKeyExW(_In_ HKEY, _In_ DWORD, _Out_writes_(*pcchName) LPWSTR, _Inout_ LPDWORD pcchName); +LWSTDAPI_(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); +LWSTDAPI_(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); +LWSTDAPI_(DWORD) SHGetValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_opt_ LPDWORD, _Out_writes_bytes_opt_(*pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); +LWSTDAPI_(DWORD) SHGetValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_opt_ LPDWORD, _Out_writes_bytes_opt_(*pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); +LWSTDAPI_(DWORD) SHSetValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPCVOID, _In_ DWORD cbData); +LWSTDAPI_(DWORD) SHSetValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPCVOID, _In_ DWORD cbData); +LWSTDAPI_(DWORD) SHQueryValueExA(_In_ HKEY, _In_opt_ LPCSTR, _Reserved_ LPDWORD, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); +LWSTDAPI_(DWORD) SHQueryValueExW(_In_ HKEY, _In_opt_ LPCWSTR, _Reserved_ LPDWORD, _Out_opt_ LPDWORD, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID, _Inout_opt_ LPDWORD pcbData); +LWSTDAPI_(LONG) SHQueryInfoKeyA(_In_ HKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD); +LWSTDAPI_(LONG) SHQueryInfoKeyW(_In_ HKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD); +LWSTDAPI_(LONG) SHRegCreateUSKeyA(_In_ LPCSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ DWORD); +LWSTDAPI_(LONG) SHRegCreateUSKeyW(_In_ LPCWSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ DWORD); +LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyA(_In_ HUSKEY, _In_ LPCSTR, _In_ SHREGDEL_FLAGS); +LWSTDAPI_(LONG) SHRegDeleteEmptyUSKeyW(_In_ HUSKEY, _In_ LPCWSTR, _In_ SHREGDEL_FLAGS); +LWSTDAPI_(LONG) SHRegDeleteUSValueA(_In_ HUSKEY, _In_ LPCSTR, _In_ SHREGDEL_FLAGS); +LWSTDAPI_(LONG) SHRegDeleteUSValueW(_In_ HUSKEY, _In_ LPCWSTR, _In_ SHREGDEL_FLAGS); +LWSTDAPI_(LONG) SHRegEnumUSKeyA(_In_ HUSKEY, _In_ DWORD, _Out_writes_to_(*pcchName, *pcchName) LPSTR, _Inout_ LPDWORD pcchName, _In_ SHREGENUM_FLAGS); +LWSTDAPI_(LONG) SHRegEnumUSKeyW(_In_ HUSKEY, _In_ DWORD, _Out_writes_to_(*pcchName, *pcchName) LPWSTR, _Inout_ LPDWORD pcchName, _In_ SHREGENUM_FLAGS); +LWSTDAPI_(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); +LWSTDAPI_(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); +LWSTDAPI_(BOOL) SHRegGetBoolUSValueA(_In_ LPCSTR, _In_opt_ LPCSTR, _In_ BOOL, _In_ BOOL); +LWSTDAPI_(BOOL) SHRegGetBoolUSValueW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ BOOL, _In_ BOOL); +LWSTDAPI_(DWORD) SHRegGetPathA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_writes_(MAX_PATH) LPSTR, _In_ DWORD); +LWSTDAPI_(DWORD) SHRegGetPathW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_writes_(MAX_PATH) LPWSTR, _In_ DWORD); +LWSTDAPI_(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); +LWSTDAPI_(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); +LWSTDAPI_(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); +LWSTDAPI_(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); +LWSTDAPI_(LONG) SHRegOpenUSKeyA(_In_ LPCSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ BOOL); +LWSTDAPI_(LONG) SHRegOpenUSKeyW(_In_ LPCWSTR, _In_ REGSAM, _In_opt_ HUSKEY, _Out_ PHUSKEY, _In_ BOOL); +LWSTDAPI_(LONG) SHRegQueryInfoUSKeyA(_In_ HUSKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _In_ SHREGENUM_FLAGS); +LWSTDAPI_(LONG) SHRegQueryInfoUSKeyW(_In_ HUSKEY, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _Out_opt_ LPDWORD, _In_ SHREGENUM_FLAGS); +LWSTDAPI_(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); +LWSTDAPI_(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); +LWSTDAPI_(DWORD) SHRegSetPathA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ LPCSTR, _In_ DWORD); +LWSTDAPI_(DWORD) SHRegSetPathW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD); +LWSTDAPI_(LONG) SHRegSetUSValueA(_In_ LPCSTR, _In_ LPCSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPVOID, _In_opt_ DWORD cbData, _In_opt_ DWORD); +LWSTDAPI_(LONG) SHRegSetUSValueW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD, _In_reads_bytes_opt_(cbData) LPVOID, _In_opt_ DWORD cbData, _In_opt_ DWORD); +LWSTDAPI_(LONG) SHRegWriteUSValueA(_In_ HUSKEY, _In_ LPCSTR, _In_ DWORD, _In_reads_bytes_(cbData) LPVOID, _In_ DWORD cbData, _In_ DWORD); +LWSTDAPI_(LONG) SHRegWriteUSValueW(_In_ HUSKEY, _In_ LPCWSTR, _In_ DWORD, _In_reads_bytes_(cbData) LPVOID, _In_ DWORD cbData, _In_ DWORD); +/* This only exists for the -W variant. */ +LWSTDAPI_(int) SHRegGetIntW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ int); + +#ifdef UNICODE +#define SHCopyKey SHCopyKeyW +#define SHDeleteEmptyKey SHDeleteEmptyKeyW +#define SHDeleteKey SHDeleteKeyW +#define SHDeleteOrphanKey SHDeleteOrphanKeyW +#define SHDeleteValue SHDeleteValueW +#define SHEnumKeyEx SHEnumKeyExW +#define SHEnumValue SHEnumValueW +#define SHGetValue SHGetValueW +#define SHSetValue SHSetValueW +#define SHQueryValueEx SHQueryValueExW +#define SHQueryInfoKey SHQueryInfoKeyW +#define SHRegCreateUSKey SHRegCreateUSKeyW +#define SHRegDeleteEmptyUSKey SHRegDeleteEmptyUSKeyW +#define SHRegDeleteUSValue SHRegDeleteUSValueW +#define SHRegEnumUSKey SHRegEnumUSKeyW +#define SHRegEnumUSValue SHRegEnumUSValueW +#define SHRegGetBoolUSValue SHRegGetBoolUSValueW +#define SHRegGetPath SHRegGetPathW +#define SHRegGetUSValue SHRegGetUSValueW +#define SHRegGetValue SHRegGetValueW +#define SHRegOpenUSKey SHRegOpenUSKeyW +#define SHRegQueryInfoUSKey SHRegQueryInfoUSKeyW +#define SHRegQueryUSValue SHRegQueryUSValueW +#define SHRegSetPath SHRegSetPathW +#define SHRegSetUSValue SHRegSetUSValueW +#define SHRegWriteUSValue SHRegWriteUSValueW +#define SHRegGetInt SHRegGetIntW +#else +#define SHCopyKey SHCopyKeyA +#define SHDeleteEmptyKey SHDeleteEmptyKeyA +#define SHDeleteKey SHDeleteKeyA +#define SHDeleteOrphanKey SHDeleteOrphanKeyA +#define SHDeleteValue SHDeleteValueA +#define SHEnumKeyEx SHEnumKeyExA +#define SHEnumValue SHEnumValueA +#define SHGetValue SHGetValueA +#define SHSetValue SHSetValueA +#define SHQueryValueEx SHQueryValueExA +#define SHQueryInfoKey SHQueryInfoKeyA +#define SHRegCreateUSKey SHRegCreateUSKeyA +#define SHRegDeleteEmptyUSKey SHRegDeleteEmptyUSKeyA +#define SHRegDeleteUSValue SHRegDeleteUSValueA +#define SHRegEnumUSKey SHRegEnumUSKeyA +#define SHRegEnumUSValue SHRegEnumUSValueA +#define SHRegGetBoolUSValue SHRegGetBoolUSValueA +#define SHRegGetPath SHRegGetPathA +#define SHRegGetUSValue SHRegGetUSValueA +#define SHRegGetValue SHRegGetValueA +#define SHRegOpenUSKey SHRegOpenUSKeyA +#define SHRegQueryInfoUSKey SHRegQueryInfoUSKeyA +#define SHRegQueryUSValue SHRegQueryUSValueA +#define SHRegSetPath SHRegSetPathA +#define SHRegSetUSValue SHRegSetUSValueA +#define SHRegWriteUSValue SHRegWriteUSValueA +#endif // UNICODE + +enum { + ASSOCF_NONE = 0x00000000, + ASSOCF_INIT_NOREMAPCLSID = 0x00000001, + ASSOCF_INIT_BYEXENAME = 0x00000002, + ASSOCF_OPEN_BYEXENAME = 0x00000002, + ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004, + ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008, + ASSOCF_NOUSERSETTINGS = 0x00000010, + ASSOCF_NOTRUNCATE = 0x00000020, + ASSOCF_VERIFY = 0x00000040, + ASSOCF_REMAPRUNDLL = 0x00000080, + ASSOCF_NOFIXUPS = 0x00000100, + ASSOCF_IGNOREBASECLASS = 0x00000200, + ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400, +#if (NTDDI_VERSION >= NTDDI_WIN8) + ASSOCF_INIT_FIXED_PROGID = 0x00000800, + ASSOCF_IS_PROTOCOL = 0x00001000, + ASSOCF_INIT_FOR_FILE = 0x00002000, +#endif // NTDDI_WIN8 +#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) + ASSOCF_IS_FULL_URI = 0x00004000, + ASSOCF_PER_MACHINE_ONLY = 0x00008000, +#endif // NTDDI_WIN10_RS1 +#if (NTDDI_VERSION >= NTDDI_WIN10_RS4) +ASSOCF_APP_TO_APP = 0x00010000, +#endif // NTDDI_WIN10_RS4 +}; + +typedef enum { + ASSOCSTR_COMMAND = 1, + ASSOCSTR_EXECUTABLE, + ASSOCSTR_FRIENDLYDOCNAME, + ASSOCSTR_FRIENDLYAPPNAME, + ASSOCSTR_NOOPEN, + ASSOCSTR_SHELLNEWVALUE, + ASSOCSTR_DDECOMMAND, + ASSOCSTR_DDEIFEXEC, + ASSOCSTR_DDEAPPLICATION, + ASSOCSTR_DDETOPIC, + ASSOCSTR_INFOTIP, +#if (_WIN32_IE >= _WIN32_IE_IE60) + ASSOCSTR_QUICKTIP, + ASSOCSTR_TILEINFO, + ASSOCSTR_CONTENTTYPE, + ASSOCSTR_DEFAULTICON, + ASSOCSTR_SHELLEXTENSION, +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE80) + ASSOCSTR_DROPTARGET, + ASSOCSTR_DELEGATEEXECUTE, +#endif // _WIN32_IE_IE80 + ASSOCSTR_SUPPORTED_URI_PROTOCOLS, +#if (NTDDI_VERSION >= NTDDI_WIN10) + ASSOCSTR_PROGID, + ASSOCSTR_APPID, + ASSOCSTR_APPPUBLISHER, + ASSOCSTR_APPICONREFERENCE, +#endif // NTDDI_WIN10 + ASSOCSTR_MAX +} ASSOCSTR; + +typedef enum { + ASSOCKEY_SHELLEXECCLASS = 1, + ASSOCKEY_APP, + ASSOCKEY_CLASS, + ASSOCKEY_BASECLASS, + ASSOCKEY_MAX +} ASSOCKEY; + +typedef enum { + ASSOCDATA_MSIDESCRIPTOR = 1, + ASSOCDATA_NOACTIVATEHANDLER, + ASSOCDATA_QUERYCLASSSTORE, + ASSOCDATA_HASPERUSERASSOC, +#if (_WIN32_IE >= _WIN32_IE_IE60) + ASSOCDATA_EDITFLAGS, + ASSOCDATA_VALUE, +#endif // _WIN32_IE_IE60 + ASSOCDATA_MAX +} ASSOCDATA; + +typedef enum { + ASSOCENUM_NONE +} ASSOCENUM; + +typedef enum { + FTA_None = 0x00000000, + FTA_Exclude = 0x00000001, + FTA_Show = 0x00000002, + FTA_HasExtension = 0x00000004, + FTA_NoEdit = 0x00000008, + FTA_NoRemove = 0x00000010, + FTA_NoNewVerb = 0x00000020, + FTA_NoEditVerb = 0x00000040, + FTA_NoRemoveVerb = 0x00000080, + FTA_NoEditDesc = 0x00000100, + FTA_NoEditIcon = 0x00000200, + FTA_NoEditDflt = 0x00000400, + FTA_NoEditVerbCmd = 0x00000800, + FTA_NoEditVerbExe = 0x00001000, + FTA_NoDDE = 0x00002000, + FTA_NoEditMIME = 0x00008000, + FTA_OpenIsSafe = 0x00010000, + FTA_AlwaysUnsafe = 0x00020000, + FTA_NoRecentDocs = 0x00100000, + FTA_SafeForElevation = 0x00200000, + FTA_AlwaysUseDirectInvoke = 0x00400000 +} FILETYPEATTRIBUTEFLAGS; +DEFINE_ENUM_FLAG_OPERATORS(FILETYPEATTRIBUTEFLAGS) + +typedef DWORD ASSOCF; + +#define INTERFACE IQueryAssociations +DECLARE_INTERFACE_(IQueryAssociations,IUnknown) +{ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + STDMETHOD(Init)(THIS_ _In_ ASSOCF flags, _In_opt_ LPCWSTR pszAssoc, _In_opt_ HKEY hkProgid, _In_opt_ HWND hwnd) PURE; + STDMETHOD(GetString)(THIS_ _In_ ASSOCF flags, _In_ ASSOCSTR str, _In_opt_ LPCWSTR pszExtra, _Out_writes_opt_(*pcchOut) LPWSTR pszOut, _Inout_ DWORD *pcchOut) PURE; + STDMETHOD(GetKey)(THIS_ _In_ ASSOCF flags, _In_ ASSOCKEY key, _In_opt_ LPCWSTR pszExtra, _Out_ HKEY *phkeyOut) PURE; + 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; + STDMETHOD(GetEnum)(THIS_ _In_ ASSOCF flags, _In_ ASSOCENUM assocenum, _In_opt_ LPCWSTR pszExtra, _In_ REFIID riid, _Outptr_ LPVOID *ppvOut) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IQueryAssociations_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IQueryAssociations_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IQueryAssociations_Release(p) (p)->lpVtbl->Release(p) +#define IQueryAssociations_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d) +#define IQueryAssociations_GetString(p,a,b,c,d,e) (p)->lpVtbl->GetString(p,a,b,c,d,e) +#define IQueryAssociations_GetKey(p,a,b,c,d) (p)->lpVtbl->GetKey(p,a,b,c,d) +#define IQueryAssociations_GetData(p,a,b,c,d,e) (p)->lpVtbl->GetData(p,a,b,c,d,e) +#define IQueryAssociations_GetEnum(p,a,b,c,d,e) (p)->lpVtbl->GetEnum(p,a,b,c,d,e) +#endif + +typedef struct IQueryAssociations *LPQUERYASSOCIATIONS; + +LWSTDAPI AssocCreate(_In_ CLSID, _In_ REFIID, _Outptr_ LPVOID*); +#if (_WIN32_IE >= _WIN32_IE_IE60SP1) +LWSTDAPI_(BOOL) AssocIsDangerous(_In_ LPCWSTR); +#endif // _WIN32_IE_IE60SP1 + +LWSTDAPI AssocQueryStringA(_In_ ASSOCF, _In_ ASSOCSTR, _In_ LPCSTR, _In_opt_ LPCSTR, _Out_writes_opt_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut); +LWSTDAPI AssocQueryStringW(_In_ ASSOCF, _In_ ASSOCSTR, _In_ LPCWSTR, _In_opt_ LPCWSTR, _Out_writes_opt_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut); +LWSTDAPI AssocQueryStringByKeyA(_In_ ASSOCF, _In_ ASSOCSTR, _In_ HKEY, _In_opt_ LPCSTR, _Out_writes_opt_(*pcchOut) LPSTR, _Inout_ LPDWORD pcchOut); +LWSTDAPI AssocQueryStringByKeyW(_In_ ASSOCF, _In_ ASSOCSTR, _In_ HKEY, _In_opt_ LPCWSTR, _Out_writes_opt_(*pcchOut) LPWSTR, _Inout_ LPDWORD pcchOut); +LWSTDAPI AssocQueryKeyA(_In_ ASSOCF, _In_ ASSOCKEY, _In_ LPCSTR, _In_opt_ LPCSTR, _Out_ PHKEY); +LWSTDAPI AssocQueryKeyW(_In_ ASSOCF, _In_ ASSOCKEY, _In_ LPCWSTR, _In_opt_ LPCWSTR, _Out_ PHKEY); + +#ifdef UNICODE +#define AssocQueryString AssocQueryStringW +#define AssocQueryStringByKey AssocQueryStringByKeyW +#define AssocQueryKey AssocQueryKeyW +#else +#define AssocQueryString AssocQueryStringA +#define AssocQueryStringByKey AssocQueryStringByKeyA +#define AssocQueryKey AssocQueryKeyA +#endif + +#endif // NO_SHLWAPI_REG + +/* Stream functions */ +#ifndef NO_SHLWAPI_STREAM + +LWSTDAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); +LWSTDAPI_(IStream *) SHCreateMemStream(_In_reads_bytes_opt_(cbInit) const BYTE *pInit, _In_ UINT cbInit); +LWSTDAPI SHCreateStreamOnFileEx(_In_ LPCWSTR, _In_ DWORD, _In_ DWORD, _In_ BOOL, _In_opt_ struct IStream*, _Outptr_ struct IStream**); + +LWSTDAPI SHCreateStreamOnFileA(_In_ LPCSTR, _In_ DWORD, _Outptr_ struct IStream**); +LWSTDAPI SHCreateStreamOnFileW(_In_ LPCWSTR, _In_ DWORD, _Outptr_ struct IStream**); +LWSTDAPI_(IStream *) SHOpenRegStreamA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD); +LWSTDAPI_(IStream *) SHOpenRegStreamW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD); +LWSTDAPI_(IStream *) SHOpenRegStream2A(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD); +LWSTDAPI_(IStream *) SHOpenRegStream2W(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD); + +#ifdef UNICODE +#define SHCreateStreamOnFile SHCreateStreamOnFileW +#define SHOpenRegStream SHOpenRegStream2W +#define SHOpenRegStream2 SHOpenRegStream2W +#else +#define SHCreateStreamOnFile SHCreateStreamOnFileA +#define SHOpenRegStream SHOpenRegStream2A +#define SHOpenRegStream2 SHOpenRegStream2A +#endif // UNICODE + +#ifndef _SHLWAPI_ +LWSTDAPI IStream_Reset(_In_ struct IStream*); +#if !defined(IStream_Read) && defined(__cplusplus) +LWSTDAPI IStream_Read(_In_ struct IStream*, _Out_ void*, _In_ ULONG); +LWSTDAPI IStream_Write(_In_ struct IStream*, _In_ const void*, _In_ ULONG); +#endif +#endif // _SHLWAPI_ + +#endif // NO_SHLWAPI_STREAM /* String functions */ #ifndef NO_SHLWAPI_STRFCNS -/* StrToIntEx flags */ #define STIF_DEFAULT 0x0L #define STIF_SUPPORT_HEX 0x1L -BOOL WINAPI ChrCmpIA (WORD,WORD); -BOOL WINAPI ChrCmpIW (WCHAR,WCHAR); -#define ChrCmpI WINELIB_NAME_AW(ChrCmpI) +// These functions don't have -A and -W variants +LWSTDAPI SHLoadIndirectString(_In_ LPCWSTR, _Out_writes_(cchOutBuf) LPWSTR, _In_ UINT cchOutBuf, _Reserved_ PVOID*); +LWSTDAPI StrRetToBSTR(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Outptr_ BSTR*); -INT WINAPI StrCSpnA(_In_ LPCSTR, _In_ LPCSTR); -INT WINAPI StrCSpnW(_In_ LPCWSTR, _In_ LPCWSTR); -#define StrCSpn WINELIB_NAME_AW(StrCSpn) +// These functions only exist as -W variants and don't have suffixless definitions +LWSTDAPI_(DWORD) StrCatChainW(_Out_writes_(cchDst) LPWSTR, DWORD cchDst, DWORD, _In_ LPCWSTR); +LWSTDAPI_(int) StrCmpLogicalW(_In_ LPCWSTR, _In_ LPCWSTR); +#if (_WIN32_IE >= _WIN32_IE_IE60) +LWSTDAPI_(LPWSTR) StrStrNW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); +LWSTDAPI_(LPWSTR) StrStrNIW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); +#endif // _WIN32_IE_IE60 -INT WINAPI StrCSpnIA(_In_ LPCSTR, _In_ LPCSTR); -INT WINAPI StrCSpnIW(_In_ LPCWSTR, _In_ LPCWSTR); -#define StrCSpnI WINELIB_NAME_AW(StrCSpnI) +// IntlStrEqWorker exists in both an -A and -W variant but doesn't have a suffixless definition +LWSTDAPI_(BOOL) IntlStrEqWorkerA(BOOL, _In_reads_(nChar) LPCSTR, _In_reads_(nChar) LPCSTR, int nChar); +LWSTDAPI_(BOOL) IntlStrEqWorkerW(BOOL, _In_reads_(nChar) LPCWSTR, _In_reads_(nChar) LPCWSTR, int nChar); -#define StrCatA lstrcatA -LPWSTR WINAPI StrCatW(_Inout_ LPWSTR, _In_ LPCWSTR); -#define StrCat WINELIB_NAME_AW(StrCat) +// Normal -A and -W functions with a suffixless definition +LWSTDAPI_(BOOL) ChrCmpIA (WORD,WORD); +LWSTDAPI_(BOOL) ChrCmpIW (WCHAR,WCHAR); +#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n) +#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n) +#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n) +#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n) +LWSTDAPI SHStrDupA(_In_ LPCSTR psz, _Outptr_ WCHAR** ppwsz); +LWSTDAPI SHStrDupW(_In_ LPCWSTR psz, _Outptr_ WCHAR** ppwsz); +#define StrCatA lstrcatA +LWSTDAPI_(LPWSTR) StrCatW(_Inout_ LPWSTR, _In_ LPCWSTR); +LWSTDAPI_(LPSTR) StrCatBuffA(_Inout_updates_(cchDestBuffSize) LPSTR, _In_ LPCSTR, int cchDestBuffSize); +LWSTDAPI_(LPWSTR) StrCatBuffW(_Inout_updates_(cchDestBuffSize) LPWSTR, _In_ LPCWSTR, int cchDestBuffSize); +LWSTDAPI_(LPSTR) StrChrA(_In_ LPCSTR, WORD); +LWSTDAPI_(LPWSTR) StrChrW(_In_ LPCWSTR, WCHAR); +LWSTDAPI_(LPSTR) StrChrIA(_In_ LPCSTR, WORD); +LWSTDAPI_(LPWSTR) StrChrIW(_In_ LPCWSTR, WCHAR); +#define StrCmpA lstrcmpA +LWSTDAPI_(int) StrCmpW(_In_ LPCWSTR, _In_ LPCWSTR); +#define StrCmpIA lstrcmpiA +LWSTDAPI_(int) StrCmpIW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(int) StrCmpNA(_In_ LPCSTR, _In_ LPCSTR, INT); +LWSTDAPI_(int) StrCmpNW(_In_ LPCWSTR, _In_ LPCWSTR, INT); +LWSTDAPI_(int) StrCmpNIA(_In_ LPCSTR, _In_ LPCSTR, INT); +LWSTDAPI_(int) StrCmpNIW(_In_ LPCWSTR, _In_ LPCWSTR, INT); +#define StrCpyA lstrcpyA +LWSTDAPI_(LPWSTR) StrCpyW(_Out_ LPWSTR, _In_ LPCWSTR); +#define StrCpyNA lstrcpynA +LWSTDAPI_(LPWSTR) StrCpyNW(_Out_writes_(cchMax) LPWSTR, _In_ LPCWSTR, int cchMax); +LWSTDAPI_(int) StrCSpnA(_In_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(int) StrCSpnW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(int) StrCSpnIA(_In_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(int) StrCSpnIW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(LPSTR) StrDupA(_In_ LPCSTR); +LWSTDAPI_(LPWSTR) StrDupW(_In_ LPCWSTR); +LWSTDAPI_(LPSTR) StrFormatByteSize64A(LONGLONG, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); +LWSTDAPI_(LPSTR) StrFormatByteSizeA(DWORD, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); +LWSTDAPI_(LPWSTR) StrFormatByteSizeW(LONGLONG, _Out_writes_(cchBuf) LPWSTR, UINT cchBuf); +LWSTDAPI_(LPSTR) StrFormatKBSizeA(LONGLONG, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); +LWSTDAPI_(LPWSTR) StrFormatKBSizeW(LONGLONG, _Out_writes_(cchBuf) LPWSTR, UINT cchBuf); +LWSTDAPI_(int) StrFromTimeIntervalA(_Out_writes_(cchMax) LPSTR, UINT cchMax, DWORD, int); +LWSTDAPI_(int) StrFromTimeIntervalW(_Out_writes_(cchMax) LPWSTR, UINT cchMax, DWORD, int); +#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c) +#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c) +#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c) +#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c) +LWSTDAPI_(BOOL) StrIsIntlEqualA(BOOL, _In_ LPCSTR, _In_ LPCSTR, int); +LWSTDAPI_(BOOL) StrIsIntlEqualW(BOOL, _In_ LPCWSTR, _In_ LPCWSTR, int); +LWSTDAPI_(LPSTR) StrNCatA(_Inout_updates_(cchMax) LPSTR, LPCSTR, int cchMax); +LWSTDAPI_(LPWSTR) StrNCatW(_Inout_updates_(cchMax) LPWSTR, LPCWSTR, int cchMax); +LWSTDAPI_(LPSTR) StrPBrkA(_In_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(LPWSTR) StrPBrkW(_In_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI_(LPSTR) StrRChrA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD); +LWSTDAPI_(LPWSTR) StrRChrW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR); +LWSTDAPI_(LPSTR) StrRChrIA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD); +LWSTDAPI_(LPWSTR) StrRChrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR); +LWSTDAPI_(LPSTR) StrRStrIA(_In_ LPCSTR, _In_opt_ LPCSTR, _In_ LPCSTR); +LWSTDAPI_(LPWSTR) StrRStrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ LPCWSTR); +LWSTDAPI StrRetToBufA(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Out_writes_(cchBuf) LPSTR, UINT cchBuf); +LWSTDAPI StrRetToBufW(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Out_writes_(cchBuf) LPWSTR, UINT cchBuf); +LWSTDAPI StrRetToStrA(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Outptr_ LPSTR*); +LWSTDAPI StrRetToStrW(_Inout_ STRRET*, _In_opt_ PCUITEMID_CHILD, _Outptr_ LPWSTR*); +LWSTDAPI_(int) StrSpnA(_In_ LPCSTR psz, _In_ LPCSTR pszSet); +LWSTDAPI_(int) StrSpnW(_In_ LPCWSTR psz, _In_ LPCWSTR pszSet); +LWSTDAPI_(LPSTR) StrStrA(_In_ LPCSTR pszFirst, _In_ LPCSTR pszSrch); +LWSTDAPI_(LPWSTR) StrStrW(_In_ LPCWSTR pszFirst, _In_ LPCWSTR pszSrch); +LWSTDAPI_(LPSTR) StrStrIA(_In_ LPCSTR pszFirst, _In_ LPCSTR pszSrch); +LWSTDAPI_(LPWSTR) StrStrIW(_In_ LPCWSTR pszFirst, _In_ LPCWSTR pszSrch); +LWSTDAPI_(int) StrToIntA(_In_ LPCSTR); +LWSTDAPI_(int) StrToIntW(_In_ LPCWSTR); +LWSTDAPI_(BOOL) StrToIntExA(_In_ LPCSTR, DWORD, _Out_ int*); +LWSTDAPI_(BOOL) StrToIntExW(_In_ LPCWSTR, DWORD, _Out_ int*); +LWSTDAPI_(BOOL) StrTrimA(_Inout_ LPSTR, _In_ LPCSTR); +LWSTDAPI_(BOOL) StrTrimW(_Inout_ LPWSTR, _In_ LPCWSTR); +LWSTDAPIV_(int) wnsprintfA(_Out_writes_(cchDest) LPSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCSTR, ...); +LWSTDAPIV_(int) wnsprintfW(_Out_writes_(cchDest) LPWSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCWSTR, ...); +LWSTDAPI_(int) wvnsprintfA(_Out_writes_(cchDest) LPSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCSTR, _In_ va_list); +LWSTDAPI_(int) wvnsprintfW(_Out_writes_(cchDest) LPWSTR, _In_ INT cchDest, _In_ _Printf_format_string_ LPCWSTR, _In_ va_list); +#if (_WIN32_IE >= _WIN32_IE_IE60) +LWSTDAPI_(BOOL) StrToInt64ExA(_In_ LPCSTR, DWORD, _Out_ LONGLONG*); +LWSTDAPI_(BOOL) StrToInt64ExW(_In_ LPCWSTR, DWORD, _Out_ LONGLONG*); +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE60SP2) +LWSTDAPI_(BOOL) IsCharSpaceA(CHAR); +LWSTDAPI_(BOOL) IsCharSpaceW(WCHAR); +#endif // _WIN32_IE_IE60SP2 -LPSTR -WINAPI -StrCatBuffA( - _Inout_updates_(cchDestBuffSize) LPSTR, - _In_ LPCSTR, - INT cchDestBuffSize); -LPWSTR -WINAPI -StrCatBuffW( - _Inout_updates_(cchDestBuffSize) LPWSTR, - _In_ LPCWSTR, - INT cchDestBuffSize); - -#define StrCatBuff WINELIB_NAME_AW(StrCatBuff) - -DWORD -WINAPI -StrCatChainW( - _Out_writes_(cchDst) LPWSTR, - DWORD cchDst, - DWORD, - _In_ LPCWSTR); - -LPSTR WINAPI StrChrA(_In_ LPCSTR, WORD); -LPWSTR WINAPI StrChrW(_In_ LPCWSTR, WCHAR); -#define StrChr WINELIB_NAME_AW(StrChr) - -LPSTR WINAPI StrChrIA(_In_ LPCSTR, WORD); -LPWSTR WINAPI StrChrIW(_In_ LPCWSTR, WCHAR); -#define StrChrI WINELIB_NAME_AW(StrChrI) - -#define StrCmpA lstrcmpA -int WINAPI StrCmpW(_In_ LPCWSTR, _In_ LPCWSTR); -#define StrCmp WINELIB_NAME_AW(StrCmp) - -#define StrCmpIA lstrcmpiA -int WINAPI StrCmpIW(_In_ LPCWSTR, _In_ LPCWSTR); -#define StrCmpI WINELIB_NAME_AW(StrCmpI) - -#define StrCpyA lstrcpyA -LPWSTR WINAPI StrCpyW(_Out_ LPWSTR, _In_ LPCWSTR); -#define StrCpy WINELIB_NAME_AW(StrCpy) - -#define StrCpyNA lstrcpynA -LPWSTR WINAPI StrCpyNW(_Out_writes_(cchMax) LPWSTR, _In_ LPCWSTR, int cchMax); -#define StrCpyN WINELIB_NAME_AW(StrCpyN) -#define StrNCpy WINELIB_NAME_AW(StrCpyN) - -INT WINAPI StrCmpLogicalW(_In_ LPCWSTR, _In_ LPCWSTR); - -INT WINAPI StrCmpNA(_In_ LPCSTR, _In_ LPCSTR, INT); -INT WINAPI StrCmpNW(_In_ LPCWSTR, _In_ LPCWSTR, INT); -#define StrCmpN WINELIB_NAME_AW(StrCmpN) -#define StrNCmp WINELIB_NAME_AW(StrCmpN) - -INT WINAPI StrCmpNIA(_In_ LPCSTR, _In_ LPCSTR, INT); -INT WINAPI StrCmpNIW(_In_ LPCWSTR, _In_ LPCWSTR, INT); -#define StrCmpNI WINELIB_NAME_AW(StrCmpNI) -#define StrNCmpI WINELIB_NAME_AW(StrCmpNI) - -LPSTR WINAPI StrDupA(_In_ LPCSTR); -LPWSTR WINAPI StrDupW(_In_ LPCWSTR); -#define StrDup WINELIB_NAME_AW(StrDup) - -HRESULT WINAPI SHStrDupA(_In_ LPCSTR psz, _Outptr_ WCHAR** ppwsz); -HRESULT WINAPI SHStrDupW(_In_ LPCWSTR psz, _Outptr_ WCHAR** ppwsz); -#define SHStrDup WINELIB_NAME_AW(SHStrDup) +#ifdef UNICODE +#define ChrCmpI ChrCmpIW +#define IntlStrEqN IntlStrEqNW +#define IntlStrEqNI IntlStrEqNIW +#define SHStrDup SHStrDupW +#define StrCat StrCatW +#define StrCatBuff StrCatBuffW +#define StrChr StrChrW +#define StrChrI StrChrIW +#define StrCmp StrCmpW +#define StrCmpI StrCmpIW +#define StrCmpN StrCmpNW +#define StrCmpNI StrCmpNIW +#define StrCpy StrCpyW +#define StrCpyN StrCpyNW +#define StrCSpn StrCSpnW +#define StrCSpnI StrCSpnIW +#define StrDup StrDupW +#define StrFormatByteSize StrFormatByteSizeW +#define StrFormatByteSize64 StrFormatByteSizeW +#define StrFormatKBSize StrFormatKBSizeW +#define StrFromTimeInterval StrFromTimeIntervalW +#define StrIntlEqN StrIntlEqNW +#define StrIntlEqNI StrIntlEqNIW +#define StrIsIntlEqual StrIsIntlEqualW +#define StrNCat StrNCatW +#define StrPBrk StrPBrkW +#define StrRChr StrRChrW +#define StrRChrI StrRChrIW +#define StrRStrI StrRStrIW +#define StrRetToBuf StrRetToBufW +#define StrRetToStr StrRetToStrW +#define StrSpn StrSpnW +#define StrStr StrStrW +#define StrStrI StrStrIW +#define StrToInt StrToIntW +#define StrToIntEx StrToIntExW +#define StrTrim StrTrimW +#define wnsprintf wnsprintfW +#define wvnsprintf wvnsprintfW +#if (_WIN32_IE >= _WIN32_IE_IE60) +#define StrToInt64Ex StrToInt64ExW +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE60SP2) +#define IsCharSpace IsCharSpaceW +#endif // _WIN32_IE_IE60SP2 +#else +#define ChrCmpI ChrCmpIA +#define IntlStrEqN IntlStrEqNA +#define IntlStrEqNI IntlStrEqNIA +#define SHStrDup SHStrDupA +#define StrCat StrCatA +#define StrCatBuff StrCatBuffA +#define StrChr StrChrA +#define StrChrI StrChrIA +#define StrCmp StrCmpA +#define StrCmpI StrCmpIA +#define StrCmpN StrCmpNA +#define StrCmpNI StrCmpNIA +#define StrCpy StrCpyA +#define StrCpyN StrCpyNA +#define StrCSpn StrCSpnA +#define StrCSpnI StrCSpnIA +#define StrDup StrDupA +#define StrFormatByteSize StrFormatByteSizeA +#define StrFormatByteSize64 StrFormatByteSize64A +#define StrFormatKBSize StrFormatKBSizeA +#define StrFromTimeInterval StrFromTimeIntervalA +#define StrIntlEqN StrIntlEqNA +#define StrIntlEqNI StrIntlEqNIA +#define StrIsIntlEqual StrIsIntlEqualA +#define StrNCat StrNCatA +#define StrPBrk StrPBrkA +#define StrRChr StrRChrA +#define StrRChrI StrRChrIA +#define StrRStrI StrRStrIA +#define StrRetToBuf StrRetToBufA +#define StrRetToStr StrRetToStrA +#define StrSpn StrSpnA +#define StrStr StrStrA +#define StrStrI StrStrIA +#define StrToInt StrToIntA +#define StrToIntEx StrToIntExA +#define StrTrim StrTrimA +#define wnsprintf wnsprintfA +#define wvnsprintf wvnsprintfA +#if (_WIN32_IE >= _WIN32_IE_IE60) +#define StrToInt64Ex StrToInt64ExA +#endif // _WIN32_IE_IE60 +#if (_WIN32_IE >= _WIN32_IE_IE60SP2) +#define IsCharSpace IsCharSpaceA +#endif // _WIN32_IE_IE60SP2 +#endif // UNICODE #if (NTDDI_VERSION >= NTDDI_VISTASP1) typedef int SFBS_FLAGS; @@ -1591,585 +1265,16 @@ enum tagSFBS_FLAGS SFBS_FLAGS_TRUNCATE_UNDISPLAYED_DECIMAL_DIGITS = 0x0002 }; -LWSTDAPI -StrFormatByteSizeEx( - ULONGLONG ull, - SFBS_FLAGS flags, - _Out_writes_(cchBuf) PWSTR pszBuf, - _In_range_(>,0) UINT cchBuf); -#endif // (NTDDI_VERSION >= NTDDI_VISTASP1) +LWSTDAPI StrFormatByteSizeEx(ULONGLONG ull, SFBS_FLAGS flags, _Out_writes_(cchBuf) PWSTR pszBuf, _In_range_(>,0) UINT cchBuf); +#endif // NTDDI_VISTASP1 -LPSTR -WINAPI -StrFormatByteSizeA( - DWORD, - _Out_writes_(cchBuf) LPSTR, - UINT cchBuf); +#endif // NO_SHLWAPI_STRFCNS -/* A/W Pairing is broken for this function */ - -LPSTR -WINAPI -StrFormatByteSize64A( - LONGLONG, - _Out_writes_(cchBuf) LPSTR, - UINT cchBuf); - -LPWSTR -WINAPI -StrFormatByteSizeW( - LONGLONG, - _Out_writes_(cchBuf) LPWSTR, - UINT cchBuf); - -#ifndef WINE_NO_UNICODE_MACROS -#ifdef UNICODE -#define StrFormatByteSize StrFormatByteSizeW -#else -#define StrFormatByteSize StrFormatByteSize64A -#endif -#endif - -LPSTR -WINAPI -StrFormatKBSizeA( - LONGLONG, - _Out_writes_(cchBuf) LPSTR, - UINT cchBuf); - -LPWSTR -WINAPI -StrFormatKBSizeW( - LONGLONG, - _Out_writes_(cchBuf) LPWSTR, - UINT cchBuf); - -#define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize) - -int -WINAPI -StrFromTimeIntervalA( - _Out_writes_(cchMax) LPSTR, - UINT cchMax, - DWORD, - int); - -int -WINAPI -StrFromTimeIntervalW( - _Out_writes_(cchMax) LPWSTR, - UINT cchMax, - DWORD, - int); - -#define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval) - -BOOL WINAPI StrIsIntlEqualA(BOOL, _In_ LPCSTR, _In_ LPCSTR, int); -BOOL WINAPI StrIsIntlEqualW(BOOL, _In_ LPCWSTR, _In_ LPCWSTR, int); -#define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual) - -#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c) -#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c) - -#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c) -#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c) - -LPSTR WINAPI StrNCatA(_Inout_updates_(cchMax) LPSTR, LPCSTR, int cchMax); -LPWSTR WINAPI StrNCatW(_Inout_updates_(cchMax) LPWSTR, LPCWSTR, int cchMax); -#define StrNCat WINELIB_NAME_AW(StrNCat) -#define StrCatN WINELIB_NAME_AW(StrNCat) - -LPSTR WINAPI StrPBrkA(_In_ LPCSTR, _In_ LPCSTR); -LPWSTR WINAPI StrPBrkW(_In_ LPCWSTR, _In_ LPCWSTR); -#define StrPBrk WINELIB_NAME_AW(StrPBrk) - -LPSTR WINAPI StrRChrA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD); -LPWSTR WINAPI StrRChrW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR); -#define StrRChr WINELIB_NAME_AW(StrRChr) - -LPSTR WINAPI StrRChrIA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD); -LPWSTR WINAPI StrRChrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR); -#define StrRChrI WINELIB_NAME_AW(StrRChrI) - -LPSTR WINAPI StrRStrIA(_In_ LPCSTR, _In_opt_ LPCSTR, _In_ LPCSTR); -LPWSTR WINAPI StrRStrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ LPCWSTR); -#define StrRStrI WINELIB_NAME_AW(StrRStrI) - -int WINAPI StrSpnA(_In_ LPCSTR psz, _In_ LPCSTR pszSet); -int WINAPI StrSpnW(_In_ LPCWSTR psz, _In_ LPCWSTR pszSet); -#define StrSpn WINELIB_NAME_AW(StrSpn) - -LPSTR WINAPI StrStrA(_In_ LPCSTR pszFirst, _In_ LPCSTR pszSrch); -LPWSTR WINAPI StrStrW(_In_ LPCWSTR pszFirst, _In_ LPCWSTR pszSrch); -#define StrStr WINELIB_NAME_AW(StrStr) - -LPSTR WINAPI StrStrIA(_In_ LPCSTR pszFirst, _In_ LPCSTR pszSrch); -LPWSTR WINAPI StrStrIW(_In_ LPCWSTR pszFirst, _In_ LPCWSTR pszSrch); -#define StrStrI WINELIB_NAME_AW(StrStrI) - -LPWSTR WINAPI StrStrNW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); -LPWSTR WINAPI StrStrNIW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); - -int WINAPI StrToIntA(_In_ LPCSTR); -int WINAPI StrToIntW(_In_ LPCWSTR); -#define StrToInt WINELIB_NAME_AW(StrToInt) -#define StrToLong WINELIB_NAME_AW(StrToInt) - -BOOL WINAPI StrToIntExA(_In_ LPCSTR, DWORD, _Out_ int*); -BOOL WINAPI StrToIntExW(_In_ LPCWSTR, DWORD, _Out_ int*); -#define StrToIntEx WINELIB_NAME_AW(StrToIntEx) - -BOOL WINAPI StrToInt64ExA(_In_ LPCSTR, DWORD, _Out_ LONGLONG*); -BOOL WINAPI StrToInt64ExW(_In_ LPCWSTR, DWORD, _Out_ LONGLONG*); -#define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64) - -BOOL WINAPI StrTrimA(_Inout_ LPSTR, _In_ LPCSTR); -BOOL WINAPI StrTrimW(_Inout_ LPWSTR, _In_ LPCWSTR); -#define StrTrim WINELIB_NAME_AW(StrTrim) - -INT -WINAPI -wvnsprintfA( - _Out_writes_(cchDest) LPSTR, - _In_ INT cchDest, - _In_ _Printf_format_string_ LPCSTR, - _In_ __ms_va_list); - -INT -WINAPI -wvnsprintfW( - _Out_writes_(cchDest) LPWSTR, - _In_ INT cchDest, - _In_ _Printf_format_string_ LPCWSTR, - _In_ __ms_va_list); - -#define wvnsprintf WINELIB_NAME_AW(wvnsprintf) - -INT -WINAPIV -wnsprintfA( - _Out_writes_(cchDest) LPSTR, - _In_ INT cchDest, - _In_ _Printf_format_string_ LPCSTR, - ...); - -INT -WINAPIV -wnsprintfW( - _Out_writes_(cchDest) LPWSTR, - _In_ INT cchDest, - _In_ _Printf_format_string_ LPCWSTR, - ...); - -#define wnsprintf WINELIB_NAME_AW(wnsprintf) - -HRESULT -WINAPI -SHLoadIndirectString( - _In_ LPCWSTR, - _Out_writes_(cchOutBuf) LPWSTR, - _In_ UINT cchOutBuf, - _Reserved_ PVOID*); - -BOOL -WINAPI -IntlStrEqWorkerA( - BOOL, - _In_reads_(nChar) LPCSTR, - _In_reads_(nChar) LPCSTR, - int nChar); - -BOOL -WINAPI -IntlStrEqWorkerW( - BOOL, - _In_reads_(nChar) LPCWSTR, - _In_reads_(nChar) LPCWSTR, - int nChar); - -#define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker) - -#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n) -#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n) -#define IntlStrEqN WINELIB_NAME_AW(IntlStrEqN) - -#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n) -#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n) -#define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI) - -HRESULT -WINAPI -StrRetToStrA( - _Inout_ STRRET*, - _In_opt_ PCUITEMID_CHILD, - _Outptr_ LPSTR*); - -HRESULT -WINAPI -StrRetToStrW( - _Inout_ STRRET*, - _In_opt_ PCUITEMID_CHILD, - _Outptr_ LPWSTR*); - -#define StrRetToStr WINELIB_NAME_AW(StrRetToStr) - -HRESULT -WINAPI -StrRetToBufA( - _Inout_ STRRET*, - _In_opt_ PCUITEMID_CHILD, - _Out_writes_(cchBuf) LPSTR, - UINT cchBuf); - -HRESULT -WINAPI -StrRetToBufW( - _Inout_ STRRET*, - _In_opt_ PCUITEMID_CHILD, - _Out_writes_(cchBuf) LPWSTR, - UINT cchBuf); - -#define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf) - -HRESULT -WINAPI -StrRetToBSTR( - _Inout_ STRRET*, - _In_opt_ PCUITEMID_CHILD, - _Outptr_ BSTR*); - -BOOL WINAPI IsCharSpaceA(CHAR); -BOOL WINAPI IsCharSpaceW(WCHAR); -#define IsCharSpace WINELIB_NAME_AW(IsCharSpace) - -#endif /* NO_SHLWAPI_STRFCNS */ - - -/* GDI functions */ -#ifndef NO_SHLWAPI_GDI - -HPALETTE WINAPI SHCreateShellPalette(_In_opt_ HDC); - -COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD); - -COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL); - -VOID WINAPI ColorRGBToHLS(COLORREF, _Out_ LPWORD, _Out_ LPWORD, _Out_ LPWORD); - -#endif /* NO_SHLWAPI_GDI */ - -/* Security functions */ -BOOL WINAPI IsInternetESCEnabled(void); - -/* Stream functions */ -#ifndef NO_SHLWAPI_STREAM - -struct IStream * -WINAPI -SHOpenRegStreamA( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR, - _In_ DWORD); - -struct IStream * -WINAPI -SHOpenRegStreamW( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR, - _In_ DWORD); - -#define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */ - -struct IStream * -WINAPI -SHOpenRegStream2A( - _In_ HKEY, - _In_opt_ LPCSTR, - _In_opt_ LPCSTR, - _In_ DWORD); - -struct IStream * -WINAPI -SHOpenRegStream2W( - _In_ HKEY, - _In_opt_ LPCWSTR, - _In_opt_ LPCWSTR, - _In_ DWORD); - -#define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2) - -HRESULT -WINAPI -SHCreateStreamOnFileA( - _In_ LPCSTR, - _In_ DWORD, - _Outptr_ struct IStream**); - -HRESULT -WINAPI -SHCreateStreamOnFileW( - _In_ LPCWSTR, - _In_ DWORD, - _Outptr_ struct IStream**); - -#define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile) - -struct IStream* -WINAPI -SHCreateMemStream( - _In_reads_bytes_opt_(cbInit) const BYTE *pInit, - _In_ UINT cbInit); - -HRESULT -WINAPI -SHCreateStreamOnFileEx( - _In_ LPCWSTR, - _In_ DWORD, - _In_ DWORD, - _In_ BOOL, - _In_opt_ struct IStream*, - _Outptr_ struct IStream**); - -HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); - -#ifndef _SHLWAPI_ -LWSTDAPI IStream_Reset(_In_ struct IStream*); -#if !defined(IStream_Read) && defined(__cplusplus) -LWSTDAPI IStream_Read(_In_ struct IStream*, _Out_ void*, _In_ ULONG); -LWSTDAPI IStream_Write(_In_ struct IStream*, _In_ const void*, _In_ ULONG); -#endif -#endif - -#endif /* NO_SHLWAPI_STREAM */ - -#ifndef NO_SHLWAPI_SHARED - -// These functions are only included in this file starting with the Windows 7 platform SDK - -HANDLE -WINAPI -SHAllocShared( - _In_opt_ const void *pvData, - _In_ DWORD dwSize, - _In_ DWORD dwDestinationProcessId - ); - -PVOID -WINAPI -SHLockShared( - _In_ HANDLE hData, - _In_ DWORD dwProcessId - ); - -BOOL -WINAPI -SHUnlockShared( - _In_ void *pvData - ); - -BOOL -WINAPI -SHFreeShared( - _In_ HANDLE hData, - _In_ DWORD dwProcessId - ); - -#endif /* NO_SHLWAPI_SHARED */ - -INT WINAPI GetMenuPosFromID(_In_ HMENU hMenu, _In_ UINT uID); - -/* SHAutoComplete flags */ -#define SHACF_DEFAULT 0x00000000 -#define SHACF_FILESYSTEM 0x00000001 -#define SHACF_URLHISTORY 0x00000002 -#define SHACF_URLMRU 0x00000004 -#define SHACF_URLALL (SHACF_URLHISTORY|SHACF_URLMRU) -#define SHACF_USETAB 0x00000008 -#define SHACF_FILESYS_ONLY 0x00000010 -#define SHACF_FILESYS_DIRS 0x00000020 -#define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000 -#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000 -#define SHACF_AUTOAPPEND_FORCE_ON 0x40000000 -#define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000 - -HRESULT WINAPI SHAutoComplete(_In_ HWND, DWORD); - -/* Threads */ -HRESULT WINAPI SHCreateThreadRef(_Inout_ LONG*, _Outptr_ IUnknown**); -HRESULT WINAPI SHGetThreadRef(_Outptr_ IUnknown**); -HRESULT WINAPI SHSetThreadRef(_In_opt_ IUnknown*); -HRESULT WINAPI SHReleaseThreadRef(void); - -/* SHCreateThread flags */ -#define CTF_INSIST 0x01 /* Always call */ -#define CTF_THREAD_REF 0x02 /* Hold thread ref */ -#define CTF_PROCESS_REF 0x04 /* Hold process ref */ -#define CTF_COINIT 0x08 /* Startup COM first */ -#define CTF_FREELIBANDEXIT 0x10 /* Hold DLL ref */ -#define CTF_REF_COUNTED 0x20 /* Thread is ref counted */ -#define CTF_WAIT_ALLOWCOM 0x40 /* Allow marshalling */ - -BOOL -WINAPI -SHCreateThread( - _In_ LPTHREAD_START_ROUTINE pfnThreadProc, - _In_opt_ void* pData, - _In_ DWORD flags, - _In_opt_ LPTHREAD_START_ROUTINE pfnCallback); - -BOOL WINAPI SHSkipJunction(_In_opt_ struct IBindCtx*, _In_ const CLSID*); - -/* Version Information */ - -typedef struct _DllVersionInfo { - DWORD cbSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformID; -} DLLVERSIONINFO; - -#define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */ -#define DLLVER_PLATFORM_NT 0x02 /* WinNT */ - -typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *); - -#ifdef __WINESRC__ -/* shouldn't be here, but is nice for type checking */ -HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *) DECLSPEC_HIDDEN; -#endif - -typedef struct _DLLVERSIONINFO2 { - DLLVERSIONINFO info1; - DWORD dwFlags; /* Reserved */ - ULONGLONG DECLSPEC_ALIGN(8) ullVersion; /* 16 bits each for Major, Minor, Build, QFE */ -} DLLVERSIONINFO2; - -#define DLLVER_MAJOR_MASK 0xFFFF000000000000 -#define DLLVER_MINOR_MASK 0x0000FFFF00000000 -#define DLLVER_BUILD_MASK 0x00000000FFFF0000 -#define DLLVER_QFE_MASK 0x000000000000FFFF - -#define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \ - ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe)) - -HRESULT WINAPI DllInstall(BOOL, _In_opt_ LPCWSTR) DECLSPEC_HIDDEN; - - -#if (_WIN32_IE >= 0x0600) -#define SHGVSPB_PERUSER 0x00000001 -#define SHGVSPB_ALLUSERS 0x00000002 -#define SHGVSPB_PERFOLDER 0x00000004 -#define SHGVSPB_ALLFOLDERS 0x00000008 -#define SHGVSPB_INHERIT 0x00000010 -#define SHGVSPB_ROAM 0x00000020 -#define SHGVSPB_NOAUTODEFAULTS 0x80000000 - -#define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER) -#define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS) -#define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS) -#define SHGVSPB_GLOBALDEAFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS) - -HRESULT -WINAPI -SHGetViewStatePropertyBag( - _In_opt_ PCIDLIST_ABSOLUTE pidl, - _In_opt_ LPCWSTR bag_name, - _In_ DWORD flags, - _In_ REFIID riid, - _Outptr_ void **ppv); - -#endif /* (_WIN32_IE >= 0x0600) */ - - -/* IsOS definitions */ - -#define OS_WIN32SORGREATER 0x00 -#define OS_NT 0x01 -#define OS_WIN95ORGREATER 0x02 -#define OS_NT4ORGREATER 0x03 -#define OS_WIN2000ORGREATER_ALT 0x04 -#define OS_WIN98ORGREATER 0x05 -#define OS_WIN98_GOLD 0x06 -#define OS_WIN2000ORGREATER 0x07 -#define OS_WIN2000PRO 0x08 -#define OS_WIN2000SERVER 0x09 -#define OS_WIN2000ADVSERVER 0x0A -#define OS_WIN2000DATACENTER 0x0B -#define OS_WIN2000TERMINAL 0x0C -#define OS_EMBEDDED 0x0D -#define OS_TERMINALCLIENT 0x0E -#define OS_TERMINALREMOTEADMIN 0x0F -#define OS_WIN95_GOLD 0x10 -#define OS_MEORGREATER 0x11 -#define OS_XPORGREATER 0x12 -#define OS_HOME 0x13 -#define OS_PROFESSIONAL 0x14 -#define OS_DATACENTER 0x15 -#define OS_ADVSERVER 0x16 -#define OS_SERVER 0x17 -#define OS_TERMINALSERVER 0x18 -#define OS_PERSONALTERMINALSERVER 0x19 -#define OS_FASTUSERSWITCHING 0x1A -#define OS_WELCOMELOGONUI 0x1B -#define OS_DOMAINMEMBER 0x1C -#define OS_ANYSERVER 0x1D -#define OS_WOW6432 0x1E -#define OS_WEBSERVER 0x1F -#define OS_SMALLBUSINESSSERVER 0x20 -#define OS_TABLETPC 0x21 -#define OS_SERVERADMINUI 0x22 -#define OS_MEDIACENTER 0x23 -#define OS_APPLIANCE 0x24 - -BOOL WINAPI IsOS(DWORD); - -/* SHSetTimerQueueTimer definitions */ -#define TPS_EXECUTEIO 0x00000001 -#define TPS_LONGEXECTIME 0x00000008 - -/* SHFormatDateTimeA/SHFormatDateTimeW flags */ -#define FDTF_SHORTTIME 0x00000001 -#define FDTF_SHORTDATE 0x00000002 -#define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME) -#define FDTF_LONGDATE 0x00000004 -#define FDTF_LONGTIME 0x00000008 -#define FDTF_RELATIVE 0x00000010 -#define FDTF_LTRDATE 0x00000100 -#define FDTF_RTLDATE 0x00000200 -#define FDTF_NOAUTOREADINGORDER 0x00000400 - - -typedef struct -{ - const IID *piid; -#if defined(__REACTOS__) || (WINVER >= _WIN32_WINNT_WIN10) - DWORD dwOffset; -#else - int dwOffset; -#endif -} QITAB, *LPQITAB; - -HRESULT -WINAPI -QISearch( - _Inout_ void* base, - _In_ const QITAB *pqit, - _In_ REFIID riid, - _Outptr_ void **ppv); - -#define OFFSETOFCLASS(base, derived) \ - ((DWORD)(DWORD_PTR)(static_cast((derived*)8))-8) - -#define QITABENTMULTI(Cthis, Ifoo, Iimpl) { &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) } -#define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo) +#ifdef __cplusplus +} +#endif // __cplusplus #include -#ifdef __cplusplus -} /* extern "C" */ -#endif /* defined(__cplusplus) */ - -#endif /* __WINE_SHLWAPI_H */ +#endif // NOSHLWAPI +#endif // _INC_SHLWAPI diff --git a/sdk/include/reactos/shellutils.h b/sdk/include/reactos/shellutils.h index 31c3682484e..d25671dd6a5 100644 --- a/sdk/include/reactos/shellutils.h +++ b/sdk/include/reactos/shellutils.h @@ -653,7 +653,7 @@ public: } }; -#if defined(__WINE_SHLWAPI_H) && !defined(NO_SHLWAPI) +#if defined(_INC_SHLWAPI) && !defined(NO_SHLWAPI) struct CScopedSetObjectWithSite { IUnknown *m_pObj; diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index 3e5751b38c9..89e260a0fc5 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -109,7 +109,6 @@ DWORD WINAPI SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam); HRESULT WINAPI SHIsExpandableFolder(LPSHELLFOLDER lpFolder, LPCITEMIDLIST pidl); DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef); int WINAPI SHSearchMapInt(const int *lpKeys, const int *lpValues, int iLen, int iKey); -VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown); HRESULT WINAPI MayQSForward( @@ -180,7 +179,6 @@ BOOL WINAPI SHExpandEnvironmentStringsForUserW(HANDLE, LPCWSTR, LPWSTR, DWORD); BOOL WINAPI SHIsEmptyStream(IStream*); -HRESULT WINAPI IStream_Size(IStream *lpStream, ULARGE_INTEGER* lpulSize); HRESULT WINAPI SHInvokeDefaultCommand(HWND,IShellFolder*,LPCITEMIDLIST); HRESULT WINAPI SHPropertyBag_ReadType(IPropertyBag *ppb, LPCWSTR pszPropName, VARIANTARG *pvarg, VARTYPE vt); HRESULT WINAPI SHPropertyBag_ReadBOOL(IPropertyBag *ppb, LPCWSTR pszPropName, BOOL *pbValue); @@ -383,6 +381,13 @@ VOID WINAPI FixSlashesAndColonW(LPWSTR); BOOL WINAPI PathIsValidCharA(char c, DWORD dwClass); BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD dwClass); BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl, LPWSTR pszPath); +#ifndef _SHLWAPI_ +DECLSPEC_IMPORT BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR lpszPath, DWORD* dwAttr); +DECLSPEC_IMPORT BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD* dwAttr); +#else +BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR lpszPath, DWORD* dwAttr); +BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD* dwAttr); +#endif BOOL WINAPI IContextMenu_Invoke( diff --git a/sdk/include/wine/shlwapi.h b/sdk/include/wine/shlwapi.h new file mode 100644 index 00000000000..e34346494aa --- /dev/null +++ b/sdk/include/wine/shlwapi.h @@ -0,0 +1,1221 @@ +/* + * SHLWAPI.DLL functions + * + * Copyright (C) 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_SHLWAPI_H +#define __WINE_SHLWAPI_H + +/* FIXME: #include */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +#include + +#ifndef WINSHLWAPI +#ifndef _SHLWAPI_ +#define WINSHLWAPI DECLSPEC_IMPORT +#else +#define WINSHLWAPI +#endif +#endif + +#ifndef NO_SHLWAPI_HTTP + +WINSHLWAPI HRESULT WINAPI GetAcceptLanguagesA(char *buffer, DWORD *buff_len); +WINSHLWAPI HRESULT WINAPI GetAcceptLanguagesW(WCHAR *buffer, DWORD *buff_len); +#define GetAcceptLanguages WINELIB_NAME_AW(GetAcceptLanguages) + +#endif /* NO_SHLWAPI_HTTP */ + +#ifdef __REACTOS__ +#ifndef __MSABI_LONG +# define __MSABI_LONG(x) x ## l +#endif +#endif // __REACTOS__ +#ifndef NO_SHLWAPI_REG + +/* Registry functions */ + +WINSHLWAPI DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR); +WINSHLWAPI DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR); +#define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey) + +WINSHLWAPI DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR); +WINSHLWAPI DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR); +#define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey) + +WINSHLWAPI DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR); +WINSHLWAPI DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR); +#define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue) + +WINSHLWAPI DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD); +WINSHLWAPI DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD); +#define SHGetValue WINELIB_NAME_AW(SHGetValue) + +WINSHLWAPI DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD); +WINSHLWAPI DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD); +#define SHSetValue WINELIB_NAME_AW(SHSetValue) + +WINSHLWAPI DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +WINSHLWAPI DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +#define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx) + +WINSHLWAPI LONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD); +WINSHLWAPI LONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD); +#define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx) + +WINSHLWAPI LONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +WINSHLWAPI LONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +#define SHEnumValue WINELIB_NAME_AW(SHEnumValue) + +WINSHLWAPI LONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD); +WINSHLWAPI LONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD); +#define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey) + +WINSHLWAPI DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD); +WINSHLWAPI DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD); +#define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath) + +WINSHLWAPI DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD); +WINSHLWAPI DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD); +#define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath) + +WINSHLWAPI DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD); +WINSHLWAPI DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD); +#define SHCopyKey WINELIB_NAME_AW(SHCopyKey) + +WINSHLWAPI HKEY WINAPI SHRegDuplicateHKey(HKEY); + +/* SHRegGetValue flags */ +typedef INT SRRF; + +#define SRRF_RT_REG_NONE 0x1 +#define SRRF_RT_REG_SZ 0x2 +#define SRRF_RT_REG_EXPAND_SZ 0x4 +#define SRRF_RT_REG_BINARY 0x8 +#define SRRF_RT_REG_DWORD 0x10 +#define SRRF_RT_REG_MULTI_SZ 0x20 +#define SRRF_RT_REG_QWORD 0x40 + +#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_DWORD) +#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_QWORD) +#define SRRF_RT_ANY 0xffff + +#define SRRF_RM_ANY 0 +#define SRRF_RM_NORMAL 0x10000 +#define SRRF_RM_SAFE 0x20000 +#define SRRF_RM_SAFENETWORK 0x40000 + +#define SRRF_NOEXPAND 0x10000000 +#define SRRF_ZEROONFAILURE 0x20000000 +#define SRRF_NOVIRT 0x40000000 + +WINSHLWAPI LSTATUS WINAPI SHRegGetValueA(HKEY,LPCSTR,LPCSTR,SRRF,LPDWORD,LPVOID,LPDWORD); +WINSHLWAPI LSTATUS WINAPI SHRegGetValueW(HKEY,LPCWSTR,LPCWSTR,SRRF,LPDWORD,LPVOID,LPDWORD); +#define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue) + +/* Undocumented registry functions */ + +WINSHLWAPI DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR); +WINSHLWAPI DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR); +#define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey) + + +/* User registry functions */ + +typedef enum +{ + SHREGDEL_DEFAULT = 0, + SHREGDEL_HKCU = 0x1, + SHREGDEL_HKLM = 0x10, + SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU +} SHREGDEL_FLAGS; + +typedef enum +{ + SHREGENUM_DEFAULT = 0, + SHREGENUM_HKCU = 0x1, + SHREGENUM_HKLM = 0x10, + SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU +} SHREGENUM_FLAGS; + +#define SHREGSET_HKCU 0x1 /* Apply to HKCU if empty */ +#define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */ +#define SHREGSET_HKLM 0x4 /* Apply to HKLM if empty */ +#define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */ +#define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM) + +typedef HANDLE HUSKEY; +typedef HUSKEY *PHUSKEY; + +WINSHLWAPI LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD); +WINSHLWAPI LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD); +#define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey) + +WINSHLWAPI LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL); +WINSHLWAPI LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL); +#define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey) + +WINSHLWAPI LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD, + BOOL,LPVOID,DWORD); +WINSHLWAPI LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD, + BOOL,LPVOID,DWORD); +#define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue) + +WINSHLWAPI LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD); +WINSHLWAPI LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD); +#define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue) + +WINSHLWAPI LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS); +WINSHLWAPI LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS); +#define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue) + +WINSHLWAPI LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS); +WINSHLWAPI LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS); +#define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey) + +WINSHLWAPI LONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS); +WINSHLWAPI LONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS); +#define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey) + +WINSHLWAPI LONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD, + LPVOID,LPDWORD,SHREGENUM_FLAGS); +WINSHLWAPI LONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD, + LPVOID,LPDWORD,SHREGENUM_FLAGS); +#define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue) + +WINSHLWAPI LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD, + LPDWORD,SHREGENUM_FLAGS); +WINSHLWAPI LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD, + LPDWORD,SHREGENUM_FLAGS); +#define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey) + +WINSHLWAPI LONG WINAPI SHRegCloseUSKey(HUSKEY); + +WINSHLWAPI LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD, + BOOL,LPVOID,DWORD); +WINSHLWAPI LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD, + BOOL,LPVOID,DWORD); +#define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue) + +WINSHLWAPI LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD); +WINSHLWAPI LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD); +#define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue) + +WINSHLWAPI BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL); +WINSHLWAPI BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL); +#define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue) + +WINSHLWAPI int WINAPI SHRegGetIntW(HKEY,LPCWSTR,int); + +/* IQueryAssociation and helpers */ +enum +{ + ASSOCF_NONE = 0x0000, + ASSOCF_INIT_NOREMAPCLSID = 0x0001, /* Don't map clsid->progid */ + ASSOCF_INIT_BYEXENAME = 0x0002, /* .exe name given */ + ASSOCF_OPEN_BYEXENAME = 0x0002, /* Synonym */ + ASSOCF_INIT_DEFAULTTOSTAR = 0x0004, /* Use * as base */ + ASSOCF_INIT_DEFAULTTOFOLDER = 0x0008, /* Use folder as base */ + ASSOCF_NOUSERSETTINGS = 0x0010, /* No HKCU reads */ + ASSOCF_NOTRUNCATE = 0x0020, /* Don't truncate return */ + ASSOCF_VERIFY = 0x0040, /* Verify data */ + ASSOCF_REMAPRUNDLL = 0x0080, /* Get rundll args */ + ASSOCF_NOFIXUPS = 0x0100, /* Don't fixup errors */ + ASSOCF_IGNOREBASECLASS = 0x0200, /* Don't read baseclass */ + ASSOCF_INIT_IGNOREUNKNOWN = 0x0400, /* Fail for unknown progid */ + ASSOCF_INIT_FIXED_PROGID = 0x0800, /* Used passed string as progid, don't try to map it */ + ASSOCF_IS_PROTOCOL = 0x1000, /* Treat as protocol, that should be mapped */ + ASSOCF_INIT_FOR_FILE = 0x2000, /* progid is for file extension association */ +}; + +typedef DWORD ASSOCF; + +typedef enum +{ + ASSOCSTR_COMMAND = 1, /* Verb command */ + ASSOCSTR_EXECUTABLE, /* .exe from command string */ + ASSOCSTR_FRIENDLYDOCNAME, /* Friendly doc type name */ + ASSOCSTR_FRIENDLYAPPNAME, /* Friendly .exe name */ + ASSOCSTR_NOOPEN, /* noopen value */ + ASSOCSTR_SHELLNEWVALUE, /* Use shellnew key */ + ASSOCSTR_DDECOMMAND, /* DDE command template */ + ASSOCSTR_DDEIFEXEC, /* DDE command for process create */ + ASSOCSTR_DDEAPPLICATION, /* DDE app name */ + ASSOCSTR_DDETOPIC, /* DDE topic */ + ASSOCSTR_INFOTIP, /* Infotip */ + ASSOCSTR_QUICKTIP, /* Quick infotip */ + ASSOCSTR_TILEINFO, /* Properties for tileview */ + ASSOCSTR_CONTENTTYPE, /* Mimetype */ + ASSOCSTR_DEFAULTICON, /* Icon */ + ASSOCSTR_SHELLEXTENSION, /* GUID for shell extension handler */ + ASSOCSTR_MAX +} ASSOCSTR; + +typedef enum +{ + ASSOCKEY_SHELLEXECCLASS = 1, /* Key for ShellExec */ + ASSOCKEY_APP, /* Application */ + ASSOCKEY_CLASS, /* Progid or class */ + ASSOCKEY_BASECLASS, /* Base class */ + ASSOCKEY_MAX +} ASSOCKEY; + +typedef enum +{ + ASSOCDATA_MSIDESCRIPTOR = 1, /* Component descriptor */ + ASSOCDATA_NOACTIVATEHANDLER, /* Don't activate */ + ASSOCDATA_QUERYCLASSSTORE, /* Look in Class Store */ + ASSOCDATA_HASPERUSERASSOC, /* Use user association */ + ASSOCDATA_EDITFLAGS, /* Edit flags */ + ASSOCDATA_VALUE, /* pszExtra is value */ + ASSOCDATA_MAX +} ASSOCDATA; + +typedef enum +{ + ASSOCENUM_NONE +} ASSOCENUM; + +typedef struct IQueryAssociations *LPQUERYASSOCIATIONS; + +#define INTERFACE IQueryAssociations +DECLARE_INTERFACE_(IQueryAssociations,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IQueryAssociations methods ***/ + STDMETHOD(Init)(THIS_ ASSOCF flags, LPCWSTR pszAssoc, HKEY hkProgid, HWND hwnd) PURE; + STDMETHOD(GetString)(THIS_ ASSOCF flags, ASSOCSTR str, LPCWSTR pszExtra, LPWSTR pszOut, DWORD * pcchOut) PURE; + STDMETHOD(GetKey)(THIS_ ASSOCF flags, ASSOCKEY key, LPCWSTR pszExtra, HKEY * phkeyOut) PURE; + STDMETHOD(GetData)(THIS_ ASSOCF flags, ASSOCDATA data, LPCWSTR pszExtra, LPVOID pvOut, DWORD * pcbOut) PURE; + STDMETHOD(GetEnum)(THIS_ ASSOCF flags, ASSOCENUM assocenum, LPCWSTR pszExtra, REFIID riid, LPVOID * ppvOut) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IQueryAssociations_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IQueryAssociations_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IQueryAssociations_Release(p) (p)->lpVtbl->Release(p) +#define IQueryAssociations_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d) +#define IQueryAssociations_GetString(p,a,b,c,d,e) (p)->lpVtbl->GetString(p,a,b,c,d,e) +#define IQueryAssociations_GetKey(p,a,b,c,d) (p)->lpVtbl->GetKey(p,a,b,c,d) +#define IQueryAssociations_GetData(p,a,b,c,d,e) (p)->lpVtbl->GetData(p,a,b,c,d,e) +#define IQueryAssociations_GetEnum(p,a,b,c,d,e) (p)->lpVtbl->GetEnum(p,a,b,c,d,e) +#endif + +WINSHLWAPI HRESULT WINAPI AssocCreate(CLSID,REFIID,LPVOID*); + +WINSHLWAPI HRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD); +WINSHLWAPI HRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD); +#define AssocQueryString WINELIB_NAME_AW(AssocQueryString) + +WINSHLWAPI HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,LPDWORD); +WINSHLWAPI HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,LPDWORD); +#define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey) + +WINSHLWAPI HRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,PHKEY); +WINSHLWAPI HRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,PHKEY); +#define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey) + +WINSHLWAPI BOOL WINAPI AssocIsDangerous(LPCWSTR); + +#endif /* NO_SHLWAPI_REG */ + +WINSHLWAPI void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk); +WINSHLWAPI void WINAPI IUnknown_AtomicRelease(IUnknown **punk); +WINSHLWAPI HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd); +WINSHLWAPI HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite); +WINSHLWAPI HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv); +WINSHLWAPI HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut); + +/* Path functions */ +#ifndef NO_SHLWAPI_PATH + +/* GetPathCharType return flags */ +#define GCT_INVALID 0x0 +#define GCT_LFNCHAR 0x1 +#define GCT_SHORTCHAR 0x2 +#define GCT_WILD 0x4 +#define GCT_SEPARATOR 0x8 + +WINSHLWAPI LPSTR WINAPI PathAddBackslashA(LPSTR); +WINSHLWAPI LPWSTR WINAPI PathAddBackslashW(LPWSTR); +#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash) + +WINSHLWAPI BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR); +#define PathAddExtension WINELIB_NAME_AW(PathAddExtension) + +WINSHLWAPI BOOL WINAPI PathAppendA(LPSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR); +#define PathAppend WINELIB_NAME_AW(PathAppend) + +WINSHLWAPI LPSTR WINAPI PathBuildRootA(LPSTR,int); +WINSHLWAPI LPWSTR WINAPI PathBuildRootW(LPWSTR,int); +#define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot) + +WINSHLWAPI BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR); +#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize) + +WINSHLWAPI LPSTR WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR); +WINSHLWAPI LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR); +#define PathCombine WINELIB_NAME_AW(PathCombine) + +WINSHLWAPI BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT); +WINSHLWAPI BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT); +#define PathCompactPath WINELIB_NAME_AW(PathCompactPath) + +WINSHLWAPI BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD); +WINSHLWAPI BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD); +#define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx) + +WINSHLWAPI int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR); +WINSHLWAPI int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR); +#define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix) + +WINSHLWAPI HRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +#define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl) + +WINSHLWAPI HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD); + +WINSHLWAPI BOOL WINAPI PathFileExistsA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathFileExistsW(LPCWSTR); +#define PathFileExists WINELIB_NAME_AW(PathFileExists) + +WINSHLWAPI BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*); +WINSHLWAPI BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*); +#define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes) + +WINSHLWAPI LPSTR WINAPI PathFindExtensionA(LPCSTR); +WINSHLWAPI LPWSTR WINAPI PathFindExtensionW(LPCWSTR); +#define PathFindExtension WINELIB_NAME_AW(PathFindExtension) + +WINSHLWAPI LPSTR WINAPI PathFindFileNameA(LPCSTR); +WINSHLWAPI LPWSTR WINAPI PathFindFileNameW(LPCWSTR); +#define PathFindFileName WINELIB_NAME_AW(PathFindFileName) + +WINSHLWAPI LPSTR WINAPI PathFindNextComponentA(LPCSTR); +WINSHLWAPI LPWSTR WINAPI PathFindNextComponentW(LPCWSTR); +#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent) + +WINSHLWAPI BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*); +WINSHLWAPI BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*); +#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath) + +WINSHLWAPI LPSTR WINAPI PathGetArgsA(LPCSTR); +WINSHLWAPI LPWSTR WINAPI PathGetArgsW(LPCWSTR); +#define PathGetArgs WINELIB_NAME_AW(PathGetArgs) + +WINSHLWAPI UINT WINAPI PathGetCharTypeA(UCHAR); +WINSHLWAPI UINT WINAPI PathGetCharTypeW(WCHAR); +#define PathGetCharType WINELIB_NAME_AW(PathGetCharType) + +WINSHLWAPI int WINAPI PathGetDriveNumberA(LPCSTR); +WINSHLWAPI int WINAPI PathGetDriveNumberW(LPCWSTR); +#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber) + +WINSHLWAPI BOOL WINAPI PathIsDirectoryA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsDirectoryW(LPCWSTR); +#define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory) + +WINSHLWAPI BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR); +#define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty) + +WINSHLWAPI BOOL WINAPI PathIsFileSpecA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsFileSpecW(LPCWSTR); +#define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec) + +WINSHLWAPI BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR); +#define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix) + +WINSHLWAPI BOOL WINAPI PathIsRelativeA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsRelativeW(LPCWSTR); +#define PathIsRelative WINELIB_NAME_AW(PathIsRelative) + +WINSHLWAPI BOOL WINAPI PathIsRootA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsRootW(LPCWSTR); +#define PathIsRoot WINELIB_NAME_AW(PathIsRoot) + +WINSHLWAPI BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR); +#define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot) + +WINSHLWAPI BOOL WINAPI PathIsUNCA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsUNCW(LPCWSTR); +#define PathIsUNC WINELIB_NAME_AW(PathIsUNC) + +WINSHLWAPI BOOL WINAPI PathIsUNCServerA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsUNCServerW(LPCWSTR); +#define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer) + +WINSHLWAPI BOOL WINAPI PathIsUNCServerShareA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsUNCServerShareW(LPCWSTR); +#define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare) + +WINSHLWAPI BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR); +#define PathIsContentType WINELIB_NAME_AW(PathIsContentType) + +WINSHLWAPI BOOL WINAPI PathIsURLA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsURLW(LPCWSTR); +#define PathIsURL WINELIB_NAME_AW(PathIsURL) + +WINSHLWAPI BOOL WINAPI PathMakePrettyA(LPSTR); +WINSHLWAPI BOOL WINAPI PathMakePrettyW(LPWSTR); +#define PathMakePretty WINELIB_NAME_AW(PathMakePretty) + +WINSHLWAPI BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR); +#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec) + +#define PMSF_NORMAL 0x00000000 +#define PMSF_MULTIPLE 0x00000001 +#define PMSF_DONT_STRIP_SPACES 0x00010000 + +WINSHLWAPI HRESULT WINAPI PathMatchSpecExA(LPCSTR,LPCSTR,DWORD); +WINSHLWAPI HRESULT WINAPI PathMatchSpecExW(LPCWSTR,LPCWSTR,DWORD); +#define PathMatchSpecEx WINELIB_NAME_AW(PathMatchSpecEx) + +WINSHLWAPI int WINAPI PathParseIconLocationA(LPSTR); +WINSHLWAPI int WINAPI PathParseIconLocationW(LPWSTR); +#define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation) + +WINSHLWAPI VOID WINAPI PathQuoteSpacesA(LPSTR); +WINSHLWAPI VOID WINAPI PathQuoteSpacesW(LPWSTR); +#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces) + +WINSHLWAPI BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD); +WINSHLWAPI BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD); +#define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo) + +WINSHLWAPI VOID WINAPI PathRemoveArgsA(LPSTR); +WINSHLWAPI VOID WINAPI PathRemoveArgsW(LPWSTR); +#define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs) + +WINSHLWAPI LPSTR WINAPI PathRemoveBackslashA(LPSTR); +WINSHLWAPI LPWSTR WINAPI PathRemoveBackslashW(LPWSTR); +#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash) + +WINSHLWAPI VOID WINAPI PathRemoveBlanksA(LPSTR); +WINSHLWAPI VOID WINAPI PathRemoveBlanksW(LPWSTR); +#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks) + +WINSHLWAPI VOID WINAPI PathRemoveExtensionA(LPSTR); +WINSHLWAPI VOID WINAPI PathRemoveExtensionW(LPWSTR); +#define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension) + +WINSHLWAPI BOOL WINAPI PathRemoveFileSpecA(LPSTR); +WINSHLWAPI BOOL WINAPI PathRemoveFileSpecW(LPWSTR); +#define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec) + +WINSHLWAPI BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR); +#define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension) + +WINSHLWAPI BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT); +WINSHLWAPI BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT); +#define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify) + +WINSHLWAPI VOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR); +WINSHLWAPI VOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR); +#define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath) + +WINSHLWAPI LPSTR WINAPI PathSkipRootA(LPCSTR); +WINSHLWAPI LPWSTR WINAPI PathSkipRootW(LPCWSTR); +#define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot) + +WINSHLWAPI VOID WINAPI PathStripPathA(LPSTR); +WINSHLWAPI VOID WINAPI PathStripPathW(LPWSTR); +#define PathStripPath WINELIB_NAME_AW(PathStripPath) + +WINSHLWAPI BOOL WINAPI PathStripToRootA(LPSTR); +WINSHLWAPI BOOL WINAPI PathStripToRootW(LPWSTR); +#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot) + +WINSHLWAPI VOID WINAPI PathUnquoteSpacesA(LPSTR); +WINSHLWAPI VOID WINAPI PathUnquoteSpacesW(LPWSTR); +#define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces) + +WINSHLWAPI BOOL WINAPI PathMakeSystemFolderA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathMakeSystemFolderW(LPCWSTR); +#define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder) + +WINSHLWAPI BOOL WINAPI PathUnmakeSystemFolderA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR); +#define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder) + +WINSHLWAPI BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD); +WINSHLWAPI BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD); +#define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder) + +WINSHLWAPI BOOL WINAPI PathIsNetworkPathA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsNetworkPathW(LPCWSTR); +#define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath) + +WINSHLWAPI BOOL WINAPI PathIsLFNFileSpecA(LPCSTR); +WINSHLWAPI BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR); +#define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec) + +WINSHLWAPI LPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int); +WINSHLWAPI LPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int); +#define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray) + +WINSHLWAPI VOID WINAPI PathUndecorateA(LPSTR); +WINSHLWAPI VOID WINAPI PathUndecorateW(LPWSTR); +#define PathUndecorate WINELIB_NAME_AW(PathUndecorate) + +WINSHLWAPI BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT); +WINSHLWAPI BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT); +#define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings) + +/* Url functions */ +typedef enum { + URL_SCHEME_INVALID = -1, + URL_SCHEME_UNKNOWN = 0, + URL_SCHEME_FTP, + URL_SCHEME_HTTP, + URL_SCHEME_GOPHER, + URL_SCHEME_MAILTO, + URL_SCHEME_NEWS, + URL_SCHEME_NNTP, + URL_SCHEME_TELNET, + URL_SCHEME_WAIS, + URL_SCHEME_FILE, + URL_SCHEME_MK, + URL_SCHEME_HTTPS, + URL_SCHEME_SHELL, + URL_SCHEME_SNEWS, + URL_SCHEME_LOCAL, + URL_SCHEME_JAVASCRIPT, + URL_SCHEME_VBSCRIPT, + URL_SCHEME_ABOUT, + URL_SCHEME_RES, + URL_SCHEME_MSSHELLROOTED, + URL_SCHEME_MSSHELLIDLIST, + URL_SCHEME_MSHELP, + URL_SCHEME_MSSHELLDEVICE, + URL_SCHEME_WILDCARD, + URL_SCHEME_SEARCH_MS, + URL_SCHEME_SEARCH, + URL_SCHEME_KNOWNFOLDER, + URL_SCHEME_MAXVALUE +} URL_SCHEME; + +/* These are used by UrlGetPart routine */ +typedef enum { + URL_PART_NONE = 0, + URL_PART_SCHEME = 1, + URL_PART_HOSTNAME, + URL_PART_USERNAME, + URL_PART_PASSWORD, + URL_PART_PORT, + URL_PART_QUERY +} URL_PART; + +#define URL_PARTFLAG_KEEPSCHEME 0x00000001 + +/* These are used by the UrlIs... routines */ +typedef enum { + URLIS_URL, + URLIS_OPAQUE, + URLIS_NOHISTORY, + URLIS_FILEURL, + URLIS_APPLIABLE, + URLIS_DIRECTORY, + URLIS_HASQUERY +} URLIS; + +/* This is used by the UrlApplyScheme... routines */ +#define URL_APPLY_FORCEAPPLY 0x00000008 +#define URL_APPLY_GUESSFILE 0x00000004 +#define URL_APPLY_GUESSSCHEME 0x00000002 +#define URL_APPLY_DEFAULT 0x00000001 + +/* The following are used by UrlEscape..., UrlUnEscape..., + * UrlCanonicalize..., and UrlCombine... routines + */ +#define URL_WININET_COMPATIBILITY 0x80000000 +#define URL_PLUGGABLE_PROTOCOL 0x40000000 +#define URL_ESCAPE_UNSAFE 0x20000000 +#define URL_UNESCAPE 0x10000000 + +#define URL_DONT_SIMPLIFY 0x08000000 +#define URL_ESCAPE_SPACES_ONLY 0x04000000 +#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000 + +#define URL_INTERNAL_PATH 0x00800000 +#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000 +#define URL_CONVERT_IF_DOSPATH 0x00200000 +#define URL_UNESCAPE_INPLACE 0x00100000 + +#define URL_ESCAPE_ASCII_URI_COMPONENT 0x00080000 +#define URL_ESCAPE_AS_UTF8 0x00040000 +#define URL_DONT_UNESCAPE 0x00020000 +#define URL_FILE_USE_PATHURL 0x00010000 + +#define URL_ESCAPE_SEGMENT_ONLY 0x00002000 +#define URL_ESCAPE_PERCENT 0x00001000 + +#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO +#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO +#define URL_ESCAPE_URI_COMPONENT (URL_ESCAPE_ASCII_URI_COMPONENT | URL_ESCAPE_AS_UTF8) +#define URL_NO_META URL_DONT_SIMPLIFY +#define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8 +#define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8 + +WINSHLWAPI HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +#define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme) + +WINSHLWAPI HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +#define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize) + +WINSHLWAPI HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD); +#define UrlCombine WINELIB_NAME_AW(UrlCombine) + +WINSHLWAPI INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL); +WINSHLWAPI INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL); +#define UrlCompare WINELIB_NAME_AW(UrlCompare) + +WINSHLWAPI HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +#define UrlEscape WINELIB_NAME_AW(UrlEscape) + +#define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \ + URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY) +#define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \ + URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY) +#define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces) + +WINSHLWAPI LPCSTR WINAPI UrlGetLocationA(LPCSTR); +WINSHLWAPI LPCWSTR WINAPI UrlGetLocationW(LPCWSTR); +#define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation) + +WINSHLWAPI HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD); +#define UrlGetPart WINELIB_NAME_AW(UrlGetPart) + +WINSHLWAPI HRESULT WINAPI HashData(const unsigned char *,DWORD,unsigned char *lpDest,DWORD); + +WINSHLWAPI HRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,DWORD); +WINSHLWAPI HRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,DWORD); +#define UrlHash WINELIB_NAME_AW(UrlHash) + +WINSHLWAPI BOOL WINAPI UrlIsA(LPCSTR,URLIS); +WINSHLWAPI BOOL WINAPI UrlIsW(LPCWSTR,URLIS); +#define UrlIs WINELIB_NAME_AW(UrlIs) + +WINSHLWAPI BOOL WINAPI UrlIsNoHistoryA(LPCSTR); +WINSHLWAPI BOOL WINAPI UrlIsNoHistoryW(LPCWSTR); +#define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory) + +WINSHLWAPI BOOL WINAPI UrlIsOpaqueA(LPCSTR); +WINSHLWAPI BOOL WINAPI UrlIsOpaqueW(LPCWSTR); +#define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque) + +#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL) +#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL) +#define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl) + +WINSHLWAPI HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD); +#define UrlUnescape WINELIB_NAME_AW(UrlUnescape) + +#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \ + y | URL_UNESCAPE_INPLACE) +#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \ + y | URL_UNESCAPE_INPLACE) +#define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace) + +WINSHLWAPI HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD); +WINSHLWAPI HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +#define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath) + +typedef struct tagPARSEDURLA { + DWORD cbSize; + LPCSTR pszProtocol; + UINT cchProtocol; + LPCSTR pszSuffix; + UINT cchSuffix; + UINT nScheme; +} PARSEDURLA, *PPARSEDURLA; + +typedef struct tagPARSEDURLW { + DWORD cbSize; + LPCWSTR pszProtocol; + UINT cchProtocol; + LPCWSTR pszSuffix; + UINT cchSuffix; + UINT nScheme; +} PARSEDURLW, *PPARSEDURLW; + +WINSHLWAPI HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu); +WINSHLWAPI HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu); +#define ParseURL WINELIB_NAME_AW(ParseUrl) + +#endif /* NO_SHLWAPI_PATH */ + + +/* String functions */ +#ifndef NO_SHLWAPI_STRFCNS + +/* StrToIntEx flags */ +#define STIF_DEFAULT __MSABI_LONG(0x0) +#define STIF_SUPPORT_HEX __MSABI_LONG(0x1) + +WINSHLWAPI BOOL WINAPI ChrCmpIA (WORD,WORD); +WINSHLWAPI BOOL WINAPI ChrCmpIW (WCHAR,WCHAR); +#define ChrCmpI WINELIB_NAME_AW(ChrCmpI) + +WINSHLWAPI INT WINAPI StrCSpnA(LPCSTR,LPCSTR); +WINSHLWAPI INT WINAPI StrCSpnW(LPCWSTR,LPCWSTR); +#define StrCSpn WINELIB_NAME_AW(StrCSpn) + +WINSHLWAPI INT WINAPI StrCSpnIA(LPCSTR,LPCSTR); +WINSHLWAPI INT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR); +#define StrCSpnI WINELIB_NAME_AW(StrCSpnI) + +#define StrCatA lstrcatA +WINSHLWAPI LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR); +#define StrCat WINELIB_NAME_AW(StrCat) + +WINSHLWAPI LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT); +WINSHLWAPI LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT); +#define StrCatBuff WINELIB_NAME_AW(StrCatBuff) + +WINSHLWAPI DWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR); + +WINSHLWAPI LPSTR WINAPI StrChrA(LPCSTR,WORD); +WINSHLWAPI LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR); +#define StrChr WINELIB_NAME_AW(StrChr) + +WINSHLWAPI LPSTR WINAPI StrChrIA(LPCSTR,WORD); +WINSHLWAPI LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR); +#define StrChrI WINELIB_NAME_AW(StrChrI) + +#define StrCmpA lstrcmpA +WINSHLWAPI int WINAPI StrCmpW(LPCWSTR,LPCWSTR); +#define StrCmp WINELIB_NAME_AW(StrCmp) + +#define StrCmpIA lstrcmpiA +WINSHLWAPI int WINAPI StrCmpIW(LPCWSTR,LPCWSTR); +#define StrCmpI WINELIB_NAME_AW(StrCmpI) + +#define StrCpyA lstrcpyA +WINSHLWAPI LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR); +#define StrCpy WINELIB_NAME_AW(StrCpy) + +#define StrCpyNA lstrcpynA +WINSHLWAPI LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int); +#define StrCpyN WINELIB_NAME_AW(StrCpyN) +#define StrNCpy WINELIB_NAME_AW(StrCpyN) + +WINSHLWAPI INT WINAPI StrCmpLogicalW(LPCWSTR,LPCWSTR); + +WINSHLWAPI INT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT); +WINSHLWAPI INT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT); +#define StrCmpN WINELIB_NAME_AW(StrCmpN) +#define StrNCmp WINELIB_NAME_AW(StrCmpN) + +WINSHLWAPI INT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT); +WINSHLWAPI INT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT); +#define StrCmpNI WINELIB_NAME_AW(StrCmpNI) +#define StrNCmpI WINELIB_NAME_AW(StrCmpNI) + +WINSHLWAPI char * WINAPI StrDupA(const char *) __WINE_DEALLOC(LocalFree) __WINE_MALLOC; +WINSHLWAPI WCHAR * WINAPI StrDupW(const WCHAR *) __WINE_DEALLOC(LocalFree) __WINE_MALLOC; +#define StrDup WINELIB_NAME_AW(StrDup) + +WINSHLWAPI HRESULT WINAPI SHStrDupA(LPCSTR,WCHAR**); +WINSHLWAPI HRESULT WINAPI SHStrDupW(LPCWSTR,WCHAR**); +#define SHStrDup WINELIB_NAME_AW(SHStrDup) + +WINSHLWAPI LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT); + +typedef enum { + SFBS_FLAGS_ROUND_TO_NEAREST_DISPLAYED_DIGIT = 0x1, + SFBS_FLAGS_TRUNCATE_UNDISPLAYED_DECIMAL_DIGITS = 0x2, +} SFBS_FLAGS; + +WINSHLWAPI HRESULT WINAPI StrFormatByteSizeEx(LONGLONG,SFBS_FLAGS,LPWSTR,UINT); + +/* A/W Pairing is broken for this function */ +WINSHLWAPI LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT); +WINSHLWAPI LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT); +#ifndef WINE_NO_UNICODE_MACROS +#ifdef UNICODE +#define StrFormatByteSize StrFormatByteSizeW +#else +#define StrFormatByteSize StrFormatByteSize64A +#endif +#endif + +WINSHLWAPI LPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT); +WINSHLWAPI LPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT); +#define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize) + +WINSHLWAPI int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int); +WINSHLWAPI int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int); +#define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval) + +WINSHLWAPI BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int); +WINSHLWAPI BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int); +#define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual) + +#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c) +#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c) + +#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c) +#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c) + +WINSHLWAPI LPSTR WINAPI StrNCatA(LPSTR,LPCSTR,int); +WINSHLWAPI LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int); +#define StrNCat WINELIB_NAME_AW(StrNCat) +#define StrCatN WINELIB_NAME_AW(StrNCat) + +WINSHLWAPI LPSTR WINAPI StrPBrkA(LPCSTR,LPCSTR); +WINSHLWAPI LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR); +#define StrPBrk WINELIB_NAME_AW(StrPBrk) + +WINSHLWAPI LPSTR WINAPI StrRChrA(LPCSTR,LPCSTR,WORD); +WINSHLWAPI LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD); +#define StrRChr WINELIB_NAME_AW(StrRChr) + +WINSHLWAPI LPSTR WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD); +WINSHLWAPI LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD); +#define StrRChrI WINELIB_NAME_AW(StrRChrI) + +WINSHLWAPI LPSTR WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR); +WINSHLWAPI LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR); +#define StrRStrI WINELIB_NAME_AW(StrRStrI) + +WINSHLWAPI int WINAPI StrSpnA(LPCSTR,LPCSTR); +WINSHLWAPI int WINAPI StrSpnW(LPCWSTR,LPCWSTR); +#define StrSpn WINELIB_NAME_AW(StrSpn) + +WINSHLWAPI LPSTR WINAPI StrStrA(LPCSTR,LPCSTR); +WINSHLWAPI LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR); +#define StrStr WINELIB_NAME_AW(StrStr) + +WINSHLWAPI LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR); +WINSHLWAPI LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR); +#define StrStrI WINELIB_NAME_AW(StrStrI) + +WINSHLWAPI LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT); +WINSHLWAPI LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT); + +WINSHLWAPI int WINAPI StrToIntA(LPCSTR); +WINSHLWAPI int WINAPI StrToIntW(LPCWSTR); +#define StrToInt WINELIB_NAME_AW(StrToInt) +#define StrToLong WINELIB_NAME_AW(StrToInt) + +WINSHLWAPI BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*); +WINSHLWAPI BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*); +#define StrToIntEx WINELIB_NAME_AW(StrToIntEx) + +WINSHLWAPI BOOL WINAPI StrToInt64ExA(LPCSTR,DWORD,LONGLONG*); +WINSHLWAPI BOOL WINAPI StrToInt64ExW(LPCWSTR,DWORD,LONGLONG*); +#define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64) + +WINSHLWAPI BOOL WINAPI StrTrimA(LPSTR,LPCSTR); +WINSHLWAPI BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR); +#define StrTrim WINELIB_NAME_AW(StrTrim) + +#ifdef __ms_va_list +WINSHLWAPI INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list); +WINSHLWAPI INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list); +#define wvnsprintf WINELIB_NAME_AW(wvnsprintf) +#endif + +WINSHLWAPI INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...); +WINSHLWAPI INT WINAPIV wnsprintfW(LPWSTR,INT,LPCWSTR, ...); +#define wnsprintf WINELIB_NAME_AW(wnsprintf) + +WINSHLWAPI HRESULT WINAPI SHLoadIndirectString(LPCWSTR,LPWSTR,UINT,PVOID*); + +WINSHLWAPI BOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int); +WINSHLWAPI BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int); +#define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker) + +#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n) +#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n) +#define IntlStrEqN WINELIB_NAME_AW(IntlStrEqN) + +#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n) +#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n) +#define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI) + +WINSHLWAPI HRESULT WINAPI StrRetToStrA(STRRET*,LPCITEMIDLIST,LPSTR*); +WINSHLWAPI HRESULT WINAPI StrRetToStrW(STRRET*,LPCITEMIDLIST,LPWSTR*); +#define StrRetToStr WINELIB_NAME_AW(StrRetToStr) + +WINSHLWAPI HRESULT WINAPI StrRetToBufA(STRRET*,LPCITEMIDLIST,LPSTR,UINT); +WINSHLWAPI HRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); +#define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf) + +WINSHLWAPI HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*); + +WINSHLWAPI BOOL WINAPI IsCharSpaceA(CHAR); +WINSHLWAPI BOOL WINAPI IsCharSpaceW(WCHAR); +#define IsCharSpace WINELIB_NAME_AW(IsCharSpace) + +#endif /* NO_SHLWAPI_STRFCNS */ + + +/* GDI functions */ +#ifndef NO_SHLWAPI_GDI + +WINSHLWAPI HPALETTE WINAPI SHCreateShellPalette(HDC); + +WINSHLWAPI COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD); + +WINSHLWAPI COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL); + +WINSHLWAPI VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD); + +#endif /* NO_SHLWAPI_GDI */ + +/* Security functions */ +WINSHLWAPI BOOL WINAPI IsInternetESCEnabled(void); + +/* Stream functions */ +#ifndef NO_SHLWAPI_STREAM + +WINSHLWAPI struct IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD); +WINSHLWAPI struct IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD); +#define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */ + +WINSHLWAPI struct IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD); +WINSHLWAPI struct IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD); +#define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2) + +WINSHLWAPI HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**); +WINSHLWAPI HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**); +#define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile) + +WINSHLWAPI struct IStream * WINAPI SHCreateMemStream(const BYTE*,UINT); +WINSHLWAPI HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**); +WINSHLWAPI HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); + +#endif /* NO_SHLWAPI_STREAM */ + +WINSHLWAPI HRESULT WINAPI IStream_Reset(IStream*); +WINSHLWAPI HRESULT WINAPI IStream_Size(IStream*,ULARGE_INTEGER*); + +/* SHAutoComplete flags */ +#define SHACF_DEFAULT 0x00000000 +#define SHACF_FILESYSTEM 0x00000001 +#define SHACF_URLHISTORY 0x00000002 +#define SHACF_URLMRU 0x00000004 +#define SHACF_URLALL (SHACF_URLHISTORY|SHACF_URLMRU) +#define SHACF_USETAB 0x00000008 +#define SHACF_FILESYS_ONLY 0x00000010 +#define SHACF_FILESYS_DIRS 0x00000020 +#define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000 +#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000 +#define SHACF_AUTOAPPEND_FORCE_ON 0x40000000 +#define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000 + +WINSHLWAPI HRESULT WINAPI SHAutoComplete(HWND,DWORD); + +/* Threads */ +WINSHLWAPI HRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**); +WINSHLWAPI HRESULT WINAPI SHGetThreadRef(IUnknown**); +WINSHLWAPI HRESULT WINAPI SHSetThreadRef(IUnknown*); +WINSHLWAPI HRESULT WINAPI SHReleaseThreadRef(void); + +/* SHCreateThread flags */ +enum +{ + CTF_INSIST = 0x00000001, /* Always call */ + CTF_THREAD_REF = 0x00000002, /* Hold thread ref */ + CTF_PROCESS_REF = 0x00000004, /* Hold process ref */ + CTF_COINIT_STA = 0x00000008, + CTF_COINIT = 0x00000008, /* Startup COM first */ + CTF_FREELIBANDEXIT = 0x00000010, /* Hold DLL ref */ + CTF_REF_COUNTED = 0x00000020, /* Thread is ref counted */ + CTF_WAIT_ALLOWCOM = 0x00000040, /* Allow marshalling */ + CTF_UNUSED = 0x00000080, + CTF_INHERITWOW64 = 0x00000100, + CTF_WAIT_NO_REENTRACY = 0x00000200, + CTF_KEYBOARD_LOCALE = 0x00000400, + CTF_OLEINITIALIZE = 0x00000800, + CTF_COINIT_MTA = 0x00001000, + CTF_NOADDREFLIB = 0x00002000, +}; + +WINSHLWAPI BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE); + +WINSHLWAPI BOOL WINAPI SHSkipJunction(struct IBindCtx*,const CLSID*); + +/* Version Information */ + +typedef struct _DllVersionInfo { + DWORD cbSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformID; +} DLLVERSIONINFO; + +#define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */ +#define DLLVER_PLATFORM_NT 0x02 /* WinNT */ + +typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *); + +#ifdef __WINESRC__ +/* shouldn't be here, but is nice for type checking */ +HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *); +#endif + +typedef struct _DLLVERSIONINFO2 { + DLLVERSIONINFO info1; + DWORD dwFlags; /* Reserved */ + ULONGLONG DECLSPEC_ALIGN(8) ullVersion; /* 16 bits each for Major, Minor, Build, QFE */ +} DLLVERSIONINFO2; + +#define DLLVER_MAJOR_MASK 0xFFFF000000000000 +#define DLLVER_MINOR_MASK 0x0000FFFF00000000 +#define DLLVER_BUILD_MASK 0x00000000FFFF0000 +#define DLLVER_QFE_MASK 0x000000000000FFFF + +#define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \ + ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe)) + +HRESULT WINAPI DllInstall(BOOL,LPCWSTR); + + +/* IsOS definitions */ + +#define OS_WIN32SORGREATER 0x00 +#define OS_NT 0x01 +#define OS_WIN95ORGREATER 0x02 +#define OS_NT4ORGREATER 0x03 +#define OS_WIN2000ORGREATER_ALT 0x04 +#define OS_WIN98ORGREATER 0x05 +#define OS_WIN98_GOLD 0x06 +#define OS_WIN2000ORGREATER 0x07 +#define OS_WIN2000PRO 0x08 +#define OS_WIN2000SERVER 0x09 +#define OS_WIN2000ADVSERVER 0x0A +#define OS_WIN2000DATACENTER 0x0B +#define OS_WIN2000TERMINAL 0x0C +#define OS_EMBEDDED 0x0D +#define OS_TERMINALCLIENT 0x0E +#define OS_TERMINALREMOTEADMIN 0x0F +#define OS_WIN95_GOLD 0x10 +#define OS_MEORGREATER 0x11 +#define OS_XPORGREATER 0x12 +#define OS_HOME 0x13 +#define OS_PROFESSIONAL 0x14 +#define OS_DATACENTER 0x15 +#define OS_ADVSERVER 0x16 +#define OS_SERVER 0x17 +#define OS_TERMINALSERVER 0x18 +#define OS_PERSONALTERMINALSERVER 0x19 +#define OS_FASTUSERSWITCHING 0x1A +#define OS_WELCOMELOGONUI 0x1B +#define OS_DOMAINMEMBER 0x1C +#define OS_ANYSERVER 0x1D +#define OS_WOW6432 0x1E +#define OS_WEBSERVER 0x1F +#define OS_SMALLBUSINESSSERVER 0x20 +#define OS_TABLETPC 0x21 +#define OS_SERVERADMINUI 0x22 +#define OS_MEDIACENTER 0x23 +#define OS_APPLIANCE 0x24 + +WINSHLWAPI BOOL WINAPI IsOS(DWORD); + +/* SHSetTimerQueueTimer definitions */ +#define TPS_EXECUTEIO 0x00000001 +#define TPS_LONGEXECTIME 0x00000008 + +/* SHFormatDateTimeA/SHFormatDateTimeW flags */ +#define FDTF_SHORTTIME 0x00000001 +#define FDTF_SHORTDATE 0x00000002 +#define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME) +#define FDTF_LONGDATE 0x00000004 +#define FDTF_LONGTIME 0x00000008 +#define FDTF_RELATIVE 0x00000010 +#define FDTF_LTRDATE 0x00000100 +#define FDTF_RTLDATE 0x00000200 +#define FDTF_NOAUTOREADINGORDER 0x00000400 + +WINSHLWAPI int WINAPI SHFormatDateTimeA(const FILETIME *filetime, DWORD *flags, LPSTR buffer, UINT size); +WINSHLWAPI int WINAPI SHFormatDateTimeW(const FILETIME *filetime, DWORD *flags, LPWSTR buffer, UINT size); + +typedef struct +{ + const IID *piid; + DWORD dwOffset; +} QITAB, *LPQITAB; + +WINSHLWAPI HRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv); + +#define PLATFORM_UNKNOWN 0 +#define PLATFORM_IE3 1 +#define PLATFORM_BROWSERONLY 1 +#define PLATFORM_INTEGRATED 2 + +WINSHLWAPI UINT WINAPI WhichPlatform(void); + +#define SHGVSPB_PERUSER 0x00000001 +#define SHGVSPB_ALLUSERS 0x00000002 +#define SHGVSPB_PERFOLDER 0x00000004 +#define SHGVSPB_ALLFOLDERS 0x00000008 +#define SHGVSPB_INHERIT 0x00000010 +#define SHGVSPB_ROAM 0x00000020 +#define SHGVSPB_NOAUTODEFAULTS 0x80000000 +#define SHGVSPB_FOLDER (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER) +#define SHGVSPB_FOLDERNODEFAULTS (SHGVSPB_PERUSER | SHGVSPB_PERFOLDER | SHGVSPB_NOAUTODEFAULTS) +#define SHGVSPB_USERDEFAULTS (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS) +#define SHGVSPB_GLOBALDEFAULTS (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS) + +WINSHLWAPI HRESULT WINAPI SHGetViewStatePropertyBag(PCIDLIST_ABSOLUTE pidl, PCWSTR bagname, DWORD flags, REFIID riid, void **ppv); + +#define ILMM_IE4 0 + +WINSHLWAPI BOOL WINAPI SHIsLowMemoryMachine(DWORD type); + +#include + +WINSHLWAPI HANDLE WINAPI SHAllocShared(const void *data, DWORD size, DWORD pid); +WINSHLWAPI BOOL WINAPI SHFreeShared(HANDLE handle, DWORD pid); +WINSHLWAPI void * WINAPI SHLockShared(HANDLE handle, DWORD pid); +WINSHLWAPI BOOL WINAPI SHUnlockShared(void *data); + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_SHLWAPI_H */