diff fuhtark_test/include/winapi/msi.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fuhtark_test/include/winapi/msi.h	Wed Nov 26 21:36:48 2025 +0700
@@ -0,0 +1,1069 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _MSI_H_
+#define _MSI_H_
+
+#ifndef NTDDI_WIN2K
+#define NTDDI_WIN2K 0x05000000
+#endif
+#ifndef NTDDI_WINXP
+#define NTDDI_WINXP 0x05010000
+#endif
+#ifndef NTDDI_WINXPSP2
+#define NTDDI_WINXPSP2 0x05010200
+#endif
+#ifndef NTDDI_WS03SP1
+#define NTDDI_WS03SP1 0x05020100
+#endif
+
+#ifndef _WIN32_MSI
+#if (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WS03SP1)
+#define _WIN32_MSI 310
+#elif (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINXPSP2)
+#define _WIN32_MSI 300
+#else
+#define _WIN32_MSI 200
+#endif
+#endif
+
+#if (_WIN32_MSI >= 150)
+#ifndef _MSI_NO_CRYPTO
+#include "wincrypt.h"
+#endif
+#endif
+
+typedef unsigned long MSIHANDLE;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  UINT WINAPI MsiCloseHandle(MSIHANDLE hAny);
+  UINT WINAPI MsiCloseAllHandles();
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+class PMSIHANDLE {
+  MSIHANDLE m_h;
+public:
+  PMSIHANDLE():m_h(0){}
+  PMSIHANDLE(MSIHANDLE h):m_h(h){}
+  ~PMSIHANDLE(){if (m_h!=0) MsiCloseHandle(m_h);}
+  void operator =(MSIHANDLE h) {if (m_h) MsiCloseHandle(m_h); m_h=h;}
+  operator MSIHANDLE() {return m_h;}
+  MSIHANDLE *operator &() {if (m_h) MsiCloseHandle(m_h); m_h = 0; return &m_h;}
+};
+#endif
+
+typedef enum tagINSTALLMESSAGE {
+  INSTALLMESSAGE_FATALEXIT = 0x00000000L,INSTALLMESSAGE_ERROR = 0x01000000L,INSTALLMESSAGE_WARNING = 0x02000000L,INSTALLMESSAGE_USER = 0x03000000L,
+  INSTALLMESSAGE_INFO = 0x04000000L,INSTALLMESSAGE_FILESINUSE = 0x05000000L,INSTALLMESSAGE_RESOLVESOURCE = 0x06000000L,
+  INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000L,INSTALLMESSAGE_ACTIONSTART = 0x08000000L,INSTALLMESSAGE_ACTIONDATA = 0x09000000L,
+  INSTALLMESSAGE_PROGRESS = 0x0A000000L,INSTALLMESSAGE_COMMONDATA = 0x0B000000L,INSTALLMESSAGE_INITIALIZE = 0x0C000000L,
+  INSTALLMESSAGE_TERMINATE = 0x0D000000L,INSTALLMESSAGE_SHOWDIALOG = 0x0E000000L
+} INSTALLMESSAGE;
+
+typedef int (WINAPI *INSTALLUI_HANDLERA)(LPVOID pvContext,UINT iMessageType,LPCSTR szMessage);
+typedef int (WINAPI *INSTALLUI_HANDLERW)(LPVOID pvContext,UINT iMessageType,LPCWSTR szMessage);
+#ifdef UNICODE
+#define INSTALLUI_HANDLER INSTALLUI_HANDLERW
+#else
+#define INSTALLUI_HANDLER INSTALLUI_HANDLERA
+#endif
+#if (_WIN32_MSI >= 310)
+typedef int (WINAPI *INSTALLUI_HANDLER_RECORD)(LPVOID pvContext,UINT iMessageType,MSIHANDLE hRecord);
+typedef INSTALLUI_HANDLER_RECORD *PINSTALLUI_HANDLER_RECORD;
+#endif
+
+typedef enum tagINSTALLUILEVEL {
+  INSTALLUILEVEL_NOCHANGE = 0,INSTALLUILEVEL_DEFAULT = 1,INSTALLUILEVEL_NONE = 2,INSTALLUILEVEL_BASIC = 3,INSTALLUILEVEL_REDUCED = 4,
+  INSTALLUILEVEL_FULL = 5,INSTALLUILEVEL_ENDDIALOG = 0x80,INSTALLUILEVEL_PROGRESSONLY = 0x40,INSTALLUILEVEL_HIDECANCEL = 0x20,
+  INSTALLUILEVEL_SOURCERESONLY = 0x100
+} INSTALLUILEVEL;
+
+typedef enum tagINSTALLSTATE {
+  INSTALLSTATE_NOTUSED = -7,INSTALLSTATE_BADCONFIG = -6,INSTALLSTATE_INCOMPLETE = -5,INSTALLSTATE_SOURCEABSENT = -4,INSTALLSTATE_MOREDATA = -3,
+  INSTALLSTATE_INVALIDARG = -2,INSTALLSTATE_UNKNOWN = -1,INSTALLSTATE_BROKEN = 0,INSTALLSTATE_ADVERTISED = 1,INSTALLSTATE_REMOVED = 1,
+  INSTALLSTATE_ABSENT = 2,INSTALLSTATE_LOCAL = 3,INSTALLSTATE_SOURCE = 4,INSTALLSTATE_DEFAULT = 5
+} INSTALLSTATE;
+
+typedef enum tagUSERINFOSTATE {
+  USERINFOSTATE_MOREDATA = -3,USERINFOSTATE_INVALIDARG = -2,USERINFOSTATE_UNKNOWN = -1,USERINFOSTATE_ABSENT = 0,USERINFOSTATE_PRESENT = 1
+} USERINFOSTATE;
+
+typedef enum tagINSTALLLEVEL {
+  INSTALLLEVEL_DEFAULT = 0,INSTALLLEVEL_MINIMUM = 1,INSTALLLEVEL_MAXIMUM = 0xFFFF
+} INSTALLLEVEL;
+
+typedef enum tagREINSTALLMODE {
+  REINSTALLMODE_REPAIR = 0x00000001,REINSTALLMODE_FILEMISSING = 0x00000002,REINSTALLMODE_FILEOLDERVERSION = 0x00000004,
+  REINSTALLMODE_FILEEQUALVERSION = 0x00000008,REINSTALLMODE_FILEEXACT = 0x00000010,REINSTALLMODE_FILEVERIFY = 0x00000020,
+  REINSTALLMODE_FILEREPLACE = 0x00000040,REINSTALLMODE_MACHINEDATA = 0x00000080,REINSTALLMODE_USERDATA = 0x00000100,
+  REINSTALLMODE_SHORTCUT = 0x00000200,REINSTALLMODE_PACKAGE = 0x00000400
+} REINSTALLMODE;
+
+typedef enum tagINSTALLOGMODE {
+  INSTALLLOGMODE_FATALEXIT = (1 << (INSTALLMESSAGE_FATALEXIT >> 24)),INSTALLLOGMODE_ERROR = (1 << (INSTALLMESSAGE_ERROR >> 24)),
+  INSTALLLOGMODE_WARNING = (1 << (INSTALLMESSAGE_WARNING >> 24)),INSTALLLOGMODE_USER = (1 << (INSTALLMESSAGE_USER >> 24)),
+  INSTALLLOGMODE_INFO = (1 << (INSTALLMESSAGE_INFO >> 24)),INSTALLLOGMODE_RESOLVESOURCE = (1 << (INSTALLMESSAGE_RESOLVESOURCE >> 24)),
+  INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)),INSTALLLOGMODE_ACTIONSTART = (1 << (INSTALLMESSAGE_ACTIONSTART >> 24)),
+  INSTALLLOGMODE_ACTIONDATA = (1 << (INSTALLMESSAGE_ACTIONDATA >> 24)),INSTALLLOGMODE_COMMONDATA = (1 << (INSTALLMESSAGE_COMMONDATA >> 24)),
+  INSTALLLOGMODE_PROPERTYDUMP = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),INSTALLLOGMODE_VERBOSE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
+  INSTALLLOGMODE_EXTRADEBUG = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),INSTALLLOGMODE_LOGONLYONERROR = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24)),
+  INSTALLLOGMODE_PROGRESS = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),INSTALLLOGMODE_INITIALIZE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
+  INSTALLLOGMODE_TERMINATE = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),INSTALLLOGMODE_SHOWDIALOG = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24)),
+  INSTALLLOGMODE_FILESINUSE = (1 << (INSTALLMESSAGE_FILESINUSE >> 24))
+} INSTALLLOGMODE;
+
+typedef enum tagINSTALLLOGATTRIBUTES {
+  INSTALLLOGATTRIBUTES_APPEND = (1 << 0),INSTALLLOGATTRIBUTES_FLUSHEACHLINE = (1 << 1)
+} INSTALLLOGATTRIBUTES;
+
+typedef enum tagINSTALLFEATUREATTRIBUTE {
+  INSTALLFEATUREATTRIBUTE_FAVORLOCAL = 1 << 0,INSTALLFEATUREATTRIBUTE_FAVORSOURCE = 1 << 1,
+  INSTALLFEATUREATTRIBUTE_FOLLOWPARENT = 1 << 2,INSTALLFEATUREATTRIBUTE_FAVORADVERTISE = 1 << 3,
+  INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE = 1 << 4,INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5
+} INSTALLFEATUREATTRIBUTE;
+
+typedef enum tagINSTALLMODE {
+#if (_WIN32_MSI >= 150)
+  INSTALLMODE_NODETECTION_ANY = -4,
+#endif
+  INSTALLMODE_NOSOURCERESOLUTION = -3,INSTALLMODE_NODETECTION = -2,INSTALLMODE_EXISTING = -1,INSTALLMODE_DEFAULT = 0
+} INSTALLMODE;
+
+#if (_WIN32_MSI >= 300)
+typedef enum tagMSIPATCHSTATE {
+  MSIPATCHSTATE_INVALID = 0,MSIPATCHSTATE_APPLIED = 1,MSIPATCHSTATE_SUPERSEDED = 2,MSIPATCHSTATE_OBSOLETED = 4,MSIPATCHSTATE_REGISTERED = 8,
+  MSIPATCHSTATE_ALL = (MSIPATCHSTATE_APPLIED | MSIPATCHSTATE_SUPERSEDED | MSIPATCHSTATE_OBSOLETED | MSIPATCHSTATE_REGISTERED)
+} MSIPATCHSTATE;
+
+typedef enum tagMSIINSTALLCONTEXT {
+  MSIINSTALLCONTEXT_FIRSTVISIBLE = 0,MSIINSTALLCONTEXT_NONE = 0,MSIINSTALLCONTEXT_USERMANAGED = 1,MSIINSTALLCONTEXT_USERUNMANAGED = 2,
+  MSIINSTALLCONTEXT_MACHINE = 4,
+  MSIINSTALLCONTEXT_ALL = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE),
+  MSIINSTALLCONTEXT_ALLUSERMANAGED = 8
+} MSIINSTALLCONTEXT;
+
+typedef enum tagMSIPATCHDATATYPE {
+  MSIPATCH_DATATYPE_PATCHFILE = 0,MSIPATCH_DATATYPE_XMLPATH = 1,MSIPATCH_DATATYPE_XMLBLOB = 2
+} MSIPATCHDATATYPE,*PMSIPATCHDATATYPE;
+
+typedef struct tagMSIPATCHSEQUENCEINFOA {
+  LPCSTR szPatchData;
+  MSIPATCHDATATYPE ePatchDataType;
+  DWORD dwOrder;
+  UINT uStatus;
+} MSIPATCHSEQUENCEINFOA,*PMSIPATCHSEQUENCEINFOA;
+
+typedef struct tagMSIPATCHSEQUENCEINFOW {
+  LPCWSTR szPatchData;
+  MSIPATCHDATATYPE ePatchDataType;
+  DWORD dwOrder;
+  UINT uStatus;
+} MSIPATCHSEQUENCEINFOW,*PMSIPATCHSEQUENCEINFOW;
+#ifdef UNICODE
+typedef MSIPATCHSEQUENCEINFOW MSIPATCHSEQUENCEINFO;
+typedef PMSIPATCHSEQUENCEINFOW PMSIPATCHSEQUENCEINFO;
+#else
+typedef MSIPATCHSEQUENCEINFOA MSIPATCHSEQUENCEINFO;
+typedef PMSIPATCHSEQUENCEINFOA PMSIPATCHSEQUENCEINFO;
+#endif
+#endif
+
+#define MAX_FEATURE_CHARS 38
+
+#define INSTALLPROPERTY_PACKAGENAME __TEXT("PackageName")
+#define INSTALLPROPERTY_TRANSFORMS __TEXT("Transforms")
+#define INSTALLPROPERTY_LANGUAGE __TEXT("Language")
+#define INSTALLPROPERTY_PRODUCTNAME __TEXT("ProductName")
+#define INSTALLPROPERTY_ASSIGNMENTTYPE __TEXT("AssignmentType")
+#if (_WIN32_MSI >= 150)
+#define INSTALLPROPERTY_INSTANCETYPE __TEXT("InstanceType")
+#endif
+#if (_WIN32_MSI >= 300)
+#define INSTALLPROPERTY_AUTHORIZED_LUA_APP __TEXT("AuthorizedLUAApp")
+#endif
+
+#define INSTALLPROPERTY_PACKAGECODE __TEXT("PackageCode")
+#define INSTALLPROPERTY_VERSION __TEXT("Version")
+#if (_WIN32_MSI >= 110)
+#define INSTALLPROPERTY_PRODUCTICON __TEXT("ProductIcon")
+#endif
+
+#define INSTALLPROPERTY_INSTALLEDPRODUCTNAME __TEXT("InstalledProductName")
+#define INSTALLPROPERTY_VERSIONSTRING __TEXT("VersionString")
+#define INSTALLPROPERTY_HELPLINK __TEXT("HelpLink")
+#define INSTALLPROPERTY_HELPTELEPHONE __TEXT("HelpTelephone")
+#define INSTALLPROPERTY_INSTALLLOCATION __TEXT("InstallLocation")
+#define INSTALLPROPERTY_INSTALLSOURCE __TEXT("InstallSource")
+#define INSTALLPROPERTY_INSTALLDATE __TEXT("InstallDate")
+#define INSTALLPROPERTY_PUBLISHER __TEXT("Publisher")
+#define INSTALLPROPERTY_LOCALPACKAGE __TEXT("LocalPackage")
+#define INSTALLPROPERTY_URLINFOABOUT __TEXT("URLInfoAbout")
+#define INSTALLPROPERTY_URLUPDATEINFO __TEXT("URLUpdateInfo")
+#define INSTALLPROPERTY_VERSIONMINOR __TEXT("VersionMinor")
+#define INSTALLPROPERTY_VERSIONMAJOR __TEXT("VersionMajor")
+#define INSTALLPROPERTY_PRODUCTID __TEXT("ProductID")
+#define INSTALLPROPERTY_REGCOMPANY __TEXT("RegCompany")
+#define INSTALLPROPERTY_REGOWNER __TEXT("RegOwner")
+
+#if (_WIN32_MSI >= 300)
+#define INSTALLPROPERTY_UNINSTALLABLE __TEXT("Uninstallable")
+#define INSTALLPROPERTY_PRODUCTSTATE __TEXT("State")
+#define INSTALLPROPERTY_PATCHSTATE __TEXT("State")
+#define INSTALLPROPERTY_PATCHTYPE __TEXT("PatchType")
+#define INSTALLPROPERTY_LUAENABLED __TEXT("LUAEnabled")
+#define INSTALLPROPERTY_DISPLAYNAME __TEXT("DisplayName")
+#define INSTALLPROPERTY_MOREINFOURL __TEXT("MoreInfoURL")
+
+#define INSTALLPROPERTY_LASTUSEDSOURCE __TEXT("LastUsedSource")
+#define INSTALLPROPERTY_LASTUSEDTYPE __TEXT("LastUsedType")
+#define INSTALLPROPERTY_MEDIAPACKAGEPATH __TEXT("MediaPackagePath")
+#define INSTALLPROPERTY_DISKPROMPT __TEXT("DiskPrompt")
+#endif
+
+typedef enum tagSCRIPTFLAGS {
+  SCRIPTFLAGS_CACHEINFO = 0x00000001L,SCRIPTFLAGS_SHORTCUTS = 0x00000004L,SCRIPTFLAGS_MACHINEASSIGN = 0x00000008L,
+  SCRIPTFLAGS_REGDATA_CNFGINFO = 0x00000020L,SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x00000040L,
+#if (_WIN32_MSI >= 110)
+  SCRIPTFLAGS_REGDATA_CLASSINFO = 0x00000080L,SCRIPTFLAGS_REGDATA_EXTENSIONINFO = 0x00000100L,
+  SCRIPTFLAGS_REGDATA_APPINFO = SCRIPTFLAGS_REGDATA_CLASSINFO | SCRIPTFLAGS_REGDATA_EXTENSIONINFO,
+#else
+  SCRIPTFLAGS_REGDATA_APPINFO = 0x00000010L,
+#endif
+  SCRIPTFLAGS_REGDATA = SCRIPTFLAGS_REGDATA_APPINFO | SCRIPTFLAGS_REGDATA_CNFGINFO
+} SCRIPTFLAGS;
+
+typedef enum tagADVERTISEFLAGS {
+  ADVERTISEFLAGS_MACHINEASSIGN = 0,ADVERTISEFLAGS_USERASSIGN = 1
+} ADVERTISEFLAGS;
+
+typedef enum tagINSTALLTYPE {
+  INSTALLTYPE_DEFAULT = 0,INSTALLTYPE_NETWORK_IMAGE = 1,INSTALLTYPE_SINGLE_INSTANCE = 2
+} INSTALLTYPE;
+
+#if (_WIN32_MSI >= 150)
+typedef struct _MSIFILEHASHINFO {
+  ULONG dwFileHashInfoSize;
+  ULONG dwData [4 ];
+} MSIFILEHASHINFO,*PMSIFILEHASHINFO;
+
+typedef enum tagMSIARCHITECTUREFLAGS {
+  MSIARCHITECTUREFLAGS_X86 = 0x00000001L,MSIARCHITECTUREFLAGS_IA64 = 0x00000002L,MSIARCHITECTUREFLAGS_AMD64 = 0x00000004L
+} MSIARCHITECTUREFLAGS;
+
+typedef enum tagMSIOPENPACKAGEFLAGS {
+  MSIOPENPACKAGEFLAGS_IGNOREMACHINESTATE = 0x00000001L
+} MSIOPENPACKAGEFLAGS;
+
+typedef enum tagMSIADVERTISEOPTIONFLAGS {
+  MSIADVERTISEOPTIONFLAGS_INSTANCE = 0x00000001L
+} MSIADVERTISEOPTIONFLAGS;
+#endif
+
+#if (_WIN32_MSI >= 300)
+typedef enum tagMSISOURCETYPE {
+  MSISOURCETYPE_UNKNOWN = 0x00000000L,MSISOURCETYPE_NETWORK = 0x00000001L,MSISOURCETYPE_URL = 0x00000002L,MSISOURCETYPE_MEDIA = 0x00000004L
+} MSISOURCETYPE;
+
+typedef enum tagMSICODE {
+  MSICODE_PRODUCT = 0x00000000L,MSICODE_PATCH = 0x40000000L
+} MSICODE;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel,HWND *phWnd);
+  INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA puiHandler,DWORD dwMessageFilter,LPVOID pvContext);
+  INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW puiHandler,DWORD dwMessageFilter,LPVOID pvContext);
+#ifdef UNICODE
+#define MsiSetExternalUI MsiSetExternalUIW
+#else
+#define MsiSetExternalUI MsiSetExternalUIA
+#endif
+
+#if (_WIN32_MSI >= 310)
+  UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD puiHandler,DWORD dwMessageFilter,LPVOID pvContext,PINSTALLUI_HANDLER_RECORD ppuiPrevHandler);
+#endif
+
+  UINT WINAPI MsiEnableLogA(DWORD dwLogMode,LPCSTR szLogFile,DWORD dwLogAttributes);
+  UINT WINAPI MsiEnableLogW(DWORD dwLogMode,LPCWSTR szLogFile,DWORD dwLogAttributes);
+#ifdef UNICODE
+#define MsiEnableLog MsiEnableLogW
+#else
+#define MsiEnableLog MsiEnableLogA
+#endif
+
+  INSTALLSTATE WINAPI MsiQueryProductStateA(LPCSTR szProduct);
+  INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct);
+#ifdef UNICODE
+#define MsiQueryProductState MsiQueryProductStateW
+#else
+#define MsiQueryProductState MsiQueryProductStateA
+#endif
+
+  UINT WINAPI MsiGetProductInfoA(LPCSTR szProduct,LPCSTR szAttribute,LPSTR lpValueBuf,DWORD *pcchValueBuf);
+  UINT WINAPI MsiGetProductInfoW(LPCWSTR szProduct,LPCWSTR szAttribute,LPWSTR lpValueBuf,DWORD *pcchValueBuf);
+#ifdef UNICODE
+#define MsiGetProductInfo MsiGetProductInfoW
+#else
+#define MsiGetProductInfo MsiGetProductInfoA
+#endif
+
+#if (_WIN32_MSI >= 300)
+
+  UINT WINAPI MsiGetProductInfoExA(LPCSTR szProductCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCSTR szProperty,LPSTR szValue,LPDWORD pcchValue);
+  UINT WINAPI MsiGetProductInfoExW(LPCWSTR szProductCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCWSTR szProperty,LPWSTR szValue,LPDWORD pcchValue);
+#ifdef UNICODE
+#define MsiGetProductInfoEx MsiGetProductInfoExW
+#else
+#define MsiGetProductInfoEx MsiGetProductInfoExA
+#endif
+#endif
+
+  UINT WINAPI MsiInstallProductA(LPCSTR szPackagePath,LPCSTR szCommandLine);
+  UINT WINAPI MsiInstallProductW(LPCWSTR szPackagePath,LPCWSTR szCommandLine);
+#ifdef UNICODE
+#define MsiInstallProduct MsiInstallProductW
+#else
+#define MsiInstallProduct MsiInstallProductA
+#endif
+
+  UINT WINAPI MsiConfigureProductA(LPCSTR szProduct,int iInstallLevel,INSTALLSTATE eInstallState);
+  UINT WINAPI MsiConfigureProductW(LPCWSTR szProduct,int iInstallLevel,INSTALLSTATE eInstallState);
+#ifdef UNICODE
+#define MsiConfigureProduct MsiConfigureProductW
+#else
+#define MsiConfigureProduct MsiConfigureProductA
+#endif
+
+  UINT WINAPI MsiConfigureProductExA(LPCSTR szProduct,int iInstallLevel,INSTALLSTATE eInstallState,LPCSTR szCommandLine);
+  UINT WINAPI MsiConfigureProductExW(LPCWSTR szProduct,int iInstallLevel,INSTALLSTATE eInstallState,LPCWSTR szCommandLine);
+#ifdef UNICODE
+#define MsiConfigureProductEx MsiConfigureProductExW
+#else
+#define MsiConfigureProductEx MsiConfigureProductExA
+#endif
+
+  UINT WINAPI MsiReinstallProductA(LPCSTR szProduct,DWORD szReinstallMode);
+  UINT WINAPI MsiReinstallProductW(LPCWSTR szProduct,DWORD szReinstallMode);
+#ifdef UNICODE
+#define MsiReinstallProduct MsiReinstallProductW
+#else
+#define MsiReinstallProduct MsiReinstallProductA
+#endif
+
+#if (_WIN32_MSI >= 150)
+
+  UINT WINAPI MsiAdvertiseProductExA(LPCSTR szPackagePath,LPCSTR szScriptfilePath,LPCSTR szTransforms,LANGID lgidLanguage,DWORD dwPlatform,DWORD dwOptions);
+  UINT WINAPI MsiAdvertiseProductExW(LPCWSTR szPackagePath,LPCWSTR szScriptfilePath,LPCWSTR szTransforms,LANGID lgidLanguage,DWORD dwPlatform,DWORD dwOptions);
+#ifdef UNICODE
+#define MsiAdvertiseProductEx MsiAdvertiseProductExW
+#else
+#define MsiAdvertiseProductEx MsiAdvertiseProductExA
+#endif
+#endif
+
+  UINT WINAPI MsiAdvertiseProductA(LPCSTR szPackagePath,LPCSTR szScriptfilePath,LPCSTR szTransforms,LANGID lgidLanguage);
+  UINT WINAPI MsiAdvertiseProductW(LPCWSTR szPackagePath,LPCWSTR szScriptfilePath,LPCWSTR szTransforms,LANGID lgidLanguage);
+#ifdef UNICODE
+#define MsiAdvertiseProduct MsiAdvertiseProductW
+#else
+#define MsiAdvertiseProduct MsiAdvertiseProductA
+#endif
+
+#if (_WIN32_MSI >= 150)
+
+  UINT WINAPI MsiProcessAdvertiseScriptA(LPCSTR szScriptFile,LPCSTR szIconFolder,HKEY hRegData,WINBOOL fShortcuts,WINBOOL fRemoveItems);
+  UINT WINAPI MsiProcessAdvertiseScriptW(LPCWSTR szScriptFile,LPCWSTR szIconFolder,HKEY hRegData,WINBOOL fShortcuts,WINBOOL fRemoveItems);
+#ifdef UNICODE
+#define MsiProcessAdvertiseScript MsiProcessAdvertiseScriptW
+#else
+#define MsiProcessAdvertiseScript MsiProcessAdvertiseScriptA
+#endif
+#endif
+
+  UINT WINAPI MsiAdvertiseScriptA(LPCSTR szScriptFile,DWORD dwFlags,PHKEY phRegData,WINBOOL fRemoveItems);
+  UINT WINAPI MsiAdvertiseScriptW(LPCWSTR szScriptFile,DWORD dwFlags,PHKEY phRegData,WINBOOL fRemoveItems);
+#ifdef UNICODE
+#define MsiAdvertiseScript MsiAdvertiseScriptW
+#else
+#define MsiAdvertiseScript MsiAdvertiseScriptA
+#endif
+
+  UINT WINAPI MsiGetProductInfoFromScriptA(LPCSTR szScriptFile,LPSTR lpProductBuf39,LANGID *plgidLanguage,DWORD *pdwVersion,LPSTR lpNameBuf,DWORD *pcchNameBuf,LPSTR lpPackageBuf,DWORD *pcchPackageBuf);
+  UINT WINAPI MsiGetProductInfoFromScriptW(LPCWSTR szScriptFile,LPWSTR lpProductBuf39,LANGID *plgidLanguage,DWORD *pdwVersion,LPWSTR lpNameBuf,DWORD *pcchNameBuf,LPWSTR lpPackageBuf,DWORD *pcchPackageBuf);
+#ifdef UNICODE
+#define MsiGetProductInfoFromScript MsiGetProductInfoFromScriptW
+#else
+#define MsiGetProductInfoFromScript MsiGetProductInfoFromScriptA
+#endif
+
+  UINT WINAPI MsiGetProductCodeA(LPCSTR szComponent,LPSTR lpBuf39);
+  UINT WINAPI MsiGetProductCodeW(LPCWSTR szComponent,LPWSTR lpBuf39);
+#ifdef UNICODE
+#define MsiGetProductCode MsiGetProductCodeW
+#else
+#define MsiGetProductCode MsiGetProductCodeA
+#endif
+
+  USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR szProduct,LPSTR lpUserNameBuf,DWORD *pcchUserNameBuf,LPSTR lpOrgNameBuf,DWORD *pcchOrgNameBuf,LPSTR lpSerialBuf,DWORD *pcchSerialBuf);
+  USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR szProduct,LPWSTR lpUserNameBuf,DWORD *pcchUserNameBuf,LPWSTR lpOrgNameBuf,DWORD *pcchOrgNameBuf,LPWSTR lpSerialBuf,DWORD *pcchSerialBuf);
+#ifdef UNICODE
+#define MsiGetUserInfo MsiGetUserInfoW
+#else
+#define MsiGetUserInfo MsiGetUserInfoA
+#endif
+
+  UINT WINAPI MsiCollectUserInfoA(LPCSTR szProduct);
+  UINT WINAPI MsiCollectUserInfoW(LPCWSTR szProduct);
+#ifdef UNICODE
+#define MsiCollectUserInfo MsiCollectUserInfoW
+#else
+#define MsiCollectUserInfo MsiCollectUserInfoA
+#endif
+
+  UINT WINAPI MsiApplyPatchA(LPCSTR szPatchPackage,LPCSTR szInstallPackage,INSTALLTYPE eInstallType,LPCSTR szCommandLine);
+  UINT WINAPI MsiApplyPatchW(LPCWSTR szPatchPackage,LPCWSTR szInstallPackage,INSTALLTYPE eInstallType,LPCWSTR szCommandLine);
+#ifdef UNICODE
+#define MsiApplyPatch MsiApplyPatchW
+#else
+#define MsiApplyPatch MsiApplyPatchA
+#endif
+
+  UINT WINAPI MsiGetPatchInfoA(LPCSTR szPatch,LPCSTR szAttribute,LPSTR lpValueBuf,DWORD *pcchValueBuf);
+  UINT WINAPI MsiGetPatchInfoW(LPCWSTR szPatch,LPCWSTR szAttribute,LPWSTR lpValueBuf,DWORD *pcchValueBuf);
+#ifdef UNICODE
+#define MsiGetPatchInfo MsiGetPatchInfoW
+#else
+#define MsiGetPatchInfo MsiGetPatchInfoA
+#endif
+
+  UINT WINAPI MsiEnumPatchesA(LPCSTR szProduct,DWORD iPatchIndex,LPSTR lpPatchBuf,LPSTR lpTransformsBuf,DWORD *pcchTransformsBuf);
+  UINT WINAPI MsiEnumPatchesW(LPCWSTR szProduct,DWORD iPatchIndex,LPWSTR lpPatchBuf,LPWSTR lpTransformsBuf,DWORD *pcchTransformsBuf);
+#ifdef UNICODE
+#define MsiEnumPatches MsiEnumPatchesW
+#else
+#define MsiEnumPatches MsiEnumPatchesA
+#endif
+
+#if (_WIN32_MSI >= 300)
+
+  UINT WINAPI MsiRemovePatchesA(LPCSTR szPatchList,LPCSTR szProductCode,INSTALLTYPE eUninstallType,LPCSTR szPropertyList);
+  UINT WINAPI MsiRemovePatchesW(LPCWSTR szPatchList,LPCWSTR szProductCode,INSTALLTYPE eUninstallType,LPCWSTR szPropertyList);
+#ifdef UNICODE
+#define MsiRemovePatches MsiRemovePatchesW
+#else
+#define MsiRemovePatches MsiRemovePatchesA
+#endif
+
+  UINT WINAPI MsiExtractPatchXMLDataA(LPCSTR szPatchPath,DWORD dwReserved,LPSTR szXMLData,DWORD *pcchXMLData);
+  UINT WINAPI MsiExtractPatchXMLDataW(LPCWSTR szPatchPath,DWORD dwReserved,LPWSTR szXMLData,DWORD *pcchXMLData);
+#ifdef UNICODE
+#define MsiExtractPatchXMLData MsiExtractPatchXMLDataW
+#else
+#define MsiExtractPatchXMLData MsiExtractPatchXMLDataA
+#endif
+
+  UINT WINAPI MsiGetPatchInfoExA(LPCSTR szPatchCode,LPCSTR szProductCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCSTR szProperty,LPSTR lpValue,DWORD *pcchValue);
+  UINT WINAPI MsiGetPatchInfoExW(LPCWSTR szPatchCode,LPCWSTR szProductCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCWSTR szProperty,LPWSTR lpValue,DWORD *pcchValue);
+#ifdef UNICODE
+#define MsiGetPatchInfoEx MsiGetPatchInfoExW
+#else
+#define MsiGetPatchInfoEx MsiGetPatchInfoExA
+#endif
+
+  UINT WINAPI MsiApplyMultiplePatchesA(LPCSTR szPatchPackages,LPCSTR szProductCode,LPCSTR szPropertiesList);
+  UINT WINAPI MsiApplyMultiplePatchesW(LPCWSTR szPatchPackages,LPCWSTR szProductCode,LPCWSTR szPropertiesList);
+#ifdef UNICODE
+#define MsiApplyMultiplePatches MsiApplyMultiplePatchesW
+#else
+#define MsiApplyMultiplePatches MsiApplyMultiplePatchesA
+#endif
+
+  UINT WINAPI MsiDeterminePatchSequenceA(LPCSTR szProductCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD cPatchInfo,PMSIPATCHSEQUENCEINFOA pPatchInfo);
+  UINT WINAPI MsiDeterminePatchSequenceW(LPCWSTR szProductCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD cPatchInfo,PMSIPATCHSEQUENCEINFOW pPatchInfo);
+#ifdef UNICODE
+#define MsiDeterminePatchSequence MsiDeterminePatchSequenceW
+#else
+#define MsiDeterminePatchSequence MsiDeterminePatchSequenceA
+#endif
+
+  UINT WINAPI MsiDetermineApplicablePatchesA(LPCSTR szProductPackagePath,DWORD cPatchInfo,PMSIPATCHSEQUENCEINFOA pPatchInfo);
+  UINT WINAPI MsiDetermineApplicablePatchesW(LPCWSTR szProductPackagePath,DWORD cPatchInfo,PMSIPATCHSEQUENCEINFOW pPatchInfo);
+#ifdef UNICODE
+#define MsiDetermineApplicablePatches MsiDetermineApplicablePatchesW
+#else
+#define MsiDetermineApplicablePatches MsiDetermineApplicablePatchesA
+#endif
+
+  UINT WINAPI MsiEnumPatchesExA(LPCSTR szProductCode,LPCSTR szUserSid,DWORD dwContext,DWORD dwFilter,DWORD dwIndex,CHAR szPatchCode[39],CHAR szTargetProductCode[39],MSIINSTALLCONTEXT *pdwTargetProductContext,LPSTR szTargetUserSid,LPDWORD pcchTargetUserSid);
+  UINT WINAPI MsiEnumPatchesExW(LPCWSTR szProductCode,LPCWSTR szUserSid,DWORD dwContext,DWORD dwFilter,DWORD dwIndex,WCHAR szPatchCode[39],WCHAR szTargetProductCode[39],MSIINSTALLCONTEXT *pdwTargetProductContext,LPWSTR szTargetUserSid,LPDWORD pcchTargetUserSid);
+#ifdef UNICODE
+#define MsiEnumPatchesEx MsiEnumPatchesExW
+#else
+#define MsiEnumPatchesEx MsiEnumPatchesExA
+#endif
+#endif
+
+  INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR szProduct,LPCSTR szFeature);
+  INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR szProduct,LPCWSTR szFeature);
+#ifdef UNICODE
+#define MsiQueryFeatureState MsiQueryFeatureStateW
+#else
+#define MsiQueryFeatureState MsiQueryFeatureStateA
+#endif
+
+#if (_WIN32_MSI >= 300)
+
+  UINT WINAPI MsiQueryFeatureStateExA(LPCSTR szProductCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCSTR szFeature,INSTALLSTATE *pdwState);
+  UINT WINAPI MsiQueryFeatureStateExW(LPCWSTR szProductCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCWSTR szFeature,INSTALLSTATE *pdwState);
+#ifdef UNICODE
+#define MsiQueryFeatureStateEx MsiQueryFeatureStateExW
+#else
+#define MsiQueryFeatureStateEx MsiQueryFeatureStateExA
+#endif
+#endif
+
+  INSTALLSTATE WINAPI MsiUseFeatureA(LPCSTR szProduct,LPCSTR szFeature);
+  INSTALLSTATE WINAPI MsiUseFeatureW(LPCWSTR szProduct,LPCWSTR szFeature);
+#ifdef UNICODE
+#define MsiUseFeature MsiUseFeatureW
+#else
+#define MsiUseFeature MsiUseFeatureA
+#endif
+
+  INSTALLSTATE WINAPI MsiUseFeatureExA(LPCSTR szProduct,LPCSTR szFeature,DWORD dwInstallMode,DWORD dwReserved);
+  INSTALLSTATE WINAPI MsiUseFeatureExW(LPCWSTR szProduct,LPCWSTR szFeature,DWORD dwInstallMode,DWORD dwReserved);
+#ifdef UNICODE
+#define MsiUseFeatureEx MsiUseFeatureExW
+#else
+#define MsiUseFeatureEx MsiUseFeatureExA
+#endif
+
+  UINT WINAPI MsiGetFeatureUsageA(LPCSTR szProduct,LPCSTR szFeature,DWORD *pdwUseCount,WORD *pwDateUsed);
+  UINT WINAPI MsiGetFeatureUsageW(LPCWSTR szProduct,LPCWSTR szFeature,DWORD *pdwUseCount,WORD *pwDateUsed);
+#ifdef UNICODE
+#define MsiGetFeatureUsage MsiGetFeatureUsageW
+#else
+#define MsiGetFeatureUsage MsiGetFeatureUsageA
+#endif
+
+  UINT WINAPI MsiConfigureFeatureA(LPCSTR szProduct,LPCSTR szFeature,INSTALLSTATE eInstallState);
+  UINT WINAPI MsiConfigureFeatureW(LPCWSTR szProduct,LPCWSTR szFeature,INSTALLSTATE eInstallState);
+#ifdef UNICODE
+#define MsiConfigureFeature MsiConfigureFeatureW
+#else
+#define MsiConfigureFeature MsiConfigureFeatureA
+#endif
+
+  UINT WINAPI MsiReinstallFeatureA(LPCSTR szProduct,LPCSTR szFeature,DWORD dwReinstallMode);
+  UINT WINAPI MsiReinstallFeatureW(LPCWSTR szProduct,LPCWSTR szFeature,DWORD dwReinstallMode);
+#ifdef UNICODE
+#define MsiReinstallFeature MsiReinstallFeatureW
+#else
+#define MsiReinstallFeature MsiReinstallFeatureA
+#endif
+
+  UINT WINAPI MsiProvideComponentA(LPCSTR szProduct,LPCSTR szFeature,LPCSTR szComponent,DWORD dwInstallMode,LPSTR lpPathBuf,DWORD *pcchPathBuf);
+  UINT WINAPI MsiProvideComponentW(LPCWSTR szProduct,LPCWSTR szFeature,LPCWSTR szComponent,DWORD dwInstallMode,LPWSTR lpPathBuf,DWORD *pcchPathBuf);
+#ifdef UNICODE
+#define MsiProvideComponent MsiProvideComponentW
+#else
+#define MsiProvideComponent MsiProvideComponentA
+#endif
+
+  UINT WINAPI MsiProvideQualifiedComponentA(LPCSTR szCategory,LPCSTR szQualifier,DWORD dwInstallMode,LPSTR lpPathBuf,DWORD *pcchPathBuf);
+  UINT WINAPI MsiProvideQualifiedComponentW(LPCWSTR szCategory,LPCWSTR szQualifier,DWORD dwInstallMode,LPWSTR lpPathBuf,DWORD *pcchPathBuf);
+#ifdef UNICODE
+#define MsiProvideQualifiedComponent MsiProvideQualifiedComponentW
+#else
+#define MsiProvideQualifiedComponent MsiProvideQualifiedComponentA
+#endif
+
+  UINT WINAPI MsiProvideQualifiedComponentExA(LPCSTR szCategory,LPCSTR szQualifier,DWORD dwInstallMode,LPCSTR szProduct,DWORD dwUnused1,DWORD dwUnused2,LPSTR lpPathBuf,DWORD *pcchPathBuf);
+  UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR szCategory,LPCWSTR szQualifier,DWORD dwInstallMode,LPCWSTR szProduct,DWORD dwUnused1,DWORD dwUnused2,LPWSTR lpPathBuf,DWORD *pcchPathBuf);
+#ifdef UNICODE
+#define MsiProvideQualifiedComponentEx MsiProvideQualifiedComponentExW
+#else
+#define MsiProvideQualifiedComponentEx MsiProvideQualifiedComponentExA
+#endif
+
+  INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR szProduct,LPCSTR szComponent,LPSTR lpPathBuf,DWORD *pcchBuf);
+  INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR szProduct,LPCWSTR szComponent,LPWSTR lpPathBuf,DWORD *pcchBuf);
+#ifdef UNICODE
+#define MsiGetComponentPath MsiGetComponentPathW
+#else
+#define MsiGetComponentPath MsiGetComponentPathA
+#endif
+
+#if (_WIN32_MSI >= 150)
+
+#define MSIASSEMBLYINFO_NETASSEMBLY 0
+#define MSIASSEMBLYINFO_WIN32ASSEMBLY 1
+
+  UINT WINAPI MsiProvideAssemblyA(LPCSTR szAssemblyName,LPCSTR szAppContext,DWORD dwInstallMode,DWORD dwAssemblyInfo,LPSTR lpPathBuf,DWORD *pcchPathBuf);
+  UINT WINAPI MsiProvideAssemblyW(LPCWSTR szAssemblyName,LPCWSTR szAppContext,DWORD dwInstallMode,DWORD dwAssemblyInfo,LPWSTR lpPathBuf,DWORD *pcchPathBuf);
+#ifdef UNICODE
+#define MsiProvideAssembly MsiProvideAssemblyW
+#else
+#define MsiProvideAssembly MsiProvideAssemblyA
+#endif
+#endif
+
+#if (_WIN32_MSI >= 300)
+
+  UINT WINAPI MsiQueryComponentStateA(LPCSTR szProductCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCSTR szComponentCode,INSTALLSTATE *pdwState);
+  UINT WINAPI MsiQueryComponentStateW(LPCWSTR szProductCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,LPCWSTR szComponentCode,INSTALLSTATE *pdwState);
+#ifdef UNICODE
+#define MsiQueryComponentState MsiQueryComponentStateW
+#else
+#define MsiQueryComponentState MsiQueryComponentStateA
+#endif
+#endif
+
+  UINT WINAPI MsiEnumProductsA(DWORD iProductIndex,LPSTR lpProductBuf);
+  UINT WINAPI MsiEnumProductsW(DWORD iProductIndex,LPWSTR lpProductBuf);
+#ifdef UNICODE
+#define MsiEnumProducts MsiEnumProductsW
+#else
+#define MsiEnumProducts MsiEnumProductsA
+#endif
+
+#if (_WIN32_MSI >= 300)
+  UINT WINAPI MsiEnumProductsExA(LPCSTR szProductCode,LPCSTR szUserSid,DWORD dwContext,DWORD dwIndex,CHAR szInstalledProductCode[39],MSIINSTALLCONTEXT *pdwInstalledContext,LPSTR szSid,LPDWORD pcchSid);
+  UINT WINAPI MsiEnumProductsExW(LPCWSTR szProductCode,LPCWSTR szUserSid,DWORD dwContext,DWORD dwIndex,WCHAR szInstalledProductCode[39],MSIINSTALLCONTEXT *pdwInstalledContext,LPWSTR szSid,LPDWORD pcchSid);
+#ifdef UNICODE
+#define MsiEnumProductsEx MsiEnumProductsExW
+#else
+#define MsiEnumProductsEx MsiEnumProductsExA
+#endif
+#endif
+
+#if (_WIN32_MSI >= 110)
+  UINT WINAPI MsiEnumRelatedProductsA(LPCSTR lpUpgradeCode,DWORD dwReserved,DWORD iProductIndex,LPSTR lpProductBuf);
+  UINT WINAPI MsiEnumRelatedProductsW(LPCWSTR lpUpgradeCode,DWORD dwReserved,DWORD iProductIndex,LPWSTR lpProductBuf);
+#ifdef UNICODE
+#define MsiEnumRelatedProducts MsiEnumRelatedProductsW
+#else
+#define MsiEnumRelatedProducts MsiEnumRelatedProductsA
+#endif
+#endif
+
+  UINT WINAPI MsiEnumFeaturesA(LPCSTR szProduct,DWORD iFeatureIndex,LPSTR lpFeatureBuf,LPSTR lpParentBuf);
+  UINT WINAPI MsiEnumFeaturesW(LPCWSTR szProduct,DWORD iFeatureIndex,LPWSTR lpFeatureBuf,LPWSTR lpParentBuf);
+#ifdef UNICODE
+#define MsiEnumFeatures MsiEnumFeaturesW
+#else
+#define MsiEnumFeatures MsiEnumFeaturesA
+#endif
+
+  UINT WINAPI MsiEnumComponentsA(DWORD iComponentIndex,LPSTR lpComponentBuf);
+  UINT WINAPI MsiEnumComponentsW(DWORD iComponentIndex,LPWSTR lpComponentBuf);
+#ifdef UNICODE
+#define MsiEnumComponents MsiEnumComponentsW
+#else
+#define MsiEnumComponents MsiEnumComponentsA
+#endif
+
+  UINT WINAPI MsiEnumClientsA(LPCSTR szComponent,DWORD iProductIndex,LPSTR lpProductBuf);
+  UINT WINAPI MsiEnumClientsW(LPCWSTR szComponent,DWORD iProductIndex,LPWSTR lpProductBuf);
+#ifdef UNICODE
+#define MsiEnumClients MsiEnumClientsW
+#else
+#define MsiEnumClients MsiEnumClientsA
+#endif
+
+  UINT WINAPI MsiEnumComponentQualifiersA(LPCSTR szComponent,DWORD iIndex,LPSTR lpQualifierBuf,DWORD *pcchQualifierBuf,LPSTR lpApplicationDataBuf,DWORD *pcchApplicationDataBuf);
+  UINT WINAPI MsiEnumComponentQualifiersW(LPCWSTR szComponent,DWORD iIndex,LPWSTR lpQualifierBuf,DWORD *pcchQualifierBuf,LPWSTR lpApplicationDataBuf,DWORD *pcchApplicationDataBuf);
+#ifdef UNICODE
+#define MsiEnumComponentQualifiers MsiEnumComponentQualifiersW
+#else
+#define MsiEnumComponentQualifiers MsiEnumComponentQualifiersA
+#endif
+
+  UINT WINAPI MsiOpenProductA(LPCSTR szProduct,MSIHANDLE *hProduct);
+  UINT WINAPI MsiOpenProductW(LPCWSTR szProduct,MSIHANDLE *hProduct);
+#ifdef UNICODE
+#define MsiOpenProduct MsiOpenProductW
+#else
+#define MsiOpenProduct MsiOpenProductA
+#endif
+
+  UINT WINAPI MsiOpenPackageA(LPCSTR szPackagePath,MSIHANDLE *hProduct);
+  UINT WINAPI MsiOpenPackageW(LPCWSTR szPackagePath,MSIHANDLE *hProduct);
+#ifdef UNICODE
+#define MsiOpenPackage MsiOpenPackageW
+#else
+#define MsiOpenPackage MsiOpenPackageA
+#endif
+
+#if (_WIN32_MSI >= 150)
+
+  UINT WINAPI MsiOpenPackageExA(LPCSTR szPackagePath,DWORD dwOptions,MSIHANDLE *hProduct);
+  UINT WINAPI MsiOpenPackageExW(LPCWSTR szPackagePath,DWORD dwOptions,MSIHANDLE *hProduct);
+#ifdef UNICODE
+#define MsiOpenPackageEx MsiOpenPackageExW
+#else
+#define MsiOpenPackageEx MsiOpenPackageExA
+#endif
+#endif
+
+  UINT WINAPI MsiGetProductPropertyA(MSIHANDLE hProduct,LPCSTR szProperty,LPSTR lpValueBuf,DWORD *pcchValueBuf);
+  UINT WINAPI MsiGetProductPropertyW(MSIHANDLE hProduct,LPCWSTR szProperty,LPWSTR lpValueBuf,DWORD *pcchValueBuf);
+#ifdef UNICODE
+#define MsiGetProductProperty MsiGetProductPropertyW
+#else
+#define MsiGetProductProperty MsiGetProductPropertyA
+#endif
+
+  UINT WINAPI MsiVerifyPackageA(LPCSTR szPackagePath);
+  UINT WINAPI MsiVerifyPackageW(LPCWSTR szPackagePath);
+#ifdef UNICODE
+#define MsiVerifyPackage MsiVerifyPackageW
+#else
+#define MsiVerifyPackage MsiVerifyPackageA
+#endif
+
+  UINT WINAPI MsiGetFeatureInfoA(MSIHANDLE hProduct,LPCSTR szFeature,DWORD *lpAttributes,LPSTR lpTitleBuf,DWORD *pcchTitleBuf,LPSTR lpHelpBuf,DWORD *pcchHelpBuf);
+  UINT WINAPI MsiGetFeatureInfoW(MSIHANDLE hProduct,LPCWSTR szFeature,DWORD *lpAttributes,LPWSTR lpTitleBuf,DWORD *pcchTitleBuf,LPWSTR lpHelpBuf,DWORD *pcchHelpBuf);
+#ifdef UNICODE
+#define MsiGetFeatureInfo MsiGetFeatureInfoW
+#else
+#define MsiGetFeatureInfo MsiGetFeatureInfoA
+#endif
+
+  UINT WINAPI MsiInstallMissingComponentA(LPCSTR szProduct,LPCSTR szComponent,INSTALLSTATE eInstallState);
+  UINT WINAPI MsiInstallMissingComponentW(LPCWSTR szProduct,LPCWSTR szComponent,INSTALLSTATE eInstallState);
+#ifdef UNICODE
+#define MsiInstallMissingComponent MsiInstallMissingComponentW
+#else
+#define MsiInstallMissingComponent MsiInstallMissingComponentA
+#endif
+
+  UINT WINAPI MsiInstallMissingFileA(LPCSTR szProduct,LPCSTR szFile);
+  UINT WINAPI MsiInstallMissingFileW(LPCWSTR szProduct,LPCWSTR szFile);
+#ifdef UNICODE
+#define MsiInstallMissingFile MsiInstallMissingFileW
+#else
+#define MsiInstallMissingFile MsiInstallMissingFileA
+#endif
+
+  INSTALLSTATE WINAPI MsiLocateComponentA(LPCSTR szComponent,LPSTR lpPathBuf,DWORD *pcchBuf);
+  INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR szComponent,LPWSTR lpPathBuf,DWORD *pcchBuf);
+#ifdef UNICODE
+#define MsiLocateComponent MsiLocateComponentW
+#else
+#define MsiLocateComponent MsiLocateComponentA
+#endif
+
+#if (_WIN32_MSI >= 110)
+
+  UINT WINAPI MsiSourceListClearAllA(LPCSTR szProduct,LPCSTR szUserName,DWORD dwReserved);
+  UINT WINAPI MsiSourceListClearAllW(LPCWSTR szProduct,LPCWSTR szUserName,DWORD dwReserved);
+#ifdef UNICODE
+#define MsiSourceListClearAll MsiSourceListClearAllW
+#else
+#define MsiSourceListClearAll MsiSourceListClearAllA
+#endif
+
+  UINT WINAPI MsiSourceListAddSourceA(LPCSTR szProduct,LPCSTR szUserName,DWORD dwReserved,LPCSTR szSource);
+  UINT WINAPI MsiSourceListAddSourceW(LPCWSTR szProduct,LPCWSTR szUserName,DWORD dwReserved,LPCWSTR szSource);
+#ifdef UNICODE
+#define MsiSourceListAddSource MsiSourceListAddSourceW
+#else
+#define MsiSourceListAddSource MsiSourceListAddSourceA
+#endif
+
+  UINT WINAPI MsiSourceListForceResolutionA(LPCSTR szProduct,LPCSTR szUserName,DWORD dwReserved);
+  UINT WINAPI MsiSourceListForceResolutionW(LPCWSTR szProduct,LPCWSTR szUserName,DWORD dwReserved);
+#ifdef UNICODE
+#define MsiSourceListForceResolution MsiSourceListForceResolutionW
+#else
+#define MsiSourceListForceResolution MsiSourceListForceResolutionA
+#endif
+#endif
+
+#if (_WIN32_MSI >= 300)
+
+  UINT WINAPI MsiSourceListAddSourceExA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCSTR szSource,DWORD dwIndex);
+  UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCWSTR szSource,DWORD dwIndex);
+#ifdef UNICODE
+#define MsiSourceListAddSourceEx MsiSourceListAddSourceExW
+#else
+#define MsiSourceListAddSourceEx MsiSourceListAddSourceExA
+#endif
+
+  UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwDiskId,LPCSTR szVolumeLabel,LPCSTR szDiskPrompt);
+  UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwDiskId,LPCWSTR szVolumeLabel,LPCWSTR szDiskPrompt);
+#ifdef UNICODE
+#define MsiSourceListAddMediaDisk MsiSourceListAddMediaDiskW
+#else
+#define MsiSourceListAddMediaDisk MsiSourceListAddMediaDiskA
+#endif
+
+  UINT WINAPI MsiSourceListClearSourceA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCSTR szSource);
+  UINT WINAPI MsiSourceListClearSourceW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCWSTR szSource);
+#ifdef UNICODE
+#define MsiSourceListClearSource MsiSourceListClearSourceW
+#else
+#define MsiSourceListClearSource MsiSourceListClearSourceA
+#endif
+
+  UINT WINAPI MsiSourceListClearMediaDiskA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwDiskId);
+  UINT WINAPI MsiSourceListClearMediaDiskW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwDiskId);
+#ifdef UNICODE
+#define MsiSourceListClearMediaDisk MsiSourceListClearMediaDiskW
+#else
+#define MsiSourceListClearMediaDisk MsiSourceListClearMediaDiskA
+#endif
+
+  UINT WINAPI MsiSourceListClearAllExA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions);
+  UINT WINAPI MsiSourceListClearAllExW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions);
+#ifdef UNICODE
+#define MsiSourceListClearAllEx MsiSourceListClearAllExW
+#else
+#define MsiSourceListClearAllEx MsiSourceListClearAllExA
+#endif
+
+  UINT WINAPI MsiSourceListForceResolutionExA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions);
+  UINT WINAPI MsiSourceListForceResolutionExW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions);
+#ifdef UNICODE
+#define MsiSourceListForceResolutionEx MsiSourceListForceResolutionExW
+#else
+#define MsiSourceListForceResolutionEx MsiSourceListForceResolutionExA
+#endif
+
+  UINT WINAPI MsiSourceListSetInfoA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCSTR szProperty,LPCSTR szValue);
+  UINT WINAPI MsiSourceListSetInfoW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCWSTR szProperty,LPCWSTR szValue);
+#ifdef UNICODE
+#define MsiSourceListSetInfo MsiSourceListSetInfoW
+#else
+#define MsiSourceListSetInfo MsiSourceListSetInfoA
+#endif
+
+  UINT WINAPI MsiSourceListGetInfoA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCSTR szProperty,LPSTR szValue,LPDWORD pcchValue);
+  UINT WINAPI MsiSourceListGetInfoW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,LPCWSTR szProperty,LPWSTR szValue,LPDWORD pcchValue);
+#ifdef UNICODE
+#define MsiSourceListGetInfo MsiSourceListGetInfoW
+#else
+#define MsiSourceListGetInfo MsiSourceListGetInfoA
+#endif
+
+  UINT WINAPI MsiSourceListEnumSourcesA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwIndex,LPSTR szSource,LPDWORD pcchSource);
+  UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwIndex,LPWSTR szSource,LPDWORD pcchSource);
+#ifdef UNICODE
+#define MsiSourceListEnumSources MsiSourceListEnumSourcesW
+#else
+#define MsiSourceListEnumSources MsiSourceListEnumSourcesA
+#endif
+
+  UINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR szProductCodeOrPatchCode,LPCSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwIndex,LPDWORD pdwDiskId,LPSTR szVolumeLabel,LPDWORD pcchVolumeLabel,LPSTR szDiskPrompt,LPDWORD pcchDiskPrompt);
+  UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR szProductCodeOrPatchCode,LPCWSTR szUserSid,MSIINSTALLCONTEXT dwContext,DWORD dwOptions,DWORD dwIndex,LPDWORD pdwDiskId,LPWSTR szVolumeLabel,LPDWORD pcchVolumeLabel,LPWSTR szDiskPrompt,LPDWORD pcchDiskPrompt);
+#ifdef UNICODE
+#define MsiSourceListEnumMediaDisks MsiSourceListEnumMediaDisksW
+#else
+#define MsiSourceListEnumMediaDisks MsiSourceListEnumMediaDisksA
+#endif
+#endif
+
+  UINT WINAPI MsiGetFileVersionA(LPCSTR szFilePath,LPSTR lpVersionBuf,DWORD *pcchVersionBuf,LPSTR lpLangBuf,DWORD *pcchLangBuf);
+  UINT WINAPI MsiGetFileVersionW(LPCWSTR szFilePath,LPWSTR lpVersionBuf,DWORD *pcchVersionBuf,LPWSTR lpLangBuf,DWORD *pcchLangBuf);
+#ifdef UNICODE
+#define MsiGetFileVersion MsiGetFileVersionW
+#else
+#define MsiGetFileVersion MsiGetFileVersionA
+#endif
+
+#if (_WIN32_MSI >= 150)
+
+  UINT WINAPI MsiGetFileHashA(LPCSTR szFilePath,DWORD dwOptions,PMSIFILEHASHINFO pHash);
+  UINT WINAPI MsiGetFileHashW(LPCWSTR szFilePath,DWORD dwOptions,PMSIFILEHASHINFO pHash);
+#ifdef UNICODE
+#define MsiGetFileHash MsiGetFileHashW
+#else
+#define MsiGetFileHash MsiGetFileHashA
+#endif
+#endif
+
+#if (_WIN32_MSI >= 150)
+#ifndef _MSI_NO_CRYPTO
+
+  HRESULT WINAPI MsiGetFileSignatureInformationA(LPCSTR szSignedObjectPath,DWORD dwFlags,PCCERT_CONTEXT *ppcCertContext,BYTE *pbHashData,DWORD *pcbHashData);
+  HRESULT WINAPI MsiGetFileSignatureInformationW(LPCWSTR szSignedObjectPath,DWORD dwFlags,PCCERT_CONTEXT *ppcCertContext,BYTE *pbHashData,DWORD *pcbHashData);
+#ifdef UNICODE
+#define MsiGetFileSignatureInformation MsiGetFileSignatureInformationW
+#else
+#define MsiGetFileSignatureInformation MsiGetFileSignatureInformationA
+#endif
+
+#define MSI_INVALID_HASH_IS_FATAL 0x1
+#endif
+#endif
+
+#if (_WIN32_MSI >= 110)
+
+  UINT WINAPI MsiGetShortcutTargetA(LPCSTR szShortcutPath,LPSTR szProductCode,LPSTR szFeatureId,LPSTR szComponentCode);
+  UINT WINAPI MsiGetShortcutTargetW(LPCWSTR szShortcutPath,LPWSTR szProductCode,LPWSTR szFeatureId,LPWSTR szComponentCode);
+#ifdef UNICODE
+#define MsiGetShortcutTarget MsiGetShortcutTargetW
+#else
+#define MsiGetShortcutTarget MsiGetShortcutTargetA
+#endif
+#endif
+
+#if (_WIN32_MSI >= 110)
+  UINT WINAPI MsiIsProductElevatedA(LPCSTR szProduct,WINBOOL *pfElevated);
+  UINT WINAPI MsiIsProductElevatedW(LPCWSTR szProduct,WINBOOL *pfElevated);
+#ifdef UNICODE
+#define MsiIsProductElevated MsiIsProductElevatedW
+#else
+#define MsiIsProductElevated MsiIsProductElevatedA
+#endif
+#endif
+
+#if (_WIN32_MSI >= 310)
+
+  UINT WINAPI MsiNotifySidChangeA(LPCSTR pOldSid,LPCSTR pNewSid);
+  UINT WINAPI MsiNotifySidChangeW(LPCWSTR pOldSid,LPCWSTR pNewSid);
+#ifdef UNICODE
+#define MsiNotifySidChange MsiNotifySidChangeW
+#else
+#define MsiNotifySidChange MsiNotifySidChangeA
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef ERROR_INSTALL_FAILURE
+#define ERROR_INSTALL_USEREXIT 1602L
+#define ERROR_INSTALL_FAILURE 1603L
+#define ERROR_INSTALL_SUSPEND 1604L
+
+#define ERROR_UNKNOWN_PRODUCT 1605L
+
+#define ERROR_UNKNOWN_FEATURE 1606L
+#define ERROR_UNKNOWN_COMPONENT 1607L
+#define ERROR_UNKNOWN_PROPERTY 1608L
+#define ERROR_INVALID_HANDLE_STATE 1609L
+
+#define ERROR_BAD_CONFIGURATION 1610L
+
+#define ERROR_INDEX_ABSENT 1611L
+
+#define ERROR_INSTALL_SOURCE_ABSENT 1612L
+
+#define ERROR_PRODUCT_UNINSTALLED 1614L
+#define ERROR_BAD_QUERY_SYNTAX 1615L
+#define ERROR_INVALID_FIELD 1616L
+#endif
+
+#ifndef ERROR_INSTALL_SERVICE_FAILURE
+#define ERROR_INSTALL_SERVICE_FAILURE 1601L
+#define ERROR_INSTALL_PACKAGE_VERSION 1613L
+#define ERROR_INSTALL_ALREADY_RUNNING 1618L
+#define ERROR_INSTALL_PACKAGE_OPEN_FAILED 1619L
+#define ERROR_INSTALL_PACKAGE_INVALID 1620L
+#define ERROR_INSTALL_UI_FAILURE 1621L
+#define ERROR_INSTALL_LOG_FAILURE 1622L
+#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623L
+#define ERROR_INSTALL_PACKAGE_REJECTED 1625L
+
+#define ERROR_FUNCTION_NOT_CALLED 1626L
+#define ERROR_FUNCTION_FAILED 1627L
+#define ERROR_INVALID_TABLE 1628L
+#define ERROR_DATATYPE_MISMATCH 1629L
+#define ERROR_UNSUPPORTED_TYPE 1630L
+
+#define ERROR_CREATE_FAILED 1631L
+#endif
+
+#ifndef ERROR_INSTALL_TEMP_UNWRITABLE
+#define ERROR_INSTALL_TEMP_UNWRITABLE 1632L
+#endif
+
+#ifndef ERROR_INSTALL_PLATFORM_UNSUPPORTED
+#define ERROR_INSTALL_PLATFORM_UNSUPPORTED 1633L
+#endif
+
+#ifndef ERROR_INSTALL_NOTUSED
+#define ERROR_INSTALL_NOTUSED 1634L
+#endif
+
+#ifndef ERROR_INSTALL_TRANSFORM_FAILURE
+#define ERROR_INSTALL_TRANSFORM_FAILURE 1624L
+#endif
+
+#ifndef ERROR_PATCH_PACKAGE_OPEN_FAILED
+#define ERROR_PATCH_PACKAGE_OPEN_FAILED 1635L
+#define ERROR_PATCH_PACKAGE_INVALID 1636L
+#define ERROR_PATCH_PACKAGE_UNSUPPORTED 1637L
+#endif
+
+#ifndef ERROR_PRODUCT_VERSION
+#define ERROR_PRODUCT_VERSION 1638L
+#endif
+
+#ifndef ERROR_INVALID_COMMAND_LINE
+#define ERROR_INVALID_COMMAND_LINE 1639L
+#endif
+
+#ifndef ERROR_INSTALL_REMOTE_DISALLOWED
+#define ERROR_INSTALL_REMOTE_DISALLOWED 1640L
+#endif
+
+#ifndef ERROR_SUCCESS_REBOOT_INITIATED
+#define ERROR_SUCCESS_REBOOT_INITIATED 1641L
+#endif
+
+#ifndef ERROR_PATCH_TARGET_NOT_FOUND
+#define ERROR_PATCH_TARGET_NOT_FOUND 1642L
+#endif
+
+#ifndef ERROR_PATCH_PACKAGE_REJECTED
+#define ERROR_PATCH_PACKAGE_REJECTED 1643L
+#endif
+
+#ifndef ERROR_INSTALL_TRANSFORM_REJECTED
+#define ERROR_INSTALL_TRANSFORM_REJECTED 1644L
+#endif
+
+#ifndef ERROR_INSTALL_REMOTE_PROHIBITED
+#define ERROR_INSTALL_REMOTE_PROHIBITED 1645L
+#endif
+
+#ifndef ERROR_PATCH_REMOVAL_UNSUPPORTED
+#define ERROR_PATCH_REMOVAL_UNSUPPORTED 1646L
+#endif
+
+#ifndef ERROR_UNKNOWN_PATCH
+#define ERROR_UNKNOWN_PATCH 1647L
+#endif
+
+#ifndef ERROR_PATCH_NO_SEQUENCE
+#define ERROR_PATCH_NO_SEQUENCE 1648L
+#endif
+
+#ifndef ERROR_PATCH_REMOVAL_DISALLOWED
+#define ERROR_PATCH_REMOVAL_DISALLOWED 1649L
+#endif
+
+#ifndef ERROR_INVALID_PATCH_XML
+#define ERROR_INVALID_PATCH_XML 1650L
+#endif
+
+#ifndef ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT
+#define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT 1651L
+#endif
+#endif