blob: 17b92518d567a7b1bc46fd664fe27c8ee1304419 [file] [log] [blame]
/**
* 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.PD within this package.
*/
#ifndef _MSIQUERY_H_
#define _MSIQUERY_H_
#include "msi.h"
#define MSI_NULL_INTEGER 0x80000000
#define MSIDBOPEN_READONLY (LPCTSTR)0
#define MSIDBOPEN_TRANSACT (LPCTSTR)1
#define MSIDBOPEN_DIRECT (LPCTSTR)2
#define MSIDBOPEN_CREATE (LPCTSTR)3
#define MSIDBOPEN_CREATEDIRECT (LPCTSTR)4
#define MSIDBOPEN_PATCHFILE 32/sizeof(*MSIDBOPEN_READONLY)
typedef enum tagMSIDBSTATE {
MSIDBSTATE_ERROR =-1,MSIDBSTATE_READ = 0,MSIDBSTATE_WRITE = 1
} MSIDBSTATE;
typedef enum tagMSIMODIFY {
MSIMODIFY_SEEK =-1,MSIMODIFY_REFRESH = 0,MSIMODIFY_INSERT = 1,MSIMODIFY_UPDATE = 2,MSIMODIFY_ASSIGN = 3,MSIMODIFY_REPLACE = 4,
MSIMODIFY_MERGE = 5,MSIMODIFY_DELETE = 6,MSIMODIFY_INSERT_TEMPORARY = 7,MSIMODIFY_VALIDATE = 8,MSIMODIFY_VALIDATE_NEW = 9,
MSIMODIFY_VALIDATE_FIELD = 10,MSIMODIFY_VALIDATE_DELETE = 11
} MSIMODIFY;
typedef enum tagMSICOLINFO {
MSICOLINFO_NAMES = 0,MSICOLINFO_TYPES = 1
} MSICOLINFO;
typedef enum tagMSICONDITION {
MSICONDITION_FALSE = 0,MSICONDITION_TRUE = 1,MSICONDITION_NONE = 2,MSICONDITION_ERROR = 3
} MSICONDITION;
typedef enum tagMSICOSTTREE {
MSICOSTTREE_SELFONLY = 0,MSICOSTTREE_CHILDREN = 1,MSICOSTTREE_PARENTS = 2,MSICOSTTREE_RESERVED = 3
} MSICOSTTREE;
typedef enum tagMSIDBERROR {
MSIDBERROR_INVALIDARG = -3,MSIDBERROR_MOREDATA = -2,MSIDBERROR_FUNCTIONERROR = -1,MSIDBERROR_NOERROR = 0,MSIDBERROR_DUPLICATEKEY = 1,
MSIDBERROR_REQUIRED = 2,MSIDBERROR_BADLINK = 3,MSIDBERROR_OVERFLOW = 4,MSIDBERROR_UNDERFLOW = 5,MSIDBERROR_NOTINSET = 6,
MSIDBERROR_BADVERSION = 7,MSIDBERROR_BADCASE = 8,MSIDBERROR_BADGUID = 9,MSIDBERROR_BADWILDCARD = 10,MSIDBERROR_BADIDENTIFIER = 11,
MSIDBERROR_BADLANGUAGE = 12,MSIDBERROR_BADFILENAME = 13,MSIDBERROR_BADPATH = 14,MSIDBERROR_BADCONDITION = 15,MSIDBERROR_BADFORMATTED = 16,
MSIDBERROR_BADTEMPLATE = 17,MSIDBERROR_BADDEFAULTDIR = 18,MSIDBERROR_BADREGPATH = 19,MSIDBERROR_BADCUSTOMSOURCE = 20,MSIDBERROR_BADPROPERTY = 21,
MSIDBERROR_MISSINGDATA = 22,MSIDBERROR_BADCATEGORY = 23,MSIDBERROR_BADKEYTABLE = 24,MSIDBERROR_BADMAXMINVALUES = 25,MSIDBERROR_BADCABINET = 26,
MSIDBERROR_BADSHORTCUT = 27,MSIDBERROR_STRINGOVERFLOW = 28,MSIDBERROR_BADLOCALIZEATTRIB = 29
} MSIDBERROR;
typedef enum tagMSIRUNMODE {
MSIRUNMODE_ADMIN = 0,MSIRUNMODE_ADVERTISE = 1,MSIRUNMODE_MAINTENANCE = 2,MSIRUNMODE_ROLLBACKENABLED = 3,MSIRUNMODE_LOGENABLED = 4,
MSIRUNMODE_OPERATIONS = 5,MSIRUNMODE_REBOOTATEND = 6,MSIRUNMODE_REBOOTNOW = 7,MSIRUNMODE_CABINET = 8,MSIRUNMODE_SOURCESHORTNAMES= 9,
MSIRUNMODE_TARGETSHORTNAMES= 10,MSIRUNMODE_RESERVED11 = 11,MSIRUNMODE_WINDOWS9X = 12,MSIRUNMODE_ZAWENABLED = 13,MSIRUNMODE_RESERVED14 = 14,
MSIRUNMODE_RESERVED15 = 15,MSIRUNMODE_SCHEDULED = 16,MSIRUNMODE_ROLLBACK = 17,MSIRUNMODE_COMMIT = 18
} MSIRUNMODE;
#define INSTALLMESSAGE_TYPEMASK 0xFF000000L
typedef enum tagMSITRANSFORM_ERROR {
MSITRANSFORM_ERROR_ADDEXISTINGROW = 0x00000001,MSITRANSFORM_ERROR_DELMISSINGROW = 0x00000002,MSITRANSFORM_ERROR_ADDEXISTINGTABLE = 0x00000004,
MSITRANSFORM_ERROR_DELMISSINGTABLE = 0x00000008,MSITRANSFORM_ERROR_UPDATEMISSINGROW = 0x00000010,MSITRANSFORM_ERROR_CHANGECODEPAGE = 0x00000020,
MSITRANSFORM_ERROR_VIEWTRANSFORM = 0x00000100
} MSITRANSFORM_ERROR;
typedef enum tagMSITRANSFORM_VALIDATE {
MSITRANSFORM_VALIDATE_LANGUAGE = 0x00000001,MSITRANSFORM_VALIDATE_PRODUCT = 0x00000002,MSITRANSFORM_VALIDATE_PLATFORM = 0x00000004,
MSITRANSFORM_VALIDATE_MAJORVERSION = 0x00000008,MSITRANSFORM_VALIDATE_MINORVERSION = 0x00000010,MSITRANSFORM_VALIDATE_UPDATEVERSION = 0x00000020,
MSITRANSFORM_VALIDATE_NEWLESSBASEVERSION = 0x00000040,MSITRANSFORM_VALIDATE_NEWLESSEQUALBASEVERSION = 0x00000080,
MSITRANSFORM_VALIDATE_NEWEQUALBASEVERSION = 0x00000100,MSITRANSFORM_VALIDATE_NEWGREATEREQUALBASEVERSION = 0x00000200,
MSITRANSFORM_VALIDATE_NEWGREATERBASEVERSION = 0x00000400,MSITRANSFORM_VALIDATE_UPGRADECODE = 0x00000800
} MSITRANSFORM_VALIDATE;
#ifdef __cplusplus
extern "C" {
#endif
UINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE hDatabase,LPCSTR szQuery,MSIHANDLE *phView);
UINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE hDatabase,LPCWSTR szQuery,MSIHANDLE *phView);
#ifdef UNICODE
#define MsiDatabaseOpenView MsiDatabaseOpenViewW
#else
#define MsiDatabaseOpenView MsiDatabaseOpenViewA
#endif
MSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE hView,LPSTR szColumnNameBuffer,DWORD *pcchBuf);
MSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE hView,LPWSTR szColumnNameBuffer,DWORD *pcchBuf);
#ifdef UNICODE
#define MsiViewGetError MsiViewGetErrorW
#else
#define MsiViewGetError MsiViewGetErrorA
#endif
UINT WINAPI MsiViewExecute(MSIHANDLE hView,MSIHANDLE hRecord);
UINT WINAPI MsiViewFetch(MSIHANDLE hView,MSIHANDLE *phRecord);
UINT WINAPI MsiViewModify(MSIHANDLE hView,MSIMODIFY eModifyMode,MSIHANDLE hRecord);
UINT WINAPI MsiViewGetColumnInfo(MSIHANDLE hView,MSICOLINFO eColumnInfo,MSIHANDLE *phRecord);
UINT WINAPI MsiViewClose(MSIHANDLE hView);
UINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE hDatabase,LPCSTR szTableName,MSIHANDLE *phRecord);
UINT WINAPI MsiDatabaseGetPrimaryKeysW(MSIHANDLE hDatabase,LPCWSTR szTableName,MSIHANDLE *phRecord);
#ifdef UNICODE
#define MsiDatabaseGetPrimaryKeys MsiDatabaseGetPrimaryKeysW
#else
#define MsiDatabaseGetPrimaryKeys MsiDatabaseGetPrimaryKeysA
#endif
MSICONDITION WINAPI MsiDatabaseIsTablePersistentA(MSIHANDLE hDatabase,LPCSTR szTableName);
MSICONDITION WINAPI MsiDatabaseIsTablePersistentW(MSIHANDLE hDatabase,LPCWSTR szTableName);
#ifdef UNICODE
#define MsiDatabaseIsTablePersistent MsiDatabaseIsTablePersistentW
#else
#define MsiDatabaseIsTablePersistent MsiDatabaseIsTablePersistentA
#endif
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase,LPCSTR szDatabasePath,UINT uiUpdateCount,MSIHANDLE *phSummaryInfo);
UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE hDatabase,LPCWSTR szDatabasePath,UINT uiUpdateCount,MSIHANDLE *phSummaryInfo);
#ifdef UNICODE
#define MsiGetSummaryInformation MsiGetSummaryInformationW
#else
#define MsiGetSummaryInformation MsiGetSummaryInformationA
#endif
UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo,UINT *puiPropertyCount);
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE hSummaryInfo,UINT uiProperty,UINT uiDataType,INT iValue,FILETIME *pftValue,LPCSTR szValue);
UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE hSummaryInfo,UINT uiProperty,UINT uiDataType,INT iValue,FILETIME *pftValue,LPCWSTR szValue);
#ifdef UNICODE
#define MsiSummaryInfoSetProperty MsiSummaryInfoSetPropertyW
#else
#define MsiSummaryInfoSetProperty MsiSummaryInfoSetPropertyA
#endif
UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE hSummaryInfo,UINT uiProperty,UINT *puiDataType,INT *piValue,FILETIME *pftValue,LPSTR szValueBuf,DWORD *pcchValueBuf);
UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE hSummaryInfo,UINT uiProperty,UINT *puiDataType,INT *piValue,FILETIME *pftValue,LPWSTR szValueBuf,DWORD *pcchValueBuf);
#ifdef UNICODE
#define MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyW
#else
#define MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyA
#endif
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE hSummaryInfo);
UINT WINAPI MsiOpenDatabaseA(LPCSTR szDatabasePath,LPCSTR szPersist,MSIHANDLE *phDatabase);
UINT WINAPI MsiOpenDatabaseW(LPCWSTR szDatabasePath,LPCWSTR szPersist,MSIHANDLE *phDatabase);
#ifdef UNICODE
#define MsiOpenDatabase MsiOpenDatabaseW
#else
#define MsiOpenDatabase MsiOpenDatabaseA
#endif
UINT WINAPI MsiDatabaseImportA(MSIHANDLE hDatabase,LPCSTR szFolderPath,LPCSTR szFileName);
UINT WINAPI MsiDatabaseImportW(MSIHANDLE hDatabase,LPCWSTR szFolderPath,LPCWSTR szFileName);
#ifdef UNICODE
#define MsiDatabaseImport MsiDatabaseImportW
#else
#define MsiDatabaseImport MsiDatabaseImportA
#endif
UINT WINAPI MsiDatabaseExportA(MSIHANDLE hDatabase,LPCSTR szTableName,LPCSTR szFolderPath,LPCSTR szFileName);
UINT WINAPI MsiDatabaseExportW(MSIHANDLE hDatabase,LPCWSTR szTableName,LPCWSTR szFolderPath,LPCWSTR szFileName);
#ifdef UNICODE
#define MsiDatabaseExport MsiDatabaseExportW
#else
#define MsiDatabaseExport MsiDatabaseExportA
#endif
UINT WINAPI MsiDatabaseMergeA(MSIHANDLE hDatabase,MSIHANDLE hDatabaseMerge,LPCSTR szTableName);
UINT WINAPI MsiDatabaseMergeW(MSIHANDLE hDatabase,MSIHANDLE hDatabaseMerge,LPCWSTR szTableName);
#ifdef UNICODE
#define MsiDatabaseMerge MsiDatabaseMergeW
#else
#define MsiDatabaseMerge MsiDatabaseMergeA
#endif
UINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE hDatabase,MSIHANDLE hDatabaseReference,LPCSTR szTransformFile,int iReserved1,int iReserved2);
UINT WINAPI MsiDatabaseGenerateTransformW(MSIHANDLE hDatabase,MSIHANDLE hDatabaseReference,LPCWSTR szTransformFile,int iReserved1,int iReserved2);
#ifdef UNICODE
#define MsiDatabaseGenerateTransform MsiDatabaseGenerateTransformW
#else
#define MsiDatabaseGenerateTransform MsiDatabaseGenerateTransformA
#endif
UINT WINAPI MsiDatabaseApplyTransformA(MSIHANDLE hDatabase,LPCSTR szTransformFile,int iErrorConditions);
UINT WINAPI MsiDatabaseApplyTransformW(MSIHANDLE hDatabase,LPCWSTR szTransformFile,int iErrorConditions);
#ifdef UNICODE
#define MsiDatabaseApplyTransform MsiDatabaseApplyTransformW
#else
#define MsiDatabaseApplyTransform MsiDatabaseApplyTransformA
#endif
UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE hDatabase,MSIHANDLE hDatabaseReference,LPCSTR szTransformFile,int iErrorConditions,int iValidation);
UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE hDatabase,MSIHANDLE hDatabaseReference,LPCWSTR szTransformFile,int iErrorConditions,int iValidation);
#ifdef UNICODE
#define MsiCreateTransformSummaryInfo MsiCreateTransformSummaryInfoW
#else
#define MsiCreateTransformSummaryInfo MsiCreateTransformSummaryInfoA
#endif
UINT WINAPI MsiDatabaseCommit(MSIHANDLE hDatabase);
MSIDBSTATE WINAPI MsiGetDatabaseState(MSIHANDLE hDatabase);
MSIHANDLE WINAPI MsiCreateRecord(UINT cParams);
WINBOOL WINAPI MsiRecordIsNull(MSIHANDLE hRecord,UINT iField);
UINT WINAPI MsiRecordDataSize(MSIHANDLE hRecord,UINT iField);
UINT WINAPI MsiRecordSetInteger(MSIHANDLE hRecord,UINT iField,int iValue);
UINT WINAPI MsiRecordSetStringA(MSIHANDLE hRecord,UINT iField,LPCSTR szValue);
UINT WINAPI MsiRecordSetStringW(MSIHANDLE hRecord,UINT iField,LPCWSTR szValue);
#ifdef UNICODE
#define MsiRecordSetString MsiRecordSetStringW
#else
#define MsiRecordSetString MsiRecordSetStringA
#endif
int WINAPI MsiRecordGetInteger(MSIHANDLE hRecord,UINT iField);
UINT WINAPI MsiRecordGetStringA(MSIHANDLE hRecord,UINT iField,LPSTR szValueBuf,DWORD *pcchValueBuf);
UINT WINAPI MsiRecordGetStringW(MSIHANDLE hRecord,UINT iField,LPWSTR szValueBuf,DWORD *pcchValueBuf);
#ifdef UNICODE
#define MsiRecordGetString MsiRecordGetStringW
#else
#define MsiRecordGetString MsiRecordGetStringA
#endif
UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE hRecord);
UINT WINAPI MsiRecordSetStreamA(MSIHANDLE hRecord,UINT iField,LPCSTR szFilePath);
UINT WINAPI MsiRecordSetStreamW(MSIHANDLE hRecord,UINT iField,LPCWSTR szFilePath);
#ifdef UNICODE
#define MsiRecordSetStream MsiRecordSetStreamW
#else
#define MsiRecordSetStream MsiRecordSetStreamA
#endif
UINT WINAPI MsiRecordReadStream(MSIHANDLE hRecord,UINT iField,char *szDataBuf,DWORD *pcbDataBuf);
UINT WINAPI MsiRecordClearData(MSIHANDLE hRecord);
MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE hInstall);
UINT WINAPI MsiSetPropertyA(MSIHANDLE hInstall,LPCSTR szName,LPCSTR szValue);
UINT WINAPI MsiSetPropertyW(MSIHANDLE hInstall,LPCWSTR szName,LPCWSTR szValue);
#ifdef UNICODE
#define MsiSetProperty MsiSetPropertyW
#else
#define MsiSetProperty MsiSetPropertyA
#endif
UINT WINAPI MsiGetPropertyA(MSIHANDLE hInstall,LPCSTR szName,LPSTR szValueBuf,DWORD *pcchValueBuf);
UINT WINAPI MsiGetPropertyW(MSIHANDLE hInstall,LPCWSTR szName,LPWSTR szValueBuf,DWORD *pcchValueBuf);
#ifdef UNICODE
#define MsiGetProperty MsiGetPropertyW
#else
#define MsiGetProperty MsiGetPropertyA
#endif
LANGID WINAPI MsiGetLanguage(MSIHANDLE hInstall);
WINBOOL WINAPI MsiGetMode(MSIHANDLE hInstall,MSIRUNMODE eRunMode);
UINT WINAPI MsiSetMode(MSIHANDLE hInstall,MSIRUNMODE eRunMode,WINBOOL fState);
UINT WINAPI MsiFormatRecordA(MSIHANDLE hInstall,MSIHANDLE hRecord,LPSTR szResultBuf,DWORD *pcchResultBuf);
UINT WINAPI MsiFormatRecordW(MSIHANDLE hInstall,MSIHANDLE hRecord,LPWSTR szResultBuf,DWORD *pcchResultBuf);
#ifdef UNICODE
#define MsiFormatRecord MsiFormatRecordW
#else
#define MsiFormatRecord MsiFormatRecordA
#endif
UINT WINAPI MsiDoActionA(MSIHANDLE hInstall,LPCSTR szAction);
UINT WINAPI MsiDoActionW(MSIHANDLE hInstall,LPCWSTR szAction);
#ifdef UNICODE
#define MsiDoAction MsiDoActionW
#else
#define MsiDoAction MsiDoActionA
#endif
UINT WINAPI MsiSequenceA(MSIHANDLE hInstall,LPCSTR szTable,INT iSequenceMode);
UINT WINAPI MsiSequenceW(MSIHANDLE hInstall,LPCWSTR szTable,INT iSequenceMode);
#ifdef UNICODE
#define MsiSequence MsiSequenceW
#else
#define MsiSequence MsiSequenceA
#endif
int WINAPI MsiProcessMessage(MSIHANDLE hInstall,INSTALLMESSAGE eMessageType,MSIHANDLE hRecord);
MSICONDITION WINAPI MsiEvaluateConditionA(MSIHANDLE hInstall,LPCSTR szCondition);
MSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE hInstall,LPCWSTR szCondition);
#ifdef UNICODE
#define MsiEvaluateCondition MsiEvaluateConditionW
#else
#define MsiEvaluateCondition MsiEvaluateConditionA
#endif
UINT WINAPI MsiGetFeatureStateA(MSIHANDLE hInstall,LPCSTR szFeature,INSTALLSTATE *piInstalled,INSTALLSTATE *piAction);
UINT WINAPI MsiGetFeatureStateW(MSIHANDLE hInstall,LPCWSTR szFeature,INSTALLSTATE *piInstalled,INSTALLSTATE *piAction);
#ifdef UNICODE
#define MsiGetFeatureState MsiGetFeatureStateW
#else
#define MsiGetFeatureState MsiGetFeatureStateA
#endif
UINT WINAPI MsiSetFeatureStateA(MSIHANDLE hInstall,LPCSTR szFeature,INSTALLSTATE iState);
UINT WINAPI MsiSetFeatureStateW(MSIHANDLE hInstall,LPCWSTR szFeature,INSTALLSTATE iState);
#ifdef UNICODE
#define MsiSetFeatureState MsiSetFeatureStateW
#else
#define MsiSetFeatureState MsiSetFeatureStateA
#endif
#if (_WIN32_MSI >= 110)
UINT WINAPI MsiSetFeatureAttributesA(MSIHANDLE hInstall,LPCSTR szFeature,DWORD dwAttributes);
UINT WINAPI MsiSetFeatureAttributesW(MSIHANDLE hInstall,LPCWSTR szFeature,DWORD dwAttributes);
#ifdef UNICODE
#define MsiSetFeatureAttributes MsiSetFeatureAttributesW
#else
#define MsiSetFeatureAttributes MsiSetFeatureAttributesA
#endif
#endif
UINT WINAPI MsiGetComponentStateA(MSIHANDLE hInstall,LPCSTR szComponent,INSTALLSTATE *piInstalled,INSTALLSTATE *piAction);
UINT WINAPI MsiGetComponentStateW(MSIHANDLE hInstall,LPCWSTR szComponent,INSTALLSTATE *piInstalled,INSTALLSTATE *piAction);
#ifdef UNICODE
#define MsiGetComponentState MsiGetComponentStateW
#else
#define MsiGetComponentState MsiGetComponentStateA
#endif
UINT WINAPI MsiSetComponentStateA(MSIHANDLE hInstall,LPCSTR szComponent,INSTALLSTATE iState);
UINT WINAPI MsiSetComponentStateW(MSIHANDLE hInstall,LPCWSTR szComponent,INSTALLSTATE iState);
#ifdef UNICODE
#define MsiSetComponentState MsiSetComponentStateW
#else
#define MsiSetComponentState MsiSetComponentStateA
#endif
UINT WINAPI MsiGetFeatureCostA(MSIHANDLE hInstall,LPCSTR szFeature,MSICOSTTREE iCostTree,INSTALLSTATE iState,INT *piCost);
UINT WINAPI MsiGetFeatureCostW(MSIHANDLE hInstall,LPCWSTR szFeature,MSICOSTTREE iCostTree,INSTALLSTATE iState,INT *piCost);
#ifdef UNICODE
#define MsiGetFeatureCost MsiGetFeatureCostW
#else
#define MsiGetFeatureCost MsiGetFeatureCostA
#endif
#if (_WIN32_MSI >= 150)
#ifdef UNICODE
#define MsiEnumComponentCosts MsiEnumComponentCostsW
#else
#define MsiEnumComponentCosts MsiEnumComponentCostsA
#endif
UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE hInstall,LPCSTR szComponent,DWORD dwIndex,INSTALLSTATE iState,LPSTR szDriveBuf,DWORD *pcchDriveBuf,INT *piCost,INT *piTempCost);
UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE hInstall,LPCWSTR szComponent,DWORD dwIndex,INSTALLSTATE iState,LPWSTR szDriveBuf,DWORD *pcchDriveBuf,INT *piCost,INT *piTempCost);
#endif
#ifdef UNICODE
#define MsiGetFeatureValidStates MsiGetFeatureValidStatesW
#define MsiGetSourcePath MsiGetSourcePathW
#define MsiGetTargetPath MsiGetTargetPathW
#define MsiSetTargetPath MsiSetTargetPathW
#define MsiPreviewDialog MsiPreviewDialogW
#define MsiPreviewBillboard MsiPreviewBillboardW
#else
#define MsiGetFeatureValidStates MsiGetFeatureValidStatesA
#define MsiGetSourcePath MsiGetSourcePathA
#define MsiGetTargetPath MsiGetTargetPathA
#define MsiSetTargetPath MsiSetTargetPathA
#define MsiPreviewDialog MsiPreviewDialogA
#define MsiPreviewBillboard MsiPreviewBillboardA
#endif
UINT WINAPI MsiSetInstallLevel(MSIHANDLE hInstall,int iInstallLevel);
UINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE hInstall,LPCSTR szFeature,DWORD *dwInstallStates);
UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE hInstall,LPCWSTR szFeature,DWORD *dwInstallStates);
UINT WINAPI MsiGetSourcePathA(MSIHANDLE hInstall,LPCSTR szFolder,LPSTR szPathBuf,DWORD *pcchPathBuf);
UINT WINAPI MsiGetSourcePathW(MSIHANDLE hInstall,LPCWSTR szFolder,LPWSTR szPathBuf,DWORD *pcchPathBuf);
UINT WINAPI MsiGetTargetPathA(MSIHANDLE hInstall,LPCSTR szFolder,LPSTR szPathBuf,DWORD *pcchPathBuf);
UINT WINAPI MsiGetTargetPathW(MSIHANDLE hInstall,LPCWSTR szFolder,LPWSTR szPathBuf,DWORD *pcchPathBuf);
UINT WINAPI MsiSetTargetPathA(MSIHANDLE hInstall,LPCSTR szFolder,LPCSTR szFolderPath);
UINT WINAPI MsiSetTargetPathW(MSIHANDLE hInstall,LPCWSTR szFolder,LPCWSTR szFolderPath);
UINT WINAPI MsiVerifyDiskSpace(MSIHANDLE hInstall);
UINT WINAPI MsiEnableUIPreview(MSIHANDLE hDatabase,MSIHANDLE *phPreview);
UINT WINAPI MsiPreviewDialogA(MSIHANDLE hPreview,LPCSTR szDialogName);
UINT WINAPI MsiPreviewDialogW(MSIHANDLE hPreview,LPCWSTR szDialogName);
UINT WINAPI MsiPreviewBillboardA(MSIHANDLE hPreview,LPCSTR szControlName,LPCSTR szBillboard);
UINT WINAPI MsiPreviewBillboardW(MSIHANDLE hPreview,LPCWSTR szControlName,LPCWSTR szBillboard);
MSIHANDLE WINAPI MsiGetLastErrorRecord();
#ifdef __cplusplus
}
#endif
#endif