|  | /** | 
|  | * 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 _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 |