{******************************************************************************} { } { Windows Installer API interface Unit for Object Pascal } { } { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } { Corporation. All Rights Reserved. } { } { The original file is: msi.h, released June 2000. The original Pascal } { code is: Msi.pas, released June 2001. The initial developer of the } { Pascal code is Marcel van Brakel (brakelm att chello dott nl). } { } { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } { Marcel van Brakel. All Rights Reserved. } { } { Contributors: Steve Moss (spm att coco dott co dott uk) } { } { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) } { } { You may retrieve the latest version of this file at the Project JEDI } { APILIB home page, located at http://jedi-apilib.sourceforge.net } { } { The contents of this file are used with permission, subject to the Mozilla } { Public License Version 1.1 (the "License"); you may not use this file except } { in compliance with the License. You may obtain a copy of the License at } { http://www.mozilla.org/MPL/MPL-1.1.html } { } { Software distributed under the License is distributed on an "AS IS" basis, } { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } { the specific language governing rights and limitations under the License. } { } { Alternatively, the contents of this file may be used under the terms of the } { GNU Lesser General Public License (the "LGPL License"), in which case the } { provisions of the LGPL License are applicable instead of those above. } { If you wish to allow use of your version of this file only under the terms } { of the LGPL License and not to allow others to use your version of this file } { under the MPL, indicate your decision by deleting the provisions above and } { replace them with the notice and other provisions required by the LGPL } { License. If you do not delete the provisions above, a recipient may use } { your version of this file under either the MPL or the LGPL License. } { } { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html } { } {******************************************************************************} // $Id: JwaMsi.pas,v 1.17 2007/09/05 11:58:51 dezipaitor Exp $ {$IFNDEF JWA_OMIT_SECTIONS} unit JwaMsi; {$WEAKPACKAGEUNIT} {$I jediapilib.inc} interface uses JwaWinType, JwaWinCrypt { for PCCERT_CONTEXT }; {$ENDIF JWA_OMIT_SECTIONS} {$HPPEMIT ''} {$HPPEMIT '#include "msi.h"'} {$HPPEMIT ''} {$IFNDEF JWA_IMPLEMENTATIONSECTION} // (rom) MSI version IFDEFs now declared in jediapilib.inc (*****************************************************************************\ * * * msi.h - - Interface for external access to Installer Service * * * * Version 1.0 - 1.2 * * * * NOTES: All buffers sizes are TCHAR count, null included only on input * * Return argument pointers may be null if not interested in value * * * * Copyright (c) 1999-2000, Microsoft Corp. All rights reserved. * * * \*****************************************************************************) // -------------------------------------------------------------------------- // Installer generic handle definitions // -------------------------------------------------------------------------- type MSIHANDLE = DWORD; // abstract generic handle, 0 == no handle {$EXTERNALSYM MSIHANDLE} TMsiHandle = MSIHANDLE; // Close a open handle of any type // All handles obtained from API calls must be closed when no longer needed // Normally succeeds, returning TRUE. function MsiCloseHandle(hAny: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiCloseHandle} // Close all handles open in the process, a diagnostic call // This should NOT be used as a cleanup mechanism -- use PMSIHANDLE class // Can be called at termination to assure that all handles have been closed // Returns 0 if all handles have been close, else number of open handles function MsiCloseAllHandles: UINT; stdcall; {$EXTERNALSYM MsiCloseAllHandles} // Install message type for callback is a combination of the following: // A message box style: MB_*, where MB_OK is the default // A message box icon type: MB_ICON*, where no icon is the default // A default button: MB_DEFBUTTON?, where MB_DEFBUTTON1 is the default // One of the following install message types, no default const INSTALLMESSAGE_FATALEXIT = $00000000; // premature termination, possibly fatal OOM {$EXTERNALSYM INSTALLMESSAGE_FATALEXIT} INSTALLMESSAGE_ERROR = $01000000; // formatted error message {$EXTERNALSYM INSTALLMESSAGE_ERROR} INSTALLMESSAGE_WARNING = $02000000; // formatted warning message {$EXTERNALSYM INSTALLMESSAGE_WARNING} INSTALLMESSAGE_USER = $03000000; // user request message {$EXTERNALSYM INSTALLMESSAGE_USER} INSTALLMESSAGE_INFO = $04000000; // informative message for log {$EXTERNALSYM INSTALLMESSAGE_INFO} INSTALLMESSAGE_FILESINUSE = $05000000; // list of files in use that need to be replaced {$EXTERNALSYM INSTALLMESSAGE_FILESINUSE} INSTALLMESSAGE_RESOLVESOURCE = $06000000; // request to determine a valid source location {$EXTERNALSYM INSTALLMESSAGE_RESOLVESOURCE} INSTALLMESSAGE_OUTOFDISKSPACE = $07000000; // insufficient disk space message {$EXTERNALSYM INSTALLMESSAGE_OUTOFDISKSPACE} INSTALLMESSAGE_ACTIONSTART = $08000000; // start of action: action name & description {$EXTERNALSYM INSTALLMESSAGE_ACTIONSTART} INSTALLMESSAGE_ACTIONDATA = $09000000; // formatted data associated with individual action item {$EXTERNALSYM INSTALLMESSAGE_ACTIONDATA} INSTALLMESSAGE_PROGRESS = $0A000000; // progress gauge info: units so far, total {$EXTERNALSYM INSTALLMESSAGE_PROGRESS} INSTALLMESSAGE_COMMONDATA = $0B000000; // product info for dialog: language Id, dialog caption {$EXTERNALSYM INSTALLMESSAGE_COMMONDATA} INSTALLMESSAGE_INITIALIZE = $0C000000; // sent prior to UI initialization, no string data {$EXTERNALSYM INSTALLMESSAGE_INITIALIZE} INSTALLMESSAGE_TERMINATE = $0D000000; // sent after UI termination, no string data {$EXTERNALSYM INSTALLMESSAGE_TERMINATE} INSTALLMESSAGE_SHOWDIALOG = $0E000000; // sent prior to display or authored dialog or wizard {$EXTERNALSYM INSTALLMESSAGE_SHOWDIALOG} type INSTALLMESSAGE = Longint; {$EXTERNALSYM INSTALLMESSAGE} TInstallMessage = INSTALLMESSAGE; // external error handler supplied to installation API functions type INSTALLUI_HANDLERA = function(pvContext: LPVOID; iMessageType: UINT; szMessage: LPCSTR): Integer; stdcall; {$EXTERNALSYM INSTALLUI_HANDLERA} TInstallUIHandlerA = INSTALLUI_HANDLERA; INSTALLUI_HANDLERW = function(pvContext: LPVOID; iMessageType: UINT; szMessage: LPCWSTR): Integer; stdcall; {$EXTERNALSYM INSTALLUI_HANDLERW} TInstallUIHandlerW = INSTALLUI_HANDLERW; {$IFDEF UNICODE} INSTALLUI_HANDLER = INSTALLUI_HANDLERW; {$EXTERNALSYM INSTALLUI_HANDLER} TInstallUIHandler = TInstallUIHandlerW; {$ELSE} INSTALLUI_HANDLER = INSTALLUI_HANDLERA; {$EXTERNALSYM INSTALLUI_HANDLER} TInstallUIHandler = TInstallUIHandlerA; {$ENDIF UNICODE} const INSTALLUILEVEL_NOCHANGE = 0; // UI level is unchanged {$EXTERNALSYM INSTALLUILEVEL_NOCHANGE} INSTALLUILEVEL_DEFAULT = 1; // default UI is used {$EXTERNALSYM INSTALLUILEVEL_DEFAULT} INSTALLUILEVEL_NONE = 2; // completely silent installation {$EXTERNALSYM INSTALLUILEVEL_NONE} INSTALLUILEVEL_BASIC = 3; // simple progress and error handling {$EXTERNALSYM INSTALLUILEVEL_BASIC} INSTALLUILEVEL_REDUCED = 4; // authored UI, wizard dialogs suppressed {$EXTERNALSYM INSTALLUILEVEL_REDUCED} INSTALLUILEVEL_FULL = 5; // authored UI with wizards, progress, errors {$EXTERNALSYM INSTALLUILEVEL_FULL} INSTALLUILEVEL_ENDDIALOG = $80; // display success/failure dialog at end of install {$EXTERNALSYM INSTALLUILEVEL_ENDDIALOG} INSTALLUILEVEL_PROGRESSONLY = $40; // display only progress dialog {$EXTERNALSYM INSTALLUILEVEL_PROGRESSONLY} INSTALLUILEVEL_HIDECANCEL = $20; // do not display the cancel button in basic UI {$EXTERNALSYM INSTALLUILEVEL_HIDECANCEL} INSTALLUILEVEL_SOURCERESONLY = $100; // force display of source resolution even if quiet {$EXTERNALSYM INSTALLUILEVEL_SOURCERESONLY} type INSTALLUILEVEL = Longint; {$EXTERNALSYM INSTALLUILEVEL} TInstallUILevel = INSTALLUILEVEL; const INSTALLSTATE_NOTUSED = -7; // component disabled {$EXTERNALSYM INSTALLSTATE_NOTUSED} INSTALLSTATE_BADCONFIG = -6; // configuration data corrupt {$EXTERNALSYM INSTALLSTATE_BADCONFIG} INSTALLSTATE_INCOMPLETE = -5; // installation suspended or in progress {$EXTERNALSYM INSTALLSTATE_INCOMPLETE} INSTALLSTATE_SOURCEABSENT = -4; // run from source, source is unavailable {$EXTERNALSYM INSTALLSTATE_SOURCEABSENT} INSTALLSTATE_MOREDATA = -3; // return buffer overflow {$EXTERNALSYM INSTALLSTATE_MOREDATA} INSTALLSTATE_INVALIDARG = -2; // invalid function argument {$EXTERNALSYM INSTALLSTATE_INVALIDARG} INSTALLSTATE_UNKNOWN = -1; // unrecognized product or feature {$EXTERNALSYM INSTALLSTATE_UNKNOWN} INSTALLSTATE_BROKEN = 0; // broken {$EXTERNALSYM INSTALLSTATE_BROKEN} INSTALLSTATE_ADVERTISED = 1; // advertised feature {$EXTERNALSYM INSTALLSTATE_ADVERTISED} INSTALLSTATE_REMOVED = 1; // component being removed (action state, not settable) {$EXTERNALSYM INSTALLSTATE_REMOVED} INSTALLSTATE_ABSENT = 2; // uninstalled (or action state absent but clients remain) {$EXTERNALSYM INSTALLSTATE_ABSENT} INSTALLSTATE_LOCAL = 3; // installed on local drive {$EXTERNALSYM INSTALLSTATE_LOCAL} INSTALLSTATE_SOURCE = 4; // run from source, CD or net {$EXTERNALSYM INSTALLSTATE_SOURCE} INSTALLSTATE_DEFAULT = 5; // use default, local or source {$EXTERNALSYM INSTALLSTATE_DEFAULT} type INSTALLSTATE = Longint; {$EXTERNALSYM INSTALLSTATE} TInstallState = INSTALLSTATE; const USERINFOSTATE_MOREDATA = -3; // return buffer overflow {$EXTERNALSYM USERINFOSTATE_MOREDATA} USERINFOSTATE_INVALIDARG = -2; // invalid function argument {$EXTERNALSYM USERINFOSTATE_INVALIDARG} USERINFOSTATE_UNKNOWN = -1; // unrecognized product {$EXTERNALSYM USERINFOSTATE_UNKNOWN} USERINFOSTATE_ABSENT = 0; // user info and PID not initialized {$EXTERNALSYM USERINFOSTATE_ABSENT} USERINFOSTATE_PRESENT = 1; // user info and PID initialized {$EXTERNALSYM USERINFOSTATE_PRESENT} type USERINFOSTATE = DWORD; {$EXTERNALSYM USERINFOSTATE} TUserInfoState = USERINFOSTATE; const INSTALLLEVEL_DEFAULT = 0; // install authored default {$EXTERNALSYM INSTALLLEVEL_DEFAULT} INSTALLLEVEL_MINIMUM = 1; // install only required features {$EXTERNALSYM INSTALLLEVEL_MINIMUM} INSTALLLEVEL_MAXIMUM = $FFFF; // install all features {$EXTERNALSYM INSTALLLEVEL_MAXIMUM} type INSTALLLEVEL = DWORD; // intermediate levels dependent on authoring {$EXTERNALSYM INSTALLLEVEL} TInstallLevel = INSTALLLEVEL; const REINSTALLMODE_REPAIR = $00000001; // Reserved bit - currently ignored {$EXTERNALSYM REINSTALLMODE_REPAIR} REINSTALLMODE_FILEMISSING = $00000002; // Reinstall only if file is missing {$EXTERNALSYM REINSTALLMODE_FILEMISSING} REINSTALLMODE_FILEOLDERVERSION = $00000004; // Reinstall if file is missing, or older version {$EXTERNALSYM REINSTALLMODE_FILEOLDERVERSION} REINSTALLMODE_FILEEQUALVERSION = $00000008; // Reinstall if file is missing, or equal or older version {$EXTERNALSYM REINSTALLMODE_FILEEQUALVERSION} REINSTALLMODE_FILEEXACT = $00000010; // Reinstall if file is missing, or not exact version {$EXTERNALSYM REINSTALLMODE_FILEEXACT} REINSTALLMODE_FILEVERIFY = $00000020; // checksum executables, reinstall if missing or corrupt {$EXTERNALSYM REINSTALLMODE_FILEVERIFY} REINSTALLMODE_FILEREPLACE = $00000040; // Reinstall all files, regardless of version {$EXTERNALSYM REINSTALLMODE_FILEREPLACE} REINSTALLMODE_MACHINEDATA = $00000080; // insure required machine reg entries {$EXTERNALSYM REINSTALLMODE_MACHINEDATA} REINSTALLMODE_USERDATA = $00000100; // insure required user reg entries {$EXTERNALSYM REINSTALLMODE_USERDATA} REINSTALLMODE_SHORTCUT = $00000200; // validate shortcuts items {$EXTERNALSYM REINSTALLMODE_SHORTCUT} REINSTALLMODE_PACKAGE = $00000400; // use re-cache source install package {$EXTERNALSYM REINSTALLMODE_PACKAGE} type REINSTALLMODE = DWORD; {$EXTERNALSYM REINSTALLMODE} TReinstallMode = REINSTALLMODE; // bit flags for use with MsiEnableLog and MsiSetExternalUI const INSTALLLOGMODE_FATALEXIT = 1 shl (INSTALLMESSAGE_FATALEXIT shr 24); {$EXTERNALSYM INSTALLLOGMODE_FATALEXIT} INSTALLLOGMODE_ERROR = 1 shl (INSTALLMESSAGE_ERROR shr 24); {$EXTERNALSYM INSTALLLOGMODE_ERROR} INSTALLLOGMODE_WARNING = 1 shl (INSTALLMESSAGE_WARNING shr 24); {$EXTERNALSYM INSTALLLOGMODE_WARNING} INSTALLLOGMODE_USER = 1 shl (INSTALLMESSAGE_USER shr 24); {$EXTERNALSYM INSTALLLOGMODE_USER} INSTALLLOGMODE_INFO = 1 shl (INSTALLMESSAGE_INFO shr 24); {$EXTERNALSYM INSTALLLOGMODE_INFO} INSTALLLOGMODE_RESOLVESOURCE = 1 shl (INSTALLMESSAGE_RESOLVESOURCE shr 24); {$EXTERNALSYM INSTALLLOGMODE_RESOLVESOURCE} INSTALLLOGMODE_OUTOFDISKSPACE = 1 shl (INSTALLMESSAGE_OUTOFDISKSPACE shr 24); {$EXTERNALSYM INSTALLLOGMODE_OUTOFDISKSPACE} INSTALLLOGMODE_ACTIONSTART = 1 shl (INSTALLMESSAGE_ACTIONSTART shr 24); {$EXTERNALSYM INSTALLLOGMODE_ACTIONSTART} INSTALLLOGMODE_ACTIONDATA = 1 shl (INSTALLMESSAGE_ACTIONDATA shr 24); {$EXTERNALSYM INSTALLLOGMODE_ACTIONDATA} INSTALLLOGMODE_COMMONDATA = 1 shl (INSTALLMESSAGE_COMMONDATA shr 24); {$EXTERNALSYM INSTALLLOGMODE_COMMONDATA} INSTALLLOGMODE_PROPERTYDUMP = 1 shl (INSTALLMESSAGE_PROGRESS shr 24); // log only {$EXTERNALSYM INSTALLLOGMODE_PROPERTYDUMP} INSTALLLOGMODE_VERBOSE = 1 shl (INSTALLMESSAGE_INITIALIZE shr 24); // log only {$EXTERNALSYM INSTALLLOGMODE_VERBOSE} INSTALLLOGMODE_EXTRADEBUG = 1 shl (INSTALLMESSAGE_TERMINATE shr 24); // log only {$EXTERNALSYM INSTALLLOGMODE_EXTRADEBUG} INSTALLLOGMODE_PROGRESS = 1 shl (INSTALLMESSAGE_PROGRESS shr 24); // external handler only {$EXTERNALSYM INSTALLLOGMODE_PROGRESS} INSTALLLOGMODE_INITIALIZE = 1 shl (INSTALLMESSAGE_INITIALIZE shr 24); // external handler only {$EXTERNALSYM INSTALLLOGMODE_INITIALIZE} INSTALLLOGMODE_TERMINATE = 1 shl (INSTALLMESSAGE_TERMINATE shr 24); // external handler only {$EXTERNALSYM INSTALLLOGMODE_TERMINATE} INSTALLLOGMODE_SHOWDIALOG = 1 shl (INSTALLMESSAGE_SHOWDIALOG shr 24); // external handler only {$EXTERNALSYM INSTALLLOGMODE_SHOWDIALOG} type INSTALLLOGMODE = DWORD; {$EXTERNALSYM INSTALLLOGMODE} TInstallLogMode = INSTALLLOGMODE; const INSTALLLOGATTRIBUTES_APPEND = 1 shl 0; {$EXTERNALSYM INSTALLLOGATTRIBUTES_APPEND} INSTALLLOGATTRIBUTES_FLUSHEACHLINE = 1 shl 1; {$EXTERNALSYM INSTALLLOGATTRIBUTES_FLUSHEACHLINE} type INSTALLLOGATTRIBUTES = DWORD; {$EXTERNALSYM INSTALLLOGATTRIBUTES} TInstallLogAttributes = INSTALLLOGATTRIBUTES; const INSTALLFEATUREATTRIBUTE_FAVORLOCAL = 1 shl 0; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE_FAVORLOCAL} INSTALLFEATUREATTRIBUTE_FAVORSOURCE = 1 shl 1; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE_FAVORSOURCE} INSTALLFEATUREATTRIBUTE_FOLLOWPARENT = 1 shl 2; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE_FOLLOWPARENT} INSTALLFEATUREATTRIBUTE_FAVORADVERTISE = 1 shl 3; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE_FAVORADVERTISE} INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE = 1 shl 4; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE} INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 shl 5; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE} type INSTALLFEATUREATTRIBUTE = DWORD; {$EXTERNALSYM INSTALLFEATUREATTRIBUTE} TInstallFeatureAttribute = INSTALLFEATUREATTRIBUTE; const INSTALLMODE_NOSOURCERESOLUTION = -3; // skip source resolution {$EXTERNALSYM INSTALLMODE_NOSOURCERESOLUTION} INSTALLMODE_NODETECTION = -2; // skip detection {$EXTERNALSYM INSTALLMODE_NODETECTION} INSTALLMODE_EXISTING = -1; // provide, if available {$EXTERNALSYM INSTALLMODE_EXISTING} INSTALLMODE_DEFAULT = 0; // install, if absent {$EXTERNALSYM INSTALLMODE_DEFAULT} type INSTALLMODE = DWORD; {$EXTERNALSYM INSTALLMODE} TInstallMode = INSTALLMODE; const MAX_FEATURE_CHARS = 38; // maximum chars in feature name (same as string GUID) {$EXTERNALSYM MAX_FEATURE_CHARS} // Product info attributes: advertised information INSTALLPROPERTY_PACKAGENAME = __TEXT('PackageName'); {$EXTERNALSYM INSTALLPROPERTY_PACKAGENAME} INSTALLPROPERTY_TRANSFORMS = __TEXT('Transforms'); {$EXTERNALSYM INSTALLPROPERTY_TRANSFORMS} INSTALLPROPERTY_LANGUAGE = __TEXT('Language'); {$EXTERNALSYM INSTALLPROPERTY_LANGUAGE} INSTALLPROPERTY_PRODUCTNAME = __TEXT('ProductName'); {$EXTERNALSYM INSTALLPROPERTY_PRODUCTNAME} INSTALLPROPERTY_ASSIGNMENTTYPE = __TEXT('AssignmentType'); {$EXTERNALSYM INSTALLPROPERTY_ASSIGNMENTTYPE} //#if (_WIN32_MSI >= 150) INSTALLPROPERTY_INSTANCETYPE = __TEXT('InstanceType'); {$EXTERNALSYM INSTALLPROPERTY_INSTANCETYPE} //#endif //(_WIN32_MSI >= 150) INSTALLPROPERTY_PACKAGECODE = __TEXT('PackageCode'); {$EXTERNALSYM INSTALLPROPERTY_PACKAGECODE} INSTALLPROPERTY_VERSION = __TEXT('Version'); {$EXTERNALSYM INSTALLPROPERTY_VERSION} INSTALLPROPERTY_PRODUCTICON = __TEXT('ProductIcon'); {$EXTERNALSYM INSTALLPROPERTY_PRODUCTICON} // Product info attributes: installed information INSTALLPROPERTY_INSTALLEDPRODUCTNAME = __TEXT('InstalledProductName'); {$EXTERNALSYM INSTALLPROPERTY_INSTALLEDPRODUCTNAME} INSTALLPROPERTY_VERSIONSTRING = __TEXT('VersionString'); {$EXTERNALSYM INSTALLPROPERTY_VERSIONSTRING} INSTALLPROPERTY_HELPLINK = __TEXT('HelpLink'); {$EXTERNALSYM INSTALLPROPERTY_HELPLINK} INSTALLPROPERTY_HELPTELEPHONE = __TEXT('HelpTelephone'); {$EXTERNALSYM INSTALLPROPERTY_HELPTELEPHONE} INSTALLPROPERTY_INSTALLLOCATION = __TEXT('InstallLocation'); {$EXTERNALSYM INSTALLPROPERTY_INSTALLLOCATION} INSTALLPROPERTY_INSTALLSOURCE = __TEXT('InstallSource'); {$EXTERNALSYM INSTALLPROPERTY_INSTALLSOURCE} INSTALLPROPERTY_INSTALLDATE = __TEXT('InstallDate'); {$EXTERNALSYM INSTALLPROPERTY_INSTALLDATE} INSTALLPROPERTY_PUBLISHER = __TEXT('Publisher'); {$EXTERNALSYM INSTALLPROPERTY_PUBLISHER} INSTALLPROPERTY_LOCALPACKAGE = __TEXT('LocalPackage'); {$EXTERNALSYM INSTALLPROPERTY_LOCALPACKAGE} INSTALLPROPERTY_URLINFOABOUT = __TEXT('URLInfoAbout'); {$EXTERNALSYM INSTALLPROPERTY_URLINFOABOUT} INSTALLPROPERTY_URLUPDATEINFO = __TEXT('URLUpdateInfo'); {$EXTERNALSYM INSTALLPROPERTY_URLUPDATEINFO} INSTALLPROPERTY_VERSIONMINOR = __TEXT('VersionMinor'); {$EXTERNALSYM INSTALLPROPERTY_VERSIONMINOR} INSTALLPROPERTY_VERSIONMAJOR = __TEXT('VersionMajor'); {$EXTERNALSYM INSTALLPROPERTY_VERSIONMAJOR} const SCRIPTFLAGS_CACHEINFO = $00000001; // set if the icons need to be created/ removed {$EXTERNALSYM SCRIPTFLAGS_CACHEINFO} SCRIPTFLAGS_SHORTCUTS = $00000004; // set if the shortcuts needs to be created/ deleted {$EXTERNALSYM SCRIPTFLAGS_SHORTCUTS} SCRIPTFLAGS_MACHINEASSIGN = $00000008; // set if product to be assigned to machine {$EXTERNALSYM SCRIPTFLAGS_MACHINEASSIGN} SCRIPTFLAGS_REGDATA_CNFGINFO = $00000020; // set if the product cnfg mgmt. registry data needs to be written/ removed {$EXTERNALSYM SCRIPTFLAGS_REGDATA_CNFGINFO} SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = $00000040; {$EXTERNALSYM SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST} {$IFDEF MSI200_UP} SCRIPTFLAGS_REGDATA_CLASSINFO = $00000080; // set if COM classes related app info needs to be created/ deleted {$EXTERNALSYM SCRIPTFLAGS_REGDATA_CLASSINFO} SCRIPTFLAGS_REGDATA_EXTENSIONINFO = $00000100; // set if extension related app info needs to be created/ deleted {$EXTERNALSYM SCRIPTFLAGS_REGDATA_EXTENSIONINFO} SCRIPTFLAGS_REGDATA_APPINFO = SCRIPTFLAGS_REGDATA_CLASSINFO or SCRIPTFLAGS_REGDATA_EXTENSIONINFO; // for source level backward compatibility {$EXTERNALSYM SCRIPTFLAGS_REGDATA_APPINFO} {$ELSE} // _WIN32_MSI >= 110 SCRIPTFLAGS_REGDATA_APPINFO = $00000010; {$EXTERNALSYM SCRIPTFLAGS_REGDATA_APPINFO} {$ENDIF MSI200_UP} SCRIPTFLAGS_REGDATA = SCRIPTFLAGS_REGDATA_APPINFO or SCRIPTFLAGS_REGDATA_CNFGINFO;// for source level backward compatibility {$EXTERNALSYM SCRIPTFLAGS_REGDATA} type SCRIPTFLAGS = Longint; {$EXTERNALSYM SCRIPTFLAGS} TScriptFlags = SCRIPTFLAGS; const ADVERTISEFLAGS_MACHINEASSIGN = 0; // set if the product is to be machine assigned {$EXTERNALSYM ADVERTISEFLAGS_MACHINEASSIGN} ADVERTISEFLAGS_USERASSIGN = 1; // set if the product is to be user assigned {$EXTERNALSYM ADVERTISEFLAGS_USERASSIGN} type ADVERTISEFLAGS = Longint; {$EXTERNALSYM ADVERTISEFLAGS} TAdvertiseFlags = ADVERTISEFLAGS; const INSTALLTYPE_DEFAULT = 0; // set to indicate default behavior {$EXTERNALSYM INSTALLTYPE_DEFAULT} INSTALLTYPE_NETWORK_IMAGE = 1; // set to indicate network install {$EXTERNALSYM INSTALLTYPE_NETWORK_IMAGE} INSTALLTYPE_SINGLE_INSTANCE = 2; // set to indicate a particular instance {$EXTERNALSYM INSTALLTYPE_SINGLE_INSTANCE} type INSTALLTYPE = DWORD; {$EXTERNALSYM INSTALLTYPE} TInstallType = INSTALLTYPE; type _MSIFILEHASHINFO = record dwFileHashInfoSize: ULONG; dwData: array [0..3] of ULONG; end; {$EXTERNALSYM _MSIFILEHASHINFO} MSIFILEHASHINFO = _MSIFILEHASHINFO; {$EXTERNALSYM MSIFILEHASHINFO} PMSIFILEHASHINFO = ^MSIFILEHASHINFO; {$EXTERNALSYM PMSIFILEHASHINFO} TMsiFileHashInfo = MSIFILEHASHINFO; const MSIARCHITECTUREFLAGS_X86 = $00000001; // set if creating the script for i386 platform {$EXTERNALSYM MSIARCHITECTUREFLAGS_X86} MSIARCHITECTUREFLAGS_IA64 = $00000002; // set if creating the script for IA64 platform {$EXTERNALSYM MSIARCHITECTUREFLAGS_IA64} MSIARCHITECTUREFLAGS_AMD64 = $00000004; // set if creating the script for AMD64 platform {$EXTERNALSYM MSIARCHITECTUREFLAGS_AMD64} type MSIARCHITECTUREFLAGS = DWORD; {$EXTERNALSYM MSIARCHITECTUREFLAGS} TMsiArchitectureFlags = MSIARCHITECTUREFLAGS; const MSIOPENPACKAGEFLAGS_IGNOREMACHINESTATE = $00000001; // ignore the machine state when creating the engine {$EXTERNALSYM MSIOPENPACKAGEFLAGS_IGNOREMACHINESTATE} type MSIOPENPACKAGEFLAGS = DWORD; {$EXTERNALSYM MSIOPENPACKAGEFLAGS} TMsiOpenPackageFlags = MSIOPENPACKAGEFLAGS; const MSIADVERTISEOPTIONFLAGS_INSTANCE = $00000001; // set if advertising a new instance {$EXTERNALSYM MSIADVERTISEOPTIONFLAGS_INSTANCE} type tagMSIADVERTISEOPTIONFLAGS = DWORD; {$EXTERNALSYM tagMSIADVERTISEOPTIONFLAGS} MSIADVERTISEOPTIONFLAGS = tagMSIADVERTISEOPTIONFLAGS; {$EXTERNALSYM MSIADVERTISEOPTIONFLAGS} TMsiAdvertiseOptionFlags = MSIADVERTISEOPTIONFLAGS; // -------------------------------------------------------------------------- // Functions to set the UI handling and logging. The UI will be used for error, // progress, and log messages for all subsequent calls to Installer Service // API functions that require UI. // -------------------------------------------------------------------------- // Enable internal UI function MsiSetInternalUI(dwUILevel: INSTALLUILEVEL; phWnd: LPHWND): INSTALLUILEVEL; stdcall; {$EXTERNALSYM MsiSetInternalUI} // Enable external UI handling, returns any previous handler or NULL if none. // Messages are designated with a combination of bits from INSTALLLOGMODE enum. function MsiSetExternalUIA(puiHandler: INSTALLUI_HANDLERA; dwMessageFilter: DWORD; pvContext: LPVOID): INSTALLUI_HANDLERA; stdcall; {$EXTERNALSYM MsiSetExternalUIA} function MsiSetExternalUIW(puiHandler: INSTALLUI_HANDLERW; dwMessageFilter: DWORD; pvContext: LPVOID): INSTALLUI_HANDLERW; stdcall; {$EXTERNALSYM MsiSetExternalUIW} function MsiSetExternalUI(puiHandler: INSTALLUI_HANDLER; dwMessageFilter: DWORD; pvContext: LPVOID): INSTALLUI_HANDLER; stdcall; {$EXTERNALSYM MsiSetExternalUI} // Enable logging to a file for all install sessions for the client process, // with control over which log messages are passed to the specified log file. // Messages are designated with a combination of bits from INSTALLLOGMODE enum. function MsiEnableLogA(dwLogMode: DWORD; szLogFile: LPCSTR; dwLogAttributes: DWORD): UINT; stdcall; {$EXTERNALSYM MsiEnableLogA} function MsiEnableLogW(dwLogMode: DWORD; szLogFile: LPCWSTR; dwLogAttributes: DWORD): UINT; stdcall; {$EXTERNALSYM MsiEnableLogW} function MsiEnableLog(dwLogMode: DWORD; szLogFile: LPCTSTR; dwLogAttributes: DWORD): UINT; stdcall; {$EXTERNALSYM MsiEnableLog} // -------------------------------------------------------------------------- // Functions to query and configure a product as a whole. // -------------------------------------------------------------------------- // Return the installed state for a product function MsiQueryProductStateA(szProduct: LPCSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiQueryProductStateA} function MsiQueryProductStateW(szProduct: LPCWSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiQueryProductStateW} function MsiQueryProductState(szProduct: LPCTSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiQueryProductState} // Return product info function MsiGetProductInfoA(szProduct: LPCSTR; szAttribute: LPCSTR; lpValueBuf: LPSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductInfoA} function MsiGetProductInfoW(szProduct: LPCWSTR; szAttribute: LPCWSTR; lpValueBuf: LPWSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductInfoW} function MsiGetProductInfo(szProduct: LPCTSTR; szAttribute: LPCTSTR; lpValueBuf: LPTSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductInfo} // Install a new product. // Either may be NULL, but the DATABASE property must be specfied function MsiInstallProductA(szPackagePath: LPCSTR; szCommandLine: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiInstallProductA} function MsiInstallProductW(szPackagePath: LPCWSTR; szCommandLine: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiInstallProductW} function MsiInstallProduct(szPackagePath: LPCTSTR; szCommandLine: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiInstallProduct} // Install/uninstall an advertised or installed product // No action if installed and INSTALLSTATE_DEFAULT specified function MsiConfigureProductA(szProduct: LPCSTR; iInstallLevel: Integer; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiConfigureProductA} function MsiConfigureProductW(szProduct: LPCWSTR; iInstallLevel: Integer; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiConfigureProductW} function MsiConfigureProduct(szProduct: LPCTSTR; iInstallLevel: Integer; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiConfigureProduct} // Install/uninstall an advertised or installed product // No action if installed and INSTALLSTATE_DEFAULT specified function MsiConfigureProductExA(szProduct: LPCSTR; iInstallLevel: Integer; eInstallState: INSTALLSTATE; szCommandLine: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiConfigureProductExA} function MsiConfigureProductExW(szProduct: LPCWSTR; iInstallLevel: Integer; eInstallState: INSTALLSTATE; szCommandLine: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiConfigureProductExW} function MsiConfigureProductEx(szProduct: LPCTSTR; iInstallLevel: Integer; eInstallState: INSTALLSTATE; szCommandLine: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiConfigureProductEx} // Reinstall product, used to validate or correct problems function MsiReinstallProductA(szProduct: LPCSTR; szReinstallMode: DWORD): UINT; stdcall; {$EXTERNALSYM MsiReinstallProductA} function MsiReinstallProductW(szProduct: LPCWSTR; szReinstallMode: DWORD): UINT; stdcall; {$EXTERNALSYM MsiReinstallProductW} function MsiReinstallProduct(szProduct: LPCTSTR; szReinstallMode: DWORD): UINT; stdcall; {$EXTERNALSYM MsiReinstallProduct} // Output reg and shortcut info to script file for specified architecture for Assign or Publish // If dwPlatform is 0, then the script is created based on the current platform (behavior of MsiAdvertiseProduct) // If dwOptions includes MSIADVERTISEOPTIONFLAGS_INSTANCE, then a new instance is advertised. Use of // this option requires that szTransforms include the instance transform that changes the product code function MsiAdvertiseProductExA(szPackagePath, szScriptfilePath, szTransforms: LPCSTR; lgidLanguage: LANGID; dwPlatform, dwOptions: DWORD): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseProductExA} function MsiAdvertiseProductExW(szPackagePath, szScriptfilePath, szTransforms: LPCWSTR; lgidLanguage: LANGID; dwPlatform, dwOptions: DWORD): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseProductExW} function MsiAdvertiseProductEx(szPackagePath, szScriptfilePath, szTransforms: LPCTSTR; lgidLanguage: LANGID; dwPlatform, dwOptions: DWORD): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseProductEx} // Output reg and shortcut info to script file for Assign or Publish function MsiAdvertiseProductA(szPackagePath, szScriptfilePath, szTransforms: LPCSTR; lgidLanguage: LANGID): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseProductA} function MsiAdvertiseProductW(szPackagePath, szScriptfilePath, szTransforms: LPCWSTR; lgidLanguage: LANGID): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseProductW} function MsiAdvertiseProduct(szPackagePath, szScriptfilePath, szTransforms: LPCTSTR; lgidLanguage: LANGID): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseProduct} // Process advertise script file into supplied locations // If an icon folder is specified, icon files will be placed there // If an registry key is specified, registry data will be mapped under it // If fShortcuts is TRUE, shortcuts will be created. If a special folder is // returned by SHGetSpecialFolderLocation(?), it will hold the shortcuts. // if fRemoveItems is TRUE, items that are present will be removed function MsiProcessAdvertiseScriptA(szScriptFile, szIconFolder: LPCSTR; hRegData: HKEY; fShortcuts, fRemoveItems: BOOL): UINT; stdcall; {$EXTERNALSYM MsiProcessAdvertiseScriptA} function MsiProcessAdvertiseScriptW(szScriptFile, szIconFolder: LPCWSTR; hRegData: HKEY; fShortcuts, fRemoveItems: BOOL): UINT; stdcall; {$EXTERNALSYM MsiProcessAdvertiseScriptW} function MsiProcessAdvertiseScript(szScriptFile, szIconFolder: LPCTSTR; hRegData: HKEY; fShortcuts, fRemoveItems: BOOL): UINT; stdcall; {$EXTERNALSYM MsiProcessAdvertiseScript} // Process advertise script file using the supplied dwFlags control flags // if fRemoveItems is TRUE, items that are present will be removed function MsiAdvertiseScriptA(szScriptFile: LPCSTR; dwFlags: DWORD; phRegData: PHKEY; fRemoveItems: BOOL): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseScriptA} function MsiAdvertiseScriptW(szScriptFile: LPCWSTR; dwFlags: DWORD; phRegData: PHKEY; fRemoveItems: BOOL): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseScriptW} function MsiAdvertiseScript(szScriptFile: LPCTSTR; dwFlags: DWORD; phRegData: PHKEY; fRemoveItems: BOOL): UINT; stdcall; {$EXTERNALSYM MsiAdvertiseScript} // Return product info from an installer script file: // product code, language, version, readable name, path to package // Returns TRUE is success, FALSE if szScriptFile is not a valid script file function MsiGetProductInfoFromScriptA(szScriptFile: LPCSTR; lpProductBuf39: LPSTR; plgidLanguage: PLANGID; pdwVersion: LPDWORD; lpNameBuf: LPSTR; pcchNameBuf: LPDWORD; lpPackageBuf: LPSTR; pcchPackageBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductInfoFromScriptA} function MsiGetProductInfoFromScriptW(szScriptFile: LPCWSTR; lpProductBuf39: LPWSTR; plgidLanguage: PLANGID; pdwVersion: LPDWORD; lpNameBuf: LPWSTR; pcchNameBuf: LPDWORD; lpPackageBuf: LPWSTR; pcchPackageBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductInfoFromScriptW} function MsiGetProductInfoFromScript(szScriptFile: LPCTSTR; lpProductBuf39: LPTSTR; plgidLanguage: PLANGID; pdwVersion: LPDWORD; lpNameBuf: LPTSTR; pcchNameBuf: LPDWORD; lpPackageBuf: LPTSTR; pcchPackageBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductInfoFromScript} // Return the product code for a registered component, called once by apps function MsiGetProductCodeA(szComponent: LPCSTR; lpBuf39: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiGetProductCodeA} function MsiGetProductCodeW(szComponent: LPCWSTR; lpBuf39: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiGetProductCodeW} function MsiGetProductCode(szComponent: LPCTSTR; lpBuf39: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiGetProductCode} // Return the registered user information for an installed product function MsiGetUserInfoA(szProduct: LPCSTR; lpUserNameBuf: LPSTR; var pcchUserNameBuf: DWORD; lpOrgNameBuf: LPSTR; var pcchOrgNameBuf: DWORD; lpSerialBuf: LPSTR; var pcchSerialBuf: DWORD): USERINFOSTATE; stdcall; {$EXTERNALSYM MsiGetUserInfoA} function MsiGetUserInfoW(szProduct: LPCWSTR; lpUserNameBuf: LPWSTR; var pcchUserNameBuf: DWORD; lpOrgNameBuf: LPWSTR; var pcchOrgNameBuf: DWORD; lpSerialBuf: LPWSTR; var pcchSerialBuf: DWORD): USERINFOSTATE; stdcall; {$EXTERNALSYM MsiGetUserInfoW} function MsiGetUserInfo(szProduct: LPCTSTR; lpUserNameBuf: LPTSTR; var pcchUserNameBuf: DWORD; lpOrgNameBuf: LPTSTR; var pcchOrgNameBuf: DWORD; lpSerialBuf: LPTSTR; var pcchSerialBuf: DWORD): USERINFOSTATE; stdcall; {$EXTERNALSYM MsiGetUserInfo} // Obtain and store user info and PID from installation wizard (first run) function MsiCollectUserInfoA(szProduct: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiCollectUserInfoA} function MsiCollectUserInfoW(szProduct: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiCollectUserInfoW} function MsiCollectUserInfo(szProduct: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiCollectUserInfo} // -------------------------------------------------------------------------- // Functions to patch existing products // -------------------------------------------------------------------------- // Patch all possible installed products. function MsiApplyPatchA(szPatchPackage: LPCSTR; szInstallPackage: LPCSTR; eInstallType: INSTALLTYPE; szCommandLine: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiApplyPatchA} function MsiApplyPatchW(szPatchPackage: LPCWSTR; szInstallPackage: LPCWSTR; eInstallType: INSTALLTYPE; szCommandLine: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiApplyPatchW} function MsiApplyPatch(szPatchPackage: LPCTSTR; szInstallPackage: LPCTSTR; eInstallType: INSTALLTYPE; szCommandLine: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiApplyPatch} // Return patch info function MsiGetPatchInfoA(szPatch: LPCSTR; szAttribute: LPCSTR; lpValueBuf: LPSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetPatchInfoA} function MsiGetPatchInfoW(szPatch: LPCWSTR; szAttribute: LPCWSTR; lpValueBuf: LPWSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetPatchInfoW} function MsiGetPatchInfo(szPatch: LPCTSTR; szAttribute: LPCTSTR; lpValueBuf: LPTSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetPatchInfo} // Enumerate all patches for a product function MsiEnumPatchesA(szProduct: LPCSTR; iPatchIndex: DWORD; lpPatchBuf: LPSTR; lpTransformsBuf: LPSTR; var pcchTransformsBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiEnumPatchesA} function MsiEnumPatchesW(szProduct: LPCWSTR; iPatchIndex: DWORD; lpPatchBuf: LPWSTR; lpTransformsBuf: LPWSTR; var pcchTransformsBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiEnumPatchesW} function MsiEnumPatches(szProduct: LPCTSTR; iPatchIndex: DWORD; lpPatchBuf: LPTSTR; lpTransformsBuf: LPTSTR; var pcchTransformsBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiEnumPatches} // -------------------------------------------------------------------------- // Functions to query and configure a feature within a product. // -------------------------------------------------------------------------- // Return the installed state for a product feature function MsiQueryFeatureStateA(szProduct: LPCSTR; szFeature: LPCSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiQueryFeatureStateA} function MsiQueryFeatureStateW(szProduct: LPCWSTR; szFeature: LPCWSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiQueryFeatureStateW} function MsiQueryFeatureState(szProduct: LPCTSTR; szFeature: LPCTSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiQueryFeatureState} // Indicate intent to use a product feature, increments usage count // Prompts for CD if not loaded, does not install feature function MsiUseFeatureA(szProduct: LPCSTR; szFeature: LPCSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiUseFeatureA} function MsiUseFeatureW(szProduct: LPCWSTR; szFeature: LPCWSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiUseFeatureW} function MsiUseFeature(szProduct: LPCTSTR; szFeature: LPCTSTR): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiUseFeature} // Indicate intent to use a product feature, increments usage count // Prompts for CD if not loaded, does not install feature // Allows for bypassing component detection where performance is critical function MsiUseFeatureExA(szProduct: LPCSTR; szFeature: LPCSTR; dwInstallMode: DWORD; dwReserved: DWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiUseFeatureExA} function MsiUseFeatureExW(szProduct: LPCWSTR; szFeature: LPCWSTR; dwInstallMode: DWORD; dwReserved: DWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiUseFeatureExW} function MsiUseFeatureEx(szProduct: LPCTSTR; szFeature: LPCTSTR; dwInstallMode: DWORD; dwReserved: DWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiUseFeatureEx} // Return the usage metrics for a product feature function MsiGetFeatureUsageA(szProduct: LPCSTR; szFeature: LPCSTR; var pdwUseCount, pwDateUsed: WORD): UINT; stdcall; {$EXTERNALSYM MsiGetFeatureUsageA} function MsiGetFeatureUsageW(szProduct: LPCWSTR; szFeature: LPCWSTR; var pdwUseCount, pwDateUsed: WORD): UINT; stdcall; {$EXTERNALSYM MsiGetFeatureUsageW} function MsiGetFeatureUsage(szProduct: LPCTSTR; szFeature: LPCTSTR; var pdwUseCount, pwDateUsed: WORD): UINT; stdcall; {$EXTERNALSYM MsiGetFeatureUsage} // Force the installed state for a product feature function MsiConfigureFeatureA(szProduct, szFeature: LPCSTR; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiConfigureFeatureA} function MsiConfigureFeatureW(szProduct, szFeature: LPCWSTR; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiConfigureFeatureW} function MsiConfigureFeature(szProduct, szFeature: LPCTSTR; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiConfigureFeature} // Reinstall feature, used to validate or correct problems function MsiReinstallFeatureA(szProduct, szFeature: LPCSTR; dwReinstallMode: DWORD): UINT; stdcall; {$EXTERNALSYM MsiReinstallFeatureA} function MsiReinstallFeatureW(szProduct, szFeature: LPCWSTR; dwReinstallMode: DWORD): UINT; stdcall; {$EXTERNALSYM MsiReinstallFeatureW} function MsiReinstallFeature(szProduct, szFeature: LPCTSTR; dwReinstallMode: DWORD): UINT; stdcall; {$EXTERNALSYM MsiReinstallFeature} // -------------------------------------------------------------------------- // Functions to return a path to a particular component. // The state of the feature being used should have been checked previously. // -------------------------------------------------------------------------- // Return full component path, performing any necessary installation // calls MsiQueryFeatureState to detect that all components are installed // then calls MsiConfigureFeature if any of its components are uninstalled // then calls MsiLocateComponent to obtain the path the its key file function MsiProvideComponentA(szProduct: LPCSTR; szFeature: LPCSTR; szComponent: LPCSTR; dwInstallMode: DWORD; lpPathBuf: LPSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideComponentA} function MsiProvideComponentW(szProduct: LPCWSTR; szFeature: LPCWSTR; szComponent: LPCWSTR; dwInstallMode: DWORD; lpPathBuf: LPWSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideComponentW} function MsiProvideComponent(szProduct: LPCTSTR; szFeature: LPCTSTR; szComponent: LPCTSTR; dwInstallMode: DWORD; lpPathBuf: LPTSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideComponent} // Return full component path for a qualified component, performing any necessary installation. // Prompts for source if necessary and increments the usage count for the feature. function MsiProvideQualifiedComponentA(szCategory: LPCSTR; szQualifier: LPCSTR; dwInstallMode: DWORD; lpPathBuf: LPSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideQualifiedComponentA} function MsiProvideQualifiedComponentW(szCategory: LPCWSTR; szQualifier: LPCWSTR; dwInstallMode: DWORD; lpPathBuf: LPWSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideQualifiedComponentW} function MsiProvideQualifiedComponent(szCategory: LPCTSTR; szQualifier: LPCTSTR; dwInstallMode: DWORD; lpPathBuf: LPTSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideQualifiedComponent} // Return full component path for a qualified component, performing any necessary installation. // Prompts for source if necessary and increments the usage count for the feature. // The szProduct parameter specifies the product to match that has published the qualified // component. If null, this API works the same as MsiProvideQualifiedComponent. function MsiProvideQualifiedComponentExA(szCategory: LPCSTR; szQualifier: LPCSTR; dwInstallMode: DWORD; szProduct: LPCSTR; dwUnused1: DWORD; dwUnused2: DWORD; lpPathBuf: LPSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideQualifiedComponentExA} function MsiProvideQualifiedComponentExW(szCategory: LPCWSTR; szQualifier: LPCWSTR; dwInstallMode: DWORD; szProduct: LPCWSTR; dwUnused1: DWORD; dwUnused2: DWORD; lpPathBuf: LPWSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideQualifiedComponentExW} function MsiProvideQualifiedComponentEx(szCategory: LPCTSTR; szQualifier: LPCTSTR; dwInstallMode: DWORD; szProduct: LPCTSTR; dwUnused1: DWORD; dwUnused2: DWORD; lpPathBuf: LPTSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideQualifiedComponentEx} // Return full path to an installed component function MsiGetComponentPathA(szProduct: LPCSTR; szComponent: LPCSTR; lpPathBuf: LPSTR; pcchBuf: LPDWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiGetComponentPathA} function MsiGetComponentPathW(szProduct: LPCWSTR; szComponent: LPCWSTR; lpPathBuf: LPWSTR; pcchBuf: LPDWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiGetComponentPathW} function MsiGetComponentPath(szProduct: LPCTSTR; szComponent: LPCTSTR; lpPathBuf: LPTSTR; pcchBuf: LPDWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiGetComponentPath} const MSIASSEMBLYINFO_NETASSEMBLY = 0; // Net assemblies {$EXTERNALSYM MSIASSEMBLYINFO_NETASSEMBLY} MSIASSEMBLYINFO_WIN32ASSEMBLY = 1; // Win32 assemblies {$EXTERNALSYM MSIASSEMBLYINFO_WIN32ASSEMBLY} // Return full component path for an assembly installed via the WI, performing any necessary installation. // Prompts for source if necessary and increments the usage count for the feature. // The szAssemblyName parameter specifies the stringized assembly name. // The szAppContext is the full path to the .cfg file or the app exe to which the assembly being requested // has been privatised to, which is null for global assemblies function MsiProvideAssemblyA(szAssemblyName, szAppContext: LPCSTR; dwInstallMode, dwAssemblyInfo: DWORD; lpPathBuf: LPSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideAssemblyA} function MsiProvideAssemblyW(szAssemblyName, szAppContext: LPCWSTR; dwInstallMode, dwAssemblyInfo: DWORD; lpPathBuf: LPWSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideAssemblyW} function MsiProvideAssembly(szAssemblyName, szAppContext: LPCTSTR; dwInstallMode, dwAssemblyInfo: DWORD; lpPathBuf: LPTSTR; pcchPathBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiProvideAssembly} // -------------------------------------------------------------------------- // Functions to iterate registered products, features, and components. // As with reg keys, they accept a 0-based index into the enumeration. // -------------------------------------------------------------------------- // Enumerate the registered products, either installed or advertised function MsiEnumProductsA(iProductIndex: DWORD; lpProductBuf: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumProductsA} function MsiEnumProductsW(iProductIndex: DWORD; lpProductBuf: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumProductsW} function MsiEnumProducts(iProductIndex: DWORD; lpProductBuf: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumProducts} {$IFDEF MSI110} // Enumerate products with given upgrade code function MsiEnumRelatedProductsA(lpUpgradeCode: LPCSTR; dwReserved: DWORD; iProductIndex: DWORD; lpProductBuf: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumRelatedProductsA} function MsiEnumRelatedProductsW(lpUpgradeCode: LPCWSTR; dwReserved: DWORD; iProductIndex: DWORD; lpProductBuf: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumRelatedProductsW} function MsiEnumRelatedProducts(lpUpgradeCode: LPCTSTR; dwReserved: DWORD; iProductIndex: DWORD; lpProductBuf: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumRelatedProducts} {$ENDIF MSI110} // Enumerate the advertised features for a given product. // If parent is not required, supplying NULL will improve performance. function MsiEnumFeaturesA(szProduct: LPCSTR; iFeatureIndex: DWORD; lpFeatureBuf: LPSTR; lpParentBuf: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumFeaturesA} function MsiEnumFeaturesW(szProduct: LPCWSTR; iFeatureIndex: DWORD; lpFeatureBuf: LPWSTR; lpParentBuf: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumFeaturesW} function MsiEnumFeatures(szProduct: LPCTSTR; iFeatureIndex: DWORD; lpFeatureBuf: LPTSTR; lpParentBuf: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumFeatures} // Enumerate the installed components for all products function MsiEnumComponentsA(iComponentIndex: DWORD; lpComponentBuf: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumComponentsA} function MsiEnumComponentsW(iComponentIndex: DWORD; lpComponentBuf: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumComponentsW} function MsiEnumComponents(iComponentIndex: DWORD; lpComponentBuf: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumComponents} // Enumerate the client products for a component function MsiEnumClientsA(szComponent: LPCSTR; iProductIndex: DWORD; lpProductBuf: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumClientsA} function MsiEnumClientsW(szComponent: LPCWSTR; iProductIndex: DWORD; lpProductBuf: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumClientsW} function MsiEnumClients(szComponent: LPCTSTR; iProductIndex: DWORD; lpProductBuf: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiEnumClients} // Enumerate the qualifiers for an advertised component. function MsiEnumComponentQualifiersA(szComponent: LPCSTR; iIndex: DWORD; lpQualifierBuf: LPSTR; var pcchQualifierBuf: DWORD; lpApplicationDataBuf: LPSTR; pcchApplicationDataBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiEnumComponentQualifiersA} function MsiEnumComponentQualifiersW(szComponent: LPCWSTR; iIndex: DWORD; lpQualifierBuf: LPWSTR; var pcchQualifierBuf: DWORD; lpApplicationDataBuf: LPWSTR; pcchApplicationDataBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiEnumComponentQualifiersW} function MsiEnumComponentQualifiers(szComponent: LPCTSTR; iIndex: DWORD; lpQualifierBuf: LPTSTR; var pcchQualifierBuf: DWORD; lpApplicationDataBuf: LPTSTR; pcchApplicationDataBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiEnumComponentQualifiers} // -------------------------------------------------------------------------- // Functions to obtain product or package information. // -------------------------------------------------------------------------- // Open the installation for a product to obtain detailed information function MsiOpenProductA(szProduct: LPCSTR; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenProductA} function MsiOpenProductW(szProduct: LPCWSTR; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenProductW} function MsiOpenProduct(szProduct: LPCTSTR; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenProduct} // Open a product package in order to access product properties function MsiOpenPackageA(szPackagePath: LPCSTR; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenPackageA} function MsiOpenPackageW(szPackagePath: LPCWSTR; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenPackageW} function MsiOpenPackage(szPackagePath: LPCTSTR; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenPackage} // Open a product package in order to access product properties // Option to create a "safe" engine that does not look at machine state // and does not allow for modification of machine state function MsiOpenPackageExA(szPackagePath: LPCSTR; dwOptions: DWORD; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenPackageExA} function MsiOpenPackageExW(szPackagePath: LPCWSTR; dwOptions: DWORD; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenPackageExW} function MsiOpenPackageEx(szPackagePath: LPCTSTR; dwOptions: DWORD; var hProduct: MSIHANDLE): UINT; stdcall; {$EXTERNALSYM MsiOpenPackageEx} // Provide the value for an installation property. function MsiGetProductPropertyA(hProduct: MSIHANDLE; szProperty: LPCSTR; lpValueBuf: LPSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductPropertyA} function MsiGetProductPropertyW(hProduct: MSIHANDLE; szProperty: LPCWSTR; lpValueBuf: LPWSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductPropertyW} function MsiGetProductProperty(hProduct: MSIHANDLE; szProperty: LPCTSTR; lpValueBuf: LPTSTR; pcchValueBuf: LPDWORD): UINT; stdcall; {$EXTERNALSYM MsiGetProductProperty} // Determine whether a file is a package // Returns ERROR_SUCCESS if file is a package. function MsiVerifyPackageA(szPackagePath: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiVerifyPackageA} function MsiVerifyPackageW(szPackagePath: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiVerifyPackageW} function MsiVerifyPackage(szPackagePath: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiVerifyPackage} // Provide descriptive information for product feature: title and description. // Returns the install level for the feature, or -1 if feature is unknown. // 0 = feature is not available on this machine // 1 = highest priority, feature installed if parent is installed // >1 = decreasing priority, feature installation based on InstallLevel property function MsiGetFeatureInfoA(hProduct: MSIHANDLE; szFeature: LPCSTR; var lpAttributes: DWORD; lpTitleBuf: LPSTR; var pcchTitleBuf: DWORD; lpHelpBuf: LPSTR; var pcchHelpBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiGetFeatureInfoA} function MsiGetFeatureInfoW(hProduct: MSIHANDLE; szFeature: LPCWSTR; var lpAttributes: DWORD; lpTitleBuf: LPWSTR; var pcchTitleBuf: DWORD; lpHelpBuf: LPWSTR; var pcchHelpBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiGetFeatureInfoW} function MsiGetFeatureInfo(hProduct: MSIHANDLE; szFeature: LPCTSTR; var lpAttributes: DWORD; lpTitleBuf: LPTSTR; var pcchTitleBuf: DWORD; lpHelpBuf: LPTSTR; var pcchHelpBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiGetFeatureInfo} // -------------------------------------------------------------------------- // Functions to access or install missing components and files. // These should be used as a last resort. // -------------------------------------------------------------------------- // Install a component unexpectedly missing, provided only for error recovery // This would typically occur due to failue to establish feature availability // The product feature having the smallest incremental cost is installed function MsiInstallMissingComponentA(szProduct: LPCSTR; szComponent: LPCSTR; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiInstallMissingComponentA} function MsiInstallMissingComponentW(szProduct: LPCWSTR; szComponent: LPCWSTR; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiInstallMissingComponentW} function MsiInstallMissingComponent(szProduct: LPCTSTR; szComponent: LPCTSTR; eInstallState: INSTALLSTATE): UINT; stdcall; {$EXTERNALSYM MsiInstallMissingComponent} // Install a file unexpectedly missing, provided only for error recovery // This would typically occur due to failue to establish feature availability // The missing component is determined from the product's File table, then // the product feature having the smallest incremental cost is installed function MsiInstallMissingFileA(szProduct: LPCSTR; szFile: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiInstallMissingFileA} function MsiInstallMissingFileW(szProduct: LPCWSTR; szFile: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiInstallMissingFileW} function MsiInstallMissingFile(szProduct: LPCTSTR; szFile: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiInstallMissingFile} // Return full path to an installed component without a product code // This function attempts to determine the product using MsiGetProductCode // but is not guaranteed to find the correct product for the caller. // MsiGetComponentPath should always be called when possible. function MsiLocateComponentA(szComponent: LPCSTR; lpPathBuf: LPSTR; pcchBuf: LPDWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiLocateComponentA} function MsiLocateComponentW(szComponent: LPCWSTR; lpPathBuf: LPWSTR; pcchBuf: LPDWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiLocateComponentW} function MsiLocateComponent(szComponent: LPCTSTR; lpPathBuf: LPTSTR; pcchBuf: LPDWORD): INSTALLSTATE; stdcall; {$EXTERNALSYM MsiLocateComponent} {$IFDEF MSI110} // -------------------------------------------------------------------------- // Functions used to manage the list of valid sources. // -------------------------------------------------------------------------- // Opens the list of sources for the specified user's install of the product // and removes all network sources from the list. A NULL or empty value for // the user name indicates the per-machine install. function MsiSourceListClearAllA(szProduct: LPCSTR; szUserName: LPCSTR; dwReserved: DWORD): UINT; stdcall; {$EXTERNALSYM MsiSourceListClearAllA} function MsiSourceListClearAllW(szProduct: LPCWSTR; szUserName: LPCWSTR; dwReserved: DWORD): UINT; stdcall; {$EXTERNALSYM MsiSourceListClearAllW} function MsiSourceListClearAll(szProduct: LPCTSTR; szUserName: LPCTSTR; dwReserved: DWORD): UINT; stdcall; {$EXTERNALSYM MsiSourceListClearAll} // Opens the list of sources for the specified user's install of the product // and adds the provided source as a new network source. A NULL or empty // value for the user name indicates the per-machine install. function MsiSourceListAddSourceA(szProduct: LPCSTR; szUserName: LPCSTR; dwReserved: DWORD; szSource: LPCSTR): UINT; stdcall; {$EXTERNALSYM MsiSourceListAddSourceA} function MsiSourceListAddSourceW(szProduct: LPCWSTR; szUserName: LPCWSTR; dwReserved: DWORD; szSource: LPCWSTR): UINT; stdcall; {$EXTERNALSYM MsiSourceListAddSourceW} function MsiSourceListAddSource(szProduct: LPCTSTR; szUserName: LPCTSTR; dwReserved: DWORD; szSource: LPCTSTR): UINT; stdcall; {$EXTERNALSYM MsiSourceListAddSource} // Forces the installer to reevaluate the list of sources the next time that // the specified product needs a source. function MsiSourceListForceResolutionA(szProduct, szUserName: LPCSTR; dwReserved: DWORD): UINT; stdcall; {$EXTERNALSYM MsiSourceListForceResolutionA} function MsiSourceListForceResolutionW(szProduct, szUserName: LPCWSTR; dwReserved: DWORD): UINT; stdcall; {$EXTERNALSYM MsiSourceListForceResolutionW} function MsiSourceListForceResolution(szProduct, szUserName: LPCTSTR; dwReserved: DWORD): UINT; stdcall; {$EXTERNALSYM MsiSourceListForceResolution} {$ENDIF MSI110} // -------------------------------------------------------------------------- // Utility functions // -------------------------------------------------------------------------- // Give the version string and language for a specified file function MsiGetFileVersionA(szFilePath: LPCSTR; lpVersionBuf: LPSTR; var pcchVersionBuf: DWORD; lpLangBuf: LPSTR; var pcchLangBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiGetFileVersionA} function MsiGetFileVersionW(szFilePath: LPCWSTR; lpVersionBuf: LPWSTR; var pcchVersionBuf: DWORD; lpLangBuf: LPWSTR; var pcchLangBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiGetFileVersionW} function MsiGetFileVersion(szFilePath: LPCTSTR; lpVersionBuf: LPTSTR; var pcchVersionBuf: DWORD; lpLangBuf: LPTSTR; var pcchLangBuf: DWORD): UINT; stdcall; {$EXTERNALSYM MsiGetFileVersion} function MsiGetFileHashA(szFilePath: LPCSTR; dwOptions: DWORD; pHash: PMSIFILEHASHINFO): UINT; stdcall; {$EXTERNALSYM MsiGetFileHashA} function MsiGetFileHashW(szFilePath: LPCWSTR; dwOptions: DWORD; pHash: PMSIFILEHASHINFO): UINT; stdcall; {$EXTERNALSYM MsiGetFileHashW} function MsiGetFileHash(szFilePath: LPCTSTR; dwOptions: DWORD; pHash: PMSIFILEHASHINFO): UINT; stdcall; {$EXTERNALSYM MsiGetFileHash} function MsiGetFileSignatureInformationA(szSignedObjectPath: LPCSTR; dwFlags: DWORD; var ppcCertContext: PCCERT_CONTEXT; pbHashData: LPBYTE; pcbHashData: LPDWORD): HRESULT; stdcall; {$EXTERNALSYM MsiGetFileSignatureInformationA} function MsiGetFileSignatureInformationW(szSignedObjectPath: LPCWSTR; dwFlags: DWORD; var ppcCertContext: PCCERT_CONTEXT; pbHashData: LPBYTE; pcbHashData: LPDWORD): HRESULT; stdcall; {$EXTERNALSYM MsiGetFileSignatureInformationW} function MsiGetFileSignatureInformation(szSignedObjectPath: LPCTSTR; dwFlags: DWORD; var ppcCertContext: PCCERT_CONTEXT; pbHashData: LPBYTE; pcbHashData: LPDWORD): HRESULT; stdcall; {$EXTERNALSYM MsiGetFileSignatureInformation} // By default, when only requesting the certificate context, an invalid hash // in the digital signature is not a fatal error. Set this flag in the dwFlags // parameter to make the TRUST_E_BAD_DIGEST error fatal. const MSI_INVALID_HASH_IS_FATAL = $1; {$EXTERNALSYM MSI_INVALID_HASH_IS_FATAL} {$IFDEF MSI110} // examine a shortcut, and retrieve its descriptor information // if available. function MsiGetShortcutTargetA(szShortcutPath: LPCSTR; szProductCode: LPSTR; szFeatureId: LPSTR; szComponentCode: LPSTR): UINT; stdcall; {$EXTERNALSYM MsiGetShortcutTargetA} function MsiGetShortcutTargetW(szShortcutPath: LPCWSTR; szProductCode: LPWSTR; szFeatureId: LPWSTR; szComponentCode: LPWSTR): UINT; stdcall; {$EXTERNALSYM MsiGetShortcutTargetW} function MsiGetShortcutTarget(szShortcutPath: LPCTSTR; szProductCode: LPTSTR; szFeatureId: LPTSTR; szComponentCode: LPTSTR): UINT; stdcall; {$EXTERNALSYM MsiGetShortcutTarget} {$ENDIF MSI110} // checks to see if a product is managed // checks per-machine if called from system context, per-user if from // user context function MsiIsProductElevatedA(szProduct: LPCSTR; var pfElevated: BOOL): UINT; stdcall; {$EXTERNALSYM MsiIsProductElevatedA} function MsiIsProductElevatedW(szProduct: LPCWSTR; var pfElevated: BOOL): UINT; stdcall; {$EXTERNALSYM MsiIsProductElevatedW} function MsiIsProductElevated(szProduct: LPCTSTR; var pfElevated: BOOL): UINT; stdcall; {$EXTERNALSYM MsiIsProductElevated} // -------------------------------------------------------------------------- // Error codes for installer access functions - until merged to winerr.h // -------------------------------------------------------------------------- {$IFNDEF JWA_INCLUDEMODE} const ERROR_INSTALL_USEREXIT = 1602; // User cancel installation. {$EXTERNALSYM ERROR_INSTALL_USEREXIT} ERROR_INSTALL_FAILURE = 1603; // Fatal error during installation. {$EXTERNALSYM ERROR_INSTALL_FAILURE} ERROR_INSTALL_SUSPEND = 1604; // Installation suspended, incomplete. {$EXTERNALSYM ERROR_INSTALL_SUSPEND} ERROR_UNKNOWN_PRODUCT = 1605; // This action is only valid for products that are currently installed. {$EXTERNALSYM ERROR_UNKNOWN_PRODUCT} ERROR_UNKNOWN_FEATURE = 1606; // Feature ID not registered. {$EXTERNALSYM ERROR_UNKNOWN_FEATURE} ERROR_UNKNOWN_COMPONENT = 1607; // Component ID not registered. {$EXTERNALSYM ERROR_UNKNOWN_COMPONENT} ERROR_UNKNOWN_PROPERTY = 1608; // Unknown property. {$EXTERNALSYM ERROR_UNKNOWN_PROPERTY} ERROR_INVALID_HANDLE_STATE = 1609; // Handle is in an invalid state. {$EXTERNALSYM ERROR_INVALID_HANDLE_STATE} ERROR_BAD_CONFIGURATION = 1610; // The configuration data for this product is corrupt. Contact your support personnel. {$EXTERNALSYM ERROR_BAD_CONFIGURATION} ERROR_INDEX_ABSENT = 1611; // Component qualifier not present. {$EXTERNALSYM ERROR_INDEX_ABSENT} ERROR_INSTALL_SOURCE_ABSENT = 1612; // The installation source for this product is not available. Verify that the source exists and that you can access it. {$EXTERNALSYM ERROR_INSTALL_SOURCE_ABSENT} ERROR_PRODUCT_UNINSTALLED = 1614; // Product is uninstalled. {$EXTERNALSYM ERROR_PRODUCT_UNINSTALLED} ERROR_BAD_QUERY_SYNTAX = 1615; // SQL query syntax invalid or unsupported. {$EXTERNALSYM ERROR_BAD_QUERY_SYNTAX} ERROR_INVALID_FIELD = 1616; // Record field does not exist. {$EXTERNALSYM ERROR_INVALID_FIELD} ERROR_INSTALL_SERVICE_FAILURE = 1601; // The Windows Installer service could not be accessed. Contact your support personnel to verify that the Windows Installer service is properly registered. {$EXTERNALSYM ERROR_INSTALL_SERVICE_FAILURE} ERROR_INSTALL_PACKAGE_VERSION = 1613; // This installation package cannot be installed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service. {$EXTERNALSYM ERROR_INSTALL_PACKAGE_VERSION} ERROR_INSTALL_ALREADY_RUNNING = 1618; // Another installation is already in progress. Complete that installation before proceeding with this install. {$EXTERNALSYM ERROR_INSTALL_ALREADY_RUNNING} ERROR_INSTALL_PACKAGE_OPEN_FAILED = 1619; // This installation package could not be opened. Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package. {$EXTERNALSYM ERROR_INSTALL_PACKAGE_OPEN_FAILED} ERROR_INSTALL_PACKAGE_INVALID = 1620; // This installation package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer package. {$EXTERNALSYM ERROR_INSTALL_PACKAGE_INVALID} ERROR_INSTALL_UI_FAILURE = 1621; // There was an error starting the Windows Installer service user interface. Contact your support personnel. {$EXTERNALSYM ERROR_INSTALL_UI_FAILURE} ERROR_INSTALL_LOG_FAILURE = 1622; // Error opening installation log file. Verify that the specified log file location exists and is writable. {$EXTERNALSYM ERROR_INSTALL_LOG_FAILURE} ERROR_INSTALL_LANGUAGE_UNSUPPORTED = 1623; // This language of this installation package is not supported by your system. {$EXTERNALSYM ERROR_INSTALL_LANGUAGE_UNSUPPORTED} ERROR_INSTALL_PACKAGE_REJECTED = 1625; // The system administrator has set policies to prevent this installation. {$EXTERNALSYM ERROR_INSTALL_PACKAGE_REJECTED} ERROR_FUNCTION_NOT_CALLED = 1626; // Function could not be executed. {$EXTERNALSYM ERROR_FUNCTION_NOT_CALLED} ERROR_FUNCTION_FAILED = 1627; // Function failed during execution. {$EXTERNALSYM ERROR_FUNCTION_FAILED} ERROR_INVALID_TABLE = 1628; // Invalid or unknown table specified. {$EXTERNALSYM ERROR_INVALID_TABLE} ERROR_DATATYPE_MISMATCH = 1629; // Data supplied is of wrong type. {$EXTERNALSYM ERROR_DATATYPE_MISMATCH} ERROR_UNSUPPORTED_TYPE = 1630; // Data of this type is not supported. {$EXTERNALSYM ERROR_UNSUPPORTED_TYPE} ERROR_CREATE_FAILED = 1631; // The Windows Installer service failed to start. Contact your support personnel. {$EXTERNALSYM ERROR_CREATE_FAILED} ERROR_INSTALL_TEMP_UNWRITABLE = 1632; // The Temp folder is on a drive that is full or is inaccessible. Free up space on the drive or verify that you have write permission on the Temp folder. {$EXTERNALSYM ERROR_INSTALL_TEMP_UNWRITABLE} ERROR_INSTALL_PLATFORM_UNSUPPORTED = 1633; // This installation package is not supported by this processor type. Contact your product vendor. {$EXTERNALSYM ERROR_INSTALL_PLATFORM_UNSUPPORTED} ERROR_INSTALL_NOTUSED = 1634; // Component not used on this machine {$EXTERNALSYM ERROR_INSTALL_NOTUSED} ERROR_INSTALL_TRANSFORM_FAILURE = 1624; // Error applying transforms. Verify that the specified transform paths are valid. {$EXTERNALSYM ERROR_INSTALL_TRANSFORM_FAILURE} ERROR_PATCH_PACKAGE_OPEN_FAILED = 1635; // This patch package could not be opened. Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package. {$EXTERNALSYM ERROR_PATCH_PACKAGE_OPEN_FAILED} ERROR_PATCH_PACKAGE_INVALID = 1636; // This patch package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer patch package. {$EXTERNALSYM ERROR_PATCH_PACKAGE_INVALID} ERROR_PATCH_PACKAGE_UNSUPPORTED = 1637; // This patch package cannot be processed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service. {$EXTERNALSYM ERROR_PATCH_PACKAGE_UNSUPPORTED} ERROR_PRODUCT_VERSION = 1638; // Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel. {$EXTERNALSYM ERROR_PRODUCT_VERSION} ERROR_INVALID_COMMAND_LINE = 1639; // Invalid command line argument. Consult the Windows Installer SDK for detailed command line help. {$EXTERNALSYM ERROR_INVALID_COMMAND_LINE} // The following three error codes are not returned from MSI version 1.0 ERROR_INSTALL_REMOTE_DISALLOWED = 1640; // Configuration of this product is not permitted from remote sessions. Contact your administrator. {$EXTERNALSYM ERROR_INSTALL_REMOTE_DISALLOWED} ERROR_SUCCESS_REBOOT_INITIATED = 1641; // The requested operation completed successfully. The system will be restarted so the changes can take effect. {$EXTERNALSYM ERROR_SUCCESS_REBOOT_INITIATED} ERROR_PATCH_TARGET_NOT_FOUND = 1642; // The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch. {$EXTERNALSYM ERROR_PATCH_TARGET_NOT_FOUND} // The following two error codes are not returned from MSI version 1.0, 1.1. or 1.2 ERROR_PATCH_PACKAGE_REJECTED = 1643; // The patch package is not permitted by software restriction policy. {$EXTERNALSYM ERROR_PATCH_PACKAGE_REJECTED} ERROR_INSTALL_TRANSFORM_REJECTED = 1644; // One or more customizations are not permitted by software restriction policy. {$EXTERNALSYM ERROR_INSTALL_TRANSFORM_REJECTED} // The following error code is returned only from MSI post version 2.0 // LOCALIZE BEGIN: //#ifndef ERROR_INSTALL_REMOTE_PROHIBITED ERROR_INSTALL_REMOTE_PROHIBITED = 1645; // The Windows Installer does not permit installation from a Remote Desktop Connection. {$EXTERNALSYM ERROR_INSTALL_REMOTE_PROHIBITED} //#endif {$ENDIF JWA_INCLUDEMODE} // LOCALIZE END {$ENDIF JWA_IMPLEMENTATIONSECTION} {$IFNDEF JWA_OMIT_SECTIONS} implementation //uses ... {$ENDIF JWA_OMIT_SECTIONS} {$IFNDEF JWA_INTERFACESECTION} {$IFNDEF JWA_INCLUDEMODE} const msilib = 'msi.dll'; {$IFDEF UNICODE} AWSuffix = 'W'; {$ELSE} AWSuffix = 'A'; {$ENDIF UNICODE} {$ENDIF JWA_INCLUDEMODE} {$IFDEF DYNAMIC_LINK} var _MsiCloseHandle: Pointer; function MsiCloseHandle; begin GetProcedureAddress(_MsiCloseHandle, msilib, 'MsiCloseHandle'); asm MOV ESP, EBP POP EBP JMP [_MsiCloseHandle] end; end; var _MsiCloseAllHandles: Pointer; function MsiCloseAllHandles; begin GetProcedureAddress(_MsiCloseAllHandles, msilib, 'MsiCloseAllHandles'); asm MOV ESP, EBP POP EBP JMP [_MsiCloseAllHandles] end; end; var _MsiSetInternalUI: Pointer; function MsiSetInternalUI; begin GetProcedureAddress(_MsiSetInternalUI, msilib, 'MsiSetInternalUI'); asm MOV ESP, EBP POP EBP JMP [_MsiSetInternalUI] end; end; var _MsiSetExternalUIA: Pointer; function MsiSetExternalUIA; begin GetProcedureAddress(_MsiSetExternalUIA, msilib, 'MsiSetExternalUIA'); asm MOV ESP, EBP POP EBP JMP [_MsiSetExternalUIA] end; end; var _MsiSetExternalUIW: Pointer; function MsiSetExternalUIW; begin GetProcedureAddress(_MsiSetExternalUIW, msilib, 'MsiSetExternalUIW'); asm MOV ESP, EBP POP EBP JMP [_MsiSetExternalUIW] end; end; var _MsiSetExternalUI: Pointer; function MsiSetExternalUI; begin GetProcedureAddress(_MsiSetExternalUI, msilib, 'MsiSetExternalUI' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiSetExternalUI] end; end; var _MsiEnableLogA: Pointer; function MsiEnableLogA; begin GetProcedureAddress(_MsiEnableLogA, msilib, 'MsiEnableLogA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnableLogA] end; end; var _MsiEnableLogW: Pointer; function MsiEnableLogW; begin GetProcedureAddress(_MsiEnableLogW, msilib, 'MsiEnableLogW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnableLogW] end; end; var _MsiEnableLog: Pointer; function MsiEnableLog; begin GetProcedureAddress(_MsiEnableLog, msilib, 'MsiEnableLog' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnableLog] end; end; var _MsiQueryProductStateA: Pointer; function MsiQueryProductStateA; begin GetProcedureAddress(_MsiQueryProductStateA, msilib, 'MsiQueryProductStateA'); asm MOV ESP, EBP POP EBP JMP [_MsiQueryProductStateA] end; end; var _MsiQueryProductStateW: Pointer; function MsiQueryProductStateW; begin GetProcedureAddress(_MsiQueryProductStateW, msilib, 'MsiQueryProductStateW'); asm MOV ESP, EBP POP EBP JMP [_MsiQueryProductStateW] end; end; var _MsiQueryProductState: Pointer; function MsiQueryProductState; begin GetProcedureAddress(_MsiQueryProductState, msilib, 'MsiQueryProductState' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiQueryProductState] end; end; var _MsiGetProductInfoA: Pointer; function MsiGetProductInfoA; begin GetProcedureAddress(_MsiGetProductInfoA, msilib, 'MsiGetProductInfoA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductInfoA] end; end; var _MsiGetProductInfoW: Pointer; function MsiGetProductInfoW; begin GetProcedureAddress(_MsiGetProductInfoW, msilib, 'MsiGetProductInfoW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductInfoW] end; end; var _MsiGetProductInfo: Pointer; function MsiGetProductInfo; begin GetProcedureAddress(_MsiGetProductInfo, msilib, 'MsiGetProductInfo' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductInfo] end; end; var _MsiInstallProductA: Pointer; function MsiInstallProductA; begin GetProcedureAddress(_MsiInstallProductA, msilib, 'MsiInstallProductA'); asm MOV ESP, EBP POP EBP JMP [_MsiInstallProductA] end; end; var _MsiInstallProductW: Pointer; function MsiInstallProductW; begin GetProcedureAddress(_MsiInstallProductW, msilib, 'MsiInstallProductW'); asm MOV ESP, EBP POP EBP JMP [_MsiInstallProductW] end; end; var _MsiInstallProduct: Pointer; function MsiInstallProduct; begin GetProcedureAddress(_MsiInstallProduct, msilib, 'MsiInstallProduct' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiInstallProduct] end; end; var _MsiConfigureProductA: Pointer; function MsiConfigureProductA; begin GetProcedureAddress(_MsiConfigureProductA, msilib, 'MsiConfigureProductA'); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureProductA] end; end; var _MsiConfigureProductW: Pointer; function MsiConfigureProductW; begin GetProcedureAddress(_MsiConfigureProductW, msilib, 'MsiConfigureProductW'); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureProductW] end; end; var _MsiConfigureProduct: Pointer; function MsiConfigureProduct; begin GetProcedureAddress(_MsiConfigureProduct, msilib, 'MsiConfigureProduct' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureProduct] end; end; var _MsiConfigureProductExA: Pointer; function MsiConfigureProductExA; begin GetProcedureAddress(_MsiConfigureProductExA, msilib, 'MsiConfigureProductExA'); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureProductExA] end; end; var _MsiConfigureProductExW: Pointer; function MsiConfigureProductExW; begin GetProcedureAddress(_MsiConfigureProductExW, msilib, 'MsiConfigureProductExW'); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureProductExW] end; end; var _MsiConfigureProductEx: Pointer; function MsiConfigureProductEx; begin GetProcedureAddress(_MsiConfigureProductEx, msilib, 'MsiConfigureProductEx' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureProductEx] end; end; var _MsiReinstallProductA: Pointer; function MsiReinstallProductA; begin GetProcedureAddress(_MsiReinstallProductA, msilib, 'MsiReinstallProductA'); asm MOV ESP, EBP POP EBP JMP [_MsiReinstallProductA] end; end; var _MsiReinstallProductW: Pointer; function MsiReinstallProductW; begin GetProcedureAddress(_MsiReinstallProductW, msilib, 'MsiReinstallProductW'); asm MOV ESP, EBP POP EBP JMP [_MsiReinstallProductW] end; end; var _MsiReinstallProduct: Pointer; function MsiReinstallProduct; begin GetProcedureAddress(_MsiReinstallProduct, msilib, 'MsiReinstallProduct' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiReinstallProduct] end; end; var _MsiAdvertiseProductExA: Pointer; function MsiAdvertiseProductExA; begin GetProcedureAddress(_MsiAdvertiseProductExA, msilib, 'MsiAdvertiseProductExA'); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseProductExA] end; end; var _MsiAdvertiseProductExW: Pointer; function MsiAdvertiseProductExW; begin GetProcedureAddress(_MsiAdvertiseProductExW, msilib, 'MsiAdvertiseProductExW'); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseProductExW] end; end; var _MsiAdvertiseProductEx: Pointer; function MsiAdvertiseProductEx; begin GetProcedureAddress(_MsiAdvertiseProductEx, msilib, 'MsiAdvertiseProductEx' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseProductEx] end; end; var _MsiAdvertiseProductA: Pointer; function MsiAdvertiseProductA; begin GetProcedureAddress(_MsiAdvertiseProductA, msilib, 'MsiAdvertiseProductA'); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseProductA] end; end; var _MsiAdvertiseProductW: Pointer; function MsiAdvertiseProductW; begin GetProcedureAddress(_MsiAdvertiseProductW, msilib, 'MsiAdvertiseProductW'); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseProductW] end; end; var _MsiAdvertiseProduct: Pointer; function MsiAdvertiseProduct; begin GetProcedureAddress(_MsiAdvertiseProduct, msilib, 'MsiAdvertiseProduct' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseProduct] end; end; var _MsiProcessAdvertiseScriptA: Pointer; function MsiProcessAdvertiseScriptA; begin GetProcedureAddress(_MsiProcessAdvertiseScriptA, msilib, 'MsiProcessAdvertiseScriptA'); asm MOV ESP, EBP POP EBP JMP [_MsiProcessAdvertiseScriptA] end; end; var _MsiProcessAdvertiseScriptW: Pointer; function MsiProcessAdvertiseScriptW; begin GetProcedureAddress(_MsiProcessAdvertiseScriptW, msilib, 'MsiProcessAdvertiseScriptW'); asm MOV ESP, EBP POP EBP JMP [_MsiProcessAdvertiseScriptW] end; end; var _MsiProcessAdvertiseScript: Pointer; function MsiProcessAdvertiseScript; begin GetProcedureAddress(_MsiProcessAdvertiseScript, msilib, 'MsiProcessAdvertiseScript' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiProcessAdvertiseScript] end; end; var _MsiAdvertiseScriptA: Pointer; function MsiAdvertiseScriptA; begin GetProcedureAddress(_MsiAdvertiseScriptA, msilib, 'MsiAdvertiseScriptA'); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseScriptA] end; end; var _MsiAdvertiseScriptW: Pointer; function MsiAdvertiseScriptW; begin GetProcedureAddress(_MsiAdvertiseScriptW, msilib, 'MsiAdvertiseScriptW'); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseScriptW] end; end; var _MsiAdvertiseScript: Pointer; function MsiAdvertiseScript; begin GetProcedureAddress(_MsiAdvertiseScript, msilib, 'MsiAdvertiseScript' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiAdvertiseScript] end; end; var _MsiGetProductInfoFromScriptA: Pointer; function MsiGetProductInfoFromScriptA; begin GetProcedureAddress(_MsiGetProductInfoFromScriptA, msilib, 'MsiGetProductInfoFromScriptA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductInfoFromScriptA] end; end; var _MsiGetProductInfoFromScriptW: Pointer; function MsiGetProductInfoFromScriptW; begin GetProcedureAddress(_MsiGetProductInfoFromScriptW, msilib, 'MsiGetProductInfoFromScriptW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductInfoFromScriptW] end; end; var _MsiGetProductInfoFromScript: Pointer; function MsiGetProductInfoFromScript; begin GetProcedureAddress(_MsiGetProductInfoFromScript, msilib, 'MsiGetProductInfoFromScript' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductInfoFromScript] end; end; var _MsiGetProductCodeA: Pointer; function MsiGetProductCodeA; begin GetProcedureAddress(_MsiGetProductCodeA, msilib, 'MsiGetProductCodeA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductCodeA] end; end; var _MsiGetProductCodeW: Pointer; function MsiGetProductCodeW; begin GetProcedureAddress(_MsiGetProductCodeW, msilib, 'MsiGetProductCodeW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductCodeW] end; end; var _MsiGetProductCode: Pointer; function MsiGetProductCode; begin GetProcedureAddress(_MsiGetProductCode, msilib, 'MsiGetProductCode' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductCode] end; end; var _MsiGetUserInfoA: Pointer; function MsiGetUserInfoA; begin GetProcedureAddress(_MsiGetUserInfoA, msilib, 'MsiGetUserInfoA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetUserInfoA] end; end; var _MsiGetUserInfoW: Pointer; function MsiGetUserInfoW; begin GetProcedureAddress(_MsiGetUserInfoW, msilib, 'MsiGetUserInfoW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetUserInfoW] end; end; var _MsiGetUserInfo: Pointer; function MsiGetUserInfo; begin GetProcedureAddress(_MsiGetUserInfo, msilib, 'MsiGetUserInfo' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetUserInfo] end; end; var _MsiCollectUserInfoA: Pointer; function MsiCollectUserInfoA; begin GetProcedureAddress(_MsiCollectUserInfoA, msilib, 'MsiCollectUserInfoA'); asm MOV ESP, EBP POP EBP JMP [_MsiCollectUserInfoA] end; end; var _MsiCollectUserInfoW: Pointer; function MsiCollectUserInfoW; begin GetProcedureAddress(_MsiCollectUserInfoW, msilib, 'MsiCollectUserInfoW'); asm MOV ESP, EBP POP EBP JMP [_MsiCollectUserInfoW] end; end; var _MsiCollectUserInfo: Pointer; function MsiCollectUserInfo; begin GetProcedureAddress(_MsiCollectUserInfo, msilib, 'MsiCollectUserInfo' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiCollectUserInfo] end; end; var _MsiApplyPatchA: Pointer; function MsiApplyPatchA; begin GetProcedureAddress(_MsiApplyPatchA, msilib, 'MsiApplyPatchA'); asm MOV ESP, EBP POP EBP JMP [_MsiApplyPatchA] end; end; var _MsiApplyPatchW: Pointer; function MsiApplyPatchW; begin GetProcedureAddress(_MsiApplyPatchW, msilib, 'MsiApplyPatchW'); asm MOV ESP, EBP POP EBP JMP [_MsiApplyPatchW] end; end; var _MsiApplyPatch: Pointer; function MsiApplyPatch; begin GetProcedureAddress(_MsiApplyPatch, msilib, 'MsiApplyPatch' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiApplyPatch] end; end; var _MsiGetPatchInfoA: Pointer; function MsiGetPatchInfoA; begin GetProcedureAddress(_MsiGetPatchInfoA, msilib, 'MsiGetPatchInfoA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetPatchInfoA] end; end; var _MsiGetPatchInfoW: Pointer; function MsiGetPatchInfoW; begin GetProcedureAddress(_MsiGetPatchInfoW, msilib, 'MsiGetPatchInfoW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetPatchInfoW] end; end; var _MsiGetPatchInfo: Pointer; function MsiGetPatchInfo; begin GetProcedureAddress(_MsiGetPatchInfo, msilib, 'MsiGetPatchInfo' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetPatchInfo] end; end; var _MsiEnumPatchesA: Pointer; function MsiEnumPatchesA; begin GetProcedureAddress(_MsiEnumPatchesA, msilib, 'MsiEnumPatchesA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumPatchesA] end; end; var _MsiEnumPatchesW: Pointer; function MsiEnumPatchesW; begin GetProcedureAddress(_MsiEnumPatchesW, msilib, 'MsiEnumPatchesW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumPatchesW] end; end; var _MsiEnumPatches: Pointer; function MsiEnumPatches; begin GetProcedureAddress(_MsiEnumPatches, msilib, 'MsiEnumPatches' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumPatches] end; end; var _MsiQueryFeatureStateA: Pointer; function MsiQueryFeatureStateA; begin GetProcedureAddress(_MsiQueryFeatureStateA, msilib, 'MsiQueryFeatureStateA'); asm MOV ESP, EBP POP EBP JMP [_MsiQueryFeatureStateA] end; end; var _MsiQueryFeatureStateW: Pointer; function MsiQueryFeatureStateW; begin GetProcedureAddress(_MsiQueryFeatureStateW, msilib, 'MsiQueryFeatureStateW'); asm MOV ESP, EBP POP EBP JMP [_MsiQueryFeatureStateW] end; end; var _MsiQueryFeatureState: Pointer; function MsiQueryFeatureState; begin GetProcedureAddress(_MsiQueryFeatureState, msilib, 'MsiQueryFeatureState' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiQueryFeatureState] end; end; var _MsiUseFeatureA: Pointer; function MsiUseFeatureA; begin GetProcedureAddress(_MsiUseFeatureA, msilib, 'MsiUseFeatureA'); asm MOV ESP, EBP POP EBP JMP [_MsiUseFeatureA] end; end; var _MsiUseFeatureW: Pointer; function MsiUseFeatureW; begin GetProcedureAddress(_MsiUseFeatureW, msilib, 'MsiUseFeatureW'); asm MOV ESP, EBP POP EBP JMP [_MsiUseFeatureW] end; end; var _MsiUseFeature: Pointer; function MsiUseFeature; begin GetProcedureAddress(_MsiUseFeature, msilib, 'MsiUseFeature' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiUseFeature] end; end; var _MsiUseFeatureExA: Pointer; function MsiUseFeatureExA; begin GetProcedureAddress(_MsiUseFeatureExA, msilib, 'MsiUseFeatureExA'); asm MOV ESP, EBP POP EBP JMP [_MsiUseFeatureExA] end; end; var _MsiUseFeatureExW: Pointer; function MsiUseFeatureExW; begin GetProcedureAddress(_MsiUseFeatureExW, msilib, 'MsiUseFeatureExW'); asm MOV ESP, EBP POP EBP JMP [_MsiUseFeatureExW] end; end; var _MsiUseFeatureEx: Pointer; function MsiUseFeatureEx; begin GetProcedureAddress(_MsiUseFeatureEx, msilib, 'MsiUseFeatureEx' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiUseFeatureEx] end; end; var _MsiGetFeatureUsageA: Pointer; function MsiGetFeatureUsageA; begin GetProcedureAddress(_MsiGetFeatureUsageA, msilib, 'MsiGetFeatureUsageA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFeatureUsageA] end; end; var _MsiGetFeatureUsageW: Pointer; function MsiGetFeatureUsageW; begin GetProcedureAddress(_MsiGetFeatureUsageW, msilib, 'MsiGetFeatureUsageW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFeatureUsageW] end; end; var _MsiGetFeatureUsage: Pointer; function MsiGetFeatureUsage; begin GetProcedureAddress(_MsiGetFeatureUsage, msilib, 'MsiGetFeatureUsage' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetFeatureUsage] end; end; var _MsiConfigureFeatureA: Pointer; function MsiConfigureFeatureA; begin GetProcedureAddress(_MsiConfigureFeatureA, msilib, 'MsiConfigureFeatureA'); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureFeatureA] end; end; var _MsiConfigureFeatureW: Pointer; function MsiConfigureFeatureW; begin GetProcedureAddress(_MsiConfigureFeatureW, msilib, 'MsiConfigureFeatureW'); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureFeatureW] end; end; var _MsiConfigureFeature: Pointer; function MsiConfigureFeature; begin GetProcedureAddress(_MsiConfigureFeature, msilib, 'MsiConfigureFeature' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiConfigureFeature] end; end; var _MsiReinstallFeatureA: Pointer; function MsiReinstallFeatureA; begin GetProcedureAddress(_MsiReinstallFeatureA, msilib, 'MsiReinstallFeatureA'); asm MOV ESP, EBP POP EBP JMP [_MsiReinstallFeatureA] end; end; var _MsiReinstallFeatureW: Pointer; function MsiReinstallFeatureW; begin GetProcedureAddress(_MsiReinstallFeatureW, msilib, 'MsiReinstallFeatureW'); asm MOV ESP, EBP POP EBP JMP [_MsiReinstallFeatureW] end; end; var _MsiReinstallFeature: Pointer; function MsiReinstallFeature; begin GetProcedureAddress(_MsiReinstallFeature, msilib, 'MsiReinstallFeature' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiReinstallFeature] end; end; var _MsiProvideComponentA: Pointer; function MsiProvideComponentA; begin GetProcedureAddress(_MsiProvideComponentA, msilib, 'MsiProvideComponentA'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideComponentA] end; end; var _MsiProvideComponentW: Pointer; function MsiProvideComponentW; begin GetProcedureAddress(_MsiProvideComponentW, msilib, 'MsiProvideComponentW'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideComponentW] end; end; var _MsiProvideComponent: Pointer; function MsiProvideComponent; begin GetProcedureAddress(_MsiProvideComponent, msilib, 'MsiProvideComponent' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiProvideComponent] end; end; var _MsiProvideQualifiedComponentA: Pointer; function MsiProvideQualifiedComponentA; begin GetProcedureAddress(_MsiProvideQualifiedComponentA, msilib, 'MsiProvideQualifiedComponentA'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideQualifiedComponentA] end; end; var _MsiProvideQualifiedComponentW: Pointer; function MsiProvideQualifiedComponentW; begin GetProcedureAddress(_MsiProvideQualifiedComponentW, msilib, 'MsiProvideQualifiedComponentW'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideQualifiedComponentW] end; end; var _MsiProvideQualifiedComponent: Pointer; function MsiProvideQualifiedComponent; begin GetProcedureAddress(_MsiProvideQualifiedComponent, msilib, 'MsiProvideQualifiedComponent' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiProvideQualifiedComponent] end; end; var _MsiProvideQualifiedComponentExA: Pointer; function MsiProvideQualifiedComponentExA; begin GetProcedureAddress(_MsiProvideQualifiedComponentExA, msilib, 'MsiProvideQualifiedComponentExA'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideQualifiedComponentExA] end; end; var _MsiProvideQualifiedComponentExW: Pointer; function MsiProvideQualifiedComponentExW; begin GetProcedureAddress(_MsiProvideQualifiedComponentExW, msilib, 'MsiProvideQualifiedComponentExW'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideQualifiedComponentExW] end; end; var _MsiProvideQualifiedComponentEx: Pointer; function MsiProvideQualifiedComponentEx; begin GetProcedureAddress(_MsiProvideQualifiedComponentEx, msilib, 'MsiProvideQualifiedComponentEx' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiProvideQualifiedComponentEx] end; end; var _MsiGetComponentPathA: Pointer; function MsiGetComponentPathA; begin GetProcedureAddress(_MsiGetComponentPathA, msilib, 'MsiGetComponentPathA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetComponentPathA] end; end; var _MsiGetComponentPathW: Pointer; function MsiGetComponentPathW; begin GetProcedureAddress(_MsiGetComponentPathW, msilib, 'MsiGetComponentPathW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetComponentPathW] end; end; var _MsiGetComponentPath: Pointer; function MsiGetComponentPath; begin GetProcedureAddress(_MsiGetComponentPath, msilib, 'MsiGetComponentPath' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetComponentPath] end; end; var _MsiProvideAssemblyA: Pointer; function MsiProvideAssemblyA; begin GetProcedureAddress(_MsiProvideAssemblyA, msilib, 'MsiProvideAssemblyA'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideAssemblyA] end; end; var _MsiProvideAssemblyW: Pointer; function MsiProvideAssemblyW; begin GetProcedureAddress(_MsiProvideAssemblyW, msilib, 'MsiProvideAssemblyW'); asm MOV ESP, EBP POP EBP JMP [_MsiProvideAssemblyW] end; end; var _MsiProvideAssembly: Pointer; function MsiProvideAssembly; begin GetProcedureAddress(_MsiProvideAssembly, msilib, 'MsiProvideAssembly' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiProvideAssembly] end; end; var _MsiEnumProductsA: Pointer; function MsiEnumProductsA; begin GetProcedureAddress(_MsiEnumProductsA, msilib, 'MsiEnumProductsA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumProductsA] end; end; var _MsiEnumProductsW: Pointer; function MsiEnumProductsW; begin GetProcedureAddress(_MsiEnumProductsW, msilib, 'MsiEnumProductsW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumProductsW] end; end; var _MsiEnumProducts: Pointer; function MsiEnumProducts; begin GetProcedureAddress(_MsiEnumProducts, msilib, 'MsiEnumProducts' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumProducts] end; end; {$IFDEF MSI110} var _MsiEnumRelatedProductsA: Pointer; function MsiEnumRelatedProductsA; begin GetProcedureAddress(_MsiEnumRelatedProductsA, msilib, 'MsiEnumRelatedProductsA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumRelatedProductsA] end; end; var _MsiEnumRelatedProductsW: Pointer; function MsiEnumRelatedProductsW; begin GetProcedureAddress(_MsiEnumRelatedProductsW, msilib, 'MsiEnumRelatedProductsW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumRelatedProductsW] end; end; var _MsiEnumRelatedProducts: Pointer; function MsiEnumRelatedProducts; begin GetProcedureAddress(_MsiEnumRelatedProducts, msilib, 'MsiEnumRelatedProducts' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumRelatedProducts] end; end; {$ENDIF MSI110} var _MsiEnumFeaturesA: Pointer; function MsiEnumFeaturesA; begin GetProcedureAddress(_MsiEnumFeaturesA, msilib, 'MsiEnumFeaturesA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumFeaturesA] end; end; var _MsiEnumFeaturesW: Pointer; function MsiEnumFeaturesW; begin GetProcedureAddress(_MsiEnumFeaturesW, msilib, 'MsiEnumFeaturesW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumFeaturesW] end; end; var _MsiEnumFeatures: Pointer; function MsiEnumFeatures; begin GetProcedureAddress(_MsiEnumFeatures, msilib, 'MsiEnumFeatures' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumFeatures] end; end; var _MsiEnumComponentsA: Pointer; function MsiEnumComponentsA; begin GetProcedureAddress(_MsiEnumComponentsA, msilib, 'MsiEnumComponentsA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumComponentsA] end; end; var _MsiEnumComponentsW: Pointer; function MsiEnumComponentsW; begin GetProcedureAddress(_MsiEnumComponentsW, msilib, 'MsiEnumComponentsW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumComponentsW] end; end; var _MsiEnumComponents: Pointer; function MsiEnumComponents; begin GetProcedureAddress(_MsiEnumComponents, msilib, 'MsiEnumComponents' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumComponents] end; end; var _MsiEnumClientsA: Pointer; function MsiEnumClientsA; begin GetProcedureAddress(_MsiEnumClientsA, msilib, 'MsiEnumClientsA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumClientsA] end; end; var _MsiEnumClientsW: Pointer; function MsiEnumClientsW; begin GetProcedureAddress(_MsiEnumClientsW, msilib, 'MsiEnumClientsW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumClientsW] end; end; var _MsiEnumClients: Pointer; function MsiEnumClients; begin GetProcedureAddress(_MsiEnumClients, msilib, 'MsiEnumClients' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumClients] end; end; var _MsiEnumComponentQualifiersA: Pointer; function MsiEnumComponentQualifiersA; begin GetProcedureAddress(_MsiEnumComponentQualifiersA, msilib, 'MsiEnumComponentQualifiersA'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumComponentQualifiersA] end; end; var _MsiEnumComponentQualifiersW: Pointer; function MsiEnumComponentQualifiersW; begin GetProcedureAddress(_MsiEnumComponentQualifiersW, msilib, 'MsiEnumComponentQualifiersW'); asm MOV ESP, EBP POP EBP JMP [_MsiEnumComponentQualifiersW] end; end; var _MsiEnumComponentQualifiers: Pointer; function MsiEnumComponentQualifiers; begin GetProcedureAddress(_MsiEnumComponentQualifiers, msilib, 'MsiEnumComponentQualifiers' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiEnumComponentQualifiers] end; end; var _MsiOpenProductA: Pointer; function MsiOpenProductA; begin GetProcedureAddress(_MsiOpenProductA, msilib, 'MsiOpenProductA'); asm MOV ESP, EBP POP EBP JMP [_MsiOpenProductA] end; end; var _MsiOpenProductW: Pointer; function MsiOpenProductW; begin GetProcedureAddress(_MsiOpenProductW, msilib, 'MsiOpenProductW'); asm MOV ESP, EBP POP EBP JMP [_MsiOpenProductW] end; end; var _MsiOpenProduct: Pointer; function MsiOpenProduct; begin GetProcedureAddress(_MsiOpenProduct, msilib, 'MsiOpenProduct' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiOpenProduct] end; end; var _MsiOpenPackageA: Pointer; function MsiOpenPackageA; begin GetProcedureAddress(_MsiOpenPackageA, msilib, 'MsiOpenPackageA'); asm MOV ESP, EBP POP EBP JMP [_MsiOpenPackageA] end; end; var _MsiOpenPackageW: Pointer; function MsiOpenPackageW; begin GetProcedureAddress(_MsiOpenPackageW, msilib, 'MsiOpenPackageW'); asm MOV ESP, EBP POP EBP JMP [_MsiOpenPackageW] end; end; var _MsiOpenPackage: Pointer; function MsiOpenPackage; begin GetProcedureAddress(_MsiOpenPackage, msilib, 'MsiOpenPackage' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiOpenPackage] end; end; var _MsiOpenPackageExA: Pointer; function MsiOpenPackageExA; begin GetProcedureAddress(_MsiOpenPackageExA, msilib, 'MsiOpenPackageExA'); asm MOV ESP, EBP POP EBP JMP [_MsiOpenPackageExA] end; end; var _MsiOpenPackageExW: Pointer; function MsiOpenPackageExW; begin GetProcedureAddress(_MsiOpenPackageExW, msilib, 'MsiOpenPackageExW'); asm MOV ESP, EBP POP EBP JMP [_MsiOpenPackageExW] end; end; var _MsiOpenPackageEx: Pointer; function MsiOpenPackageEx; begin GetProcedureAddress(_MsiOpenPackageEx, msilib, 'MsiOpenPackageEx' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiOpenPackageEx] end; end; var _MsiGetProductPropertyA: Pointer; function MsiGetProductPropertyA; begin GetProcedureAddress(_MsiGetProductPropertyA, msilib, 'MsiGetProductPropertyA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductPropertyA] end; end; var _MsiGetProductPropertyW: Pointer; function MsiGetProductPropertyW; begin GetProcedureAddress(_MsiGetProductPropertyW, msilib, 'MsiGetProductPropertyW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductPropertyW] end; end; var _MsiGetProductProperty: Pointer; function MsiGetProductProperty; begin GetProcedureAddress(_MsiGetProductProperty, msilib, 'MsiGetProductProperty' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetProductProperty] end; end; var _MsiVerifyPackageA: Pointer; function MsiVerifyPackageA; begin GetProcedureAddress(_MsiVerifyPackageA, msilib, 'MsiVerifyPackageA'); asm MOV ESP, EBP POP EBP JMP [_MsiVerifyPackageA] end; end; var _MsiVerifyPackageW: Pointer; function MsiVerifyPackageW; begin GetProcedureAddress(_MsiVerifyPackageW, msilib, 'MsiVerifyPackageW'); asm MOV ESP, EBP POP EBP JMP [_MsiVerifyPackageW] end; end; var _MsiVerifyPackage: Pointer; function MsiVerifyPackage; begin GetProcedureAddress(_MsiVerifyPackage, msilib, 'MsiVerifyPackage' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiVerifyPackage] end; end; var _MsiGetFeatureInfoA: Pointer; function MsiGetFeatureInfoA; begin GetProcedureAddress(_MsiGetFeatureInfoA, msilib, 'MsiGetFeatureInfoA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFeatureInfoA] end; end; var _MsiGetFeatureInfoW: Pointer; function MsiGetFeatureInfoW; begin GetProcedureAddress(_MsiGetFeatureInfoW, msilib, 'MsiGetFeatureInfoW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFeatureInfoW] end; end; var _MsiGetFeatureInfo: Pointer; function MsiGetFeatureInfo; begin GetProcedureAddress(_MsiGetFeatureInfo, msilib, 'MsiGetFeatureInfo' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetFeatureInfo] end; end; var _MsiInstallMissingComponentA: Pointer; function MsiInstallMissingComponentA; begin GetProcedureAddress(_MsiInstallMissingComponentA, msilib, 'MsiInstallMissingComponentA'); asm MOV ESP, EBP POP EBP JMP [_MsiInstallMissingComponentA] end; end; var _MsiInstallMissingComponentW: Pointer; function MsiInstallMissingComponentW; begin GetProcedureAddress(_MsiInstallMissingComponentW, msilib, 'MsiInstallMissingComponentW'); asm MOV ESP, EBP POP EBP JMP [_MsiInstallMissingComponentW] end; end; var _MsiInstallMissingComponent: Pointer; function MsiInstallMissingComponent; begin GetProcedureAddress(_MsiInstallMissingComponent, msilib, 'MsiInstallMissingComponent' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiInstallMissingComponent] end; end; var _MsiInstallMissingFileA: Pointer; function MsiInstallMissingFileA; begin GetProcedureAddress(_MsiInstallMissingFileA, msilib, 'MsiInstallMissingFileA'); asm MOV ESP, EBP POP EBP JMP [_MsiInstallMissingFileA] end; end; var _MsiInstallMissingFileW: Pointer; function MsiInstallMissingFileW; begin GetProcedureAddress(_MsiInstallMissingFileW, msilib, 'MsiInstallMissingFileW'); asm MOV ESP, EBP POP EBP JMP [_MsiInstallMissingFileW] end; end; var _MsiInstallMissingFile: Pointer; function MsiInstallMissingFile; begin GetProcedureAddress(_MsiInstallMissingFile, msilib, 'MsiInstallMissingFile' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiInstallMissingFile] end; end; var _MsiLocateComponentA: Pointer; function MsiLocateComponentA; begin GetProcedureAddress(_MsiLocateComponentA, msilib, 'MsiLocateComponentA'); asm MOV ESP, EBP POP EBP JMP [_MsiLocateComponentA] end; end; var _MsiLocateComponentW: Pointer; function MsiLocateComponentW; begin GetProcedureAddress(_MsiLocateComponentW, msilib, 'MsiLocateComponentW'); asm MOV ESP, EBP POP EBP JMP [_MsiLocateComponentW] end; end; var _MsiLocateComponent: Pointer; function MsiLocateComponent; begin GetProcedureAddress(_MsiLocateComponent, msilib, 'MsiLocateComponent' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiLocateComponent] end; end; {$IFDEF MSI110} var _MsiSourceListClearAllA: Pointer; function MsiSourceListClearAllA; begin GetProcedureAddress(_MsiSourceListClearAllA, msilib, 'MsiSourceListClearAllA'); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListClearAllA] end; end; var _MsiSourceListClearAllW: Pointer; function MsiSourceListClearAllW; begin GetProcedureAddress(_MsiSourceListClearAllW, msilib, 'MsiSourceListClearAllW'); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListClearAllW] end; end; var _MsiSourceListClearAll: Pointer; function MsiSourceListClearAll; begin GetProcedureAddress(_MsiSourceListClearAll, msilib, 'MsiSourceListClearAll' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListClearAll] end; end; var _MsiSourceListAddSourceA: Pointer; function MsiSourceListAddSourceA; begin GetProcedureAddress(_MsiSourceListAddSourceA, msilib, 'MsiSourceListAddSourceA'); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListAddSourceA] end; end; var _MsiSourceListAddSourceW: Pointer; function MsiSourceListAddSourceW; begin GetProcedureAddress(_MsiSourceListAddSourceW, msilib, 'MsiSourceListAddSourceW'); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListAddSourceW] end; end; var _MsiSourceListAddSource: Pointer; function MsiSourceListAddSource; begin GetProcedureAddress(_MsiSourceListAddSource, msilib, 'MsiSourceListAddSource' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListAddSource] end; end; var _MsiSourceListForceResolutionA: Pointer; function MsiSourceListForceResolutionA; begin GetProcedureAddress(_MsiSourceListForceResolutionA, msilib, 'MsiSourceListForceResolutionA'); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListForceResolutionA] end; end; var _MsiSourceListForceResolutionW: Pointer; function MsiSourceListForceResolutionW; begin GetProcedureAddress(_MsiSourceListForceResolutionW, msilib, 'MsiSourceListForceResolutionW'); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListForceResolutionW] end; end; var _MsiSourceListForceResolution: Pointer; function MsiSourceListForceResolution; begin GetProcedureAddress(_MsiSourceListForceResolution, msilib, 'MsiSourceListForceResolution' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiSourceListForceResolution] end; end; {$ENDIF MSI110} var _MsiGetFileVersionA: Pointer; function MsiGetFileVersionA; begin GetProcedureAddress(_MsiGetFileVersionA, msilib, 'MsiGetFileVersionA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileVersionA] end; end; var _MsiGetFileVersionW: Pointer; function MsiGetFileVersionW; begin GetProcedureAddress(_MsiGetFileVersionW, msilib, 'MsiGetFileVersionW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileVersionW] end; end; var _MsiGetFileVersion: Pointer; function MsiGetFileVersion; begin GetProcedureAddress(_MsiGetFileVersion, msilib, 'MsiGetFileVersion' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileVersion] end; end; var _MsiGetFileHashA: Pointer; function MsiGetFileHashA; begin GetProcedureAddress(_MsiGetFileHashA, msilib, 'MsiGetFileHashA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileHashA] end; end; var _MsiGetFileHashW: Pointer; function MsiGetFileHashW; begin GetProcedureAddress(_MsiGetFileHashW, msilib, 'MsiGetFileHashW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileHashW] end; end; var _MsiGetFileHash: Pointer; function MsiGetFileHash; begin GetProcedureAddress(_MsiGetFileHash, msilib, 'MsiGetFileHash' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileHash] end; end; var _MsiGetFileSignatureInformationA: Pointer; function MsiGetFileSignatureInformationA; begin GetProcedureAddress(_MsiGetFileSignatureInformationA, msilib, 'MsiGetFileSignatureInformationA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileSignatureInformationA] end; end; var _MsiGetFileSignatureInformationW: Pointer; function MsiGetFileSignatureInformationW; begin GetProcedureAddress(_MsiGetFileSignatureInformationW, msilib, 'MsiGetFileSignatureInformationW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileSignatureInformationW] end; end; var _MsiGetFileSignatureInformation: Pointer; function MsiGetFileSignatureInformation; begin GetProcedureAddress(_MsiGetFileSignatureInformation, msilib, 'MsiGetFileSignatureInformation' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetFileSignatureInformation] end; end; {$IFDEF MSI110} var _MsiGetShortcutTargetA: Pointer; function MsiGetShortcutTargetA; begin GetProcedureAddress(_MsiGetShortcutTargetA, msilib, 'MsiGetShortcutTargetA'); asm MOV ESP, EBP POP EBP JMP [_MsiGetShortcutTargetA] end; end; var _MsiGetShortcutTargetW: Pointer; function MsiGetShortcutTargetW; begin GetProcedureAddress(_MsiGetShortcutTargetW, msilib, 'MsiGetShortcutTargetW'); asm MOV ESP, EBP POP EBP JMP [_MsiGetShortcutTargetW] end; end; var _MsiGetShortcutTarget: Pointer; function MsiGetShortcutTarget; begin GetProcedureAddress(_MsiGetShortcutTarget, msilib, 'MsiGetShortcutTarget' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiGetShortcutTarget] end; end; {$ENDIF MSI110} var _MsiIsProductElevatedA: Pointer; function MsiIsProductElevatedA; begin GetProcedureAddress(_MsiIsProductElevatedA, msilib, 'MsiIsProductElevatedA'); asm MOV ESP, EBP POP EBP JMP [_MsiIsProductElevatedA] end; end; var _MsiIsProductElevatedW: Pointer; function MsiIsProductElevatedW; begin GetProcedureAddress(_MsiIsProductElevatedW, msilib, 'MsiIsProductElevatedW'); asm MOV ESP, EBP POP EBP JMP [_MsiIsProductElevatedW] end; end; var _MsiIsProductElevated: Pointer; function MsiIsProductElevated; begin GetProcedureAddress(_MsiIsProductElevated, msilib, 'MsiIsProductElevated' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MsiIsProductElevated] end; end; {$ELSE} function MsiCloseHandle; external msilib name 'MsiCloseHandle'; function MsiCloseAllHandles; external msilib name 'MsiCloseAllHandles'; function MsiSetInternalUI; external msilib name 'MsiSetInternalUI'; function MsiSetExternalUIA; external msilib name 'MsiSetExternalUIA'; function MsiSetExternalUIW; external msilib name 'MsiSetExternalUIW'; function MsiSetExternalUI; external msilib name 'MsiSetExternalUI' + AWSuffix; function MsiEnableLogA; external msilib name 'MsiEnableLogA'; function MsiEnableLogW; external msilib name 'MsiEnableLogW'; function MsiEnableLog; external msilib name 'MsiEnableLog' + AWSuffix; function MsiQueryProductStateA; external msilib name 'MsiQueryProductStateA'; function MsiQueryProductStateW; external msilib name 'MsiQueryProductStateW'; function MsiQueryProductState; external msilib name 'MsiQueryProductState' + AWSuffix; function MsiGetProductInfoA; external msilib name 'MsiGetProductInfoA'; function MsiGetProductInfoW; external msilib name 'MsiGetProductInfoW'; function MsiGetProductInfo; external msilib name 'MsiGetProductInfo' + AWSuffix; function MsiInstallProductA; external msilib name 'MsiInstallProductA'; function MsiInstallProductW; external msilib name 'MsiInstallProductW'; function MsiInstallProduct; external msilib name 'MsiInstallProduct' + AWSuffix; function MsiConfigureProductA; external msilib name 'MsiConfigureProductA'; function MsiConfigureProductW; external msilib name 'MsiConfigureProductW'; function MsiConfigureProduct; external msilib name 'MsiConfigureProduct' + AWSuffix; function MsiConfigureProductExA; external msilib name 'MsiConfigureProductExA'; function MsiConfigureProductExW; external msilib name 'MsiConfigureProductExW'; function MsiConfigureProductEx; external msilib name 'MsiConfigureProductEx' + AWSuffix; function MsiReinstallProductA; external msilib name 'MsiReinstallProductA'; function MsiReinstallProductW; external msilib name 'MsiReinstallProductW'; function MsiReinstallProduct; external msilib name 'MsiReinstallProduct' + AWSuffix; function MsiAdvertiseProductExA; external msilib name 'MsiAdvertiseProductExA'; function MsiAdvertiseProductExW; external msilib name 'MsiAdvertiseProductExW'; function MsiAdvertiseProductEx; external msilib name 'MsiAdvertiseProductEx' + AWSuffix; function MsiAdvertiseProductA; external msilib name 'MsiAdvertiseProductA'; function MsiAdvertiseProductW; external msilib name 'MsiAdvertiseProductW'; function MsiAdvertiseProduct; external msilib name 'MsiAdvertiseProduct' + AWSuffix; function MsiProcessAdvertiseScriptA; external msilib name 'MsiProcessAdvertiseScriptA'; function MsiProcessAdvertiseScriptW; external msilib name 'MsiProcessAdvertiseScriptW'; function MsiProcessAdvertiseScript; external msilib name 'MsiProcessAdvertiseScript' + AWSuffix; function MsiAdvertiseScriptA; external msilib name 'MsiAdvertiseScriptA'; function MsiAdvertiseScriptW; external msilib name 'MsiAdvertiseScriptW'; function MsiAdvertiseScript; external msilib name 'MsiAdvertiseScript' + AWSuffix; function MsiGetProductInfoFromScriptA; external msilib name 'MsiGetProductInfoFromScriptA'; function MsiGetProductInfoFromScriptW; external msilib name 'MsiGetProductInfoFromScriptW'; function MsiGetProductInfoFromScript; external msilib name 'MsiGetProductInfoFromScript' + AWSuffix; function MsiGetProductCodeA; external msilib name 'MsiGetProductCodeA'; function MsiGetProductCodeW; external msilib name 'MsiGetProductCodeW'; function MsiGetProductCode; external msilib name 'MsiGetProductCode' + AWSuffix; function MsiGetUserInfoA; external msilib name 'MsiGetUserInfoA'; function MsiGetUserInfoW; external msilib name 'MsiGetUserInfoW'; function MsiGetUserInfo; external msilib name 'MsiGetUserInfo' + AWSuffix; function MsiCollectUserInfoA; external msilib name 'MsiCollectUserInfoA'; function MsiCollectUserInfoW; external msilib name 'MsiCollectUserInfoW'; function MsiCollectUserInfo; external msilib name 'MsiCollectUserInfo' + AWSuffix; function MsiApplyPatchA; external msilib name 'MsiApplyPatchA'; function MsiApplyPatchW; external msilib name 'MsiApplyPatchW'; function MsiApplyPatch; external msilib name 'MsiApplyPatch' + AWSuffix; function MsiGetPatchInfoA; external msilib name 'MsiGetPatchInfoA'; function MsiGetPatchInfoW; external msilib name 'MsiGetPatchInfoW'; function MsiGetPatchInfo; external msilib name 'MsiGetPatchInfo' + AWSuffix; function MsiEnumPatchesA; external msilib name 'MsiEnumPatchesA'; function MsiEnumPatchesW; external msilib name 'MsiEnumPatchesW'; function MsiEnumPatches; external msilib name 'MsiEnumPatches' + AWSuffix; function MsiQueryFeatureStateA; external msilib name 'MsiQueryFeatureStateA'; function MsiQueryFeatureStateW; external msilib name 'MsiQueryFeatureStateW'; function MsiQueryFeatureState; external msilib name 'MsiQueryFeatureState' + AWSuffix; function MsiUseFeatureA; external msilib name 'MsiUseFeatureA'; function MsiUseFeatureW; external msilib name 'MsiUseFeatureW'; function MsiUseFeature; external msilib name 'MsiUseFeature' + AWSuffix; function MsiUseFeatureExA; external msilib name 'MsiUseFeatureExA'; function MsiUseFeatureExW; external msilib name 'MsiUseFeatureExW'; function MsiUseFeatureEx; external msilib name 'MsiUseFeatureEx' + AWSuffix; function MsiGetFeatureUsageA; external msilib name 'MsiGetFeatureUsageA'; function MsiGetFeatureUsageW; external msilib name 'MsiGetFeatureUsageW'; function MsiGetFeatureUsage; external msilib name 'MsiGetFeatureUsage' + AWSuffix; function MsiConfigureFeatureA; external msilib name 'MsiConfigureFeatureA'; function MsiConfigureFeatureW; external msilib name 'MsiConfigureFeatureW'; function MsiConfigureFeature; external msilib name 'MsiConfigureFeature' + AWSuffix; function MsiReinstallFeatureA; external msilib name 'MsiReinstallFeatureA'; function MsiReinstallFeatureW; external msilib name 'MsiReinstallFeatureW'; function MsiReinstallFeature; external msilib name 'MsiReinstallFeature' + AWSuffix; function MsiProvideComponentA; external msilib name 'MsiProvideComponentA'; function MsiProvideComponentW; external msilib name 'MsiProvideComponentW'; function MsiProvideComponent; external msilib name 'MsiProvideComponent' + AWSuffix; function MsiProvideQualifiedComponentA; external msilib name 'MsiProvideQualifiedComponentA'; function MsiProvideQualifiedComponentW; external msilib name 'MsiProvideQualifiedComponentW'; function MsiProvideQualifiedComponent; external msilib name 'MsiProvideQualifiedComponent' + AWSuffix; function MsiProvideQualifiedComponentExA; external msilib name 'MsiProvideQualifiedComponentExA'; function MsiProvideQualifiedComponentExW; external msilib name 'MsiProvideQualifiedComponentExW'; function MsiProvideQualifiedComponentEx; external msilib name 'MsiProvideQualifiedComponentEx' + AWSuffix; function MsiGetComponentPathA; external msilib name 'MsiGetComponentPathA'; function MsiGetComponentPathW; external msilib name 'MsiGetComponentPathW'; function MsiGetComponentPath; external msilib name 'MsiGetComponentPath' + AWSuffix; function MsiProvideAssemblyA; external msilib name 'MsiProvideAssemblyA'; function MsiProvideAssemblyW; external msilib name 'MsiProvideAssemblyW'; function MsiProvideAssembly; external msilib name 'MsiProvideAssembly' + AWSuffix; function MsiEnumProductsA; external msilib name 'MsiEnumProductsA'; function MsiEnumProductsW; external msilib name 'MsiEnumProductsW'; function MsiEnumProducts; external msilib name 'MsiEnumProducts' + AWSuffix; {$IFDEF MSI110} function MsiEnumRelatedProductsA; external msilib name 'MsiEnumRelatedProductsA'; function MsiEnumRelatedProductsW; external msilib name 'MsiEnumRelatedProductsW'; function MsiEnumRelatedProducts; external msilib name 'MsiEnumRelatedProducts' + AWSuffix; {$ENDIF MSI110} function MsiEnumFeaturesA; external msilib name 'MsiEnumFeaturesA'; function MsiEnumFeaturesW; external msilib name 'MsiEnumFeaturesW'; function MsiEnumFeatures; external msilib name 'MsiEnumFeatures' + AWSuffix; function MsiEnumComponentsA; external msilib name 'MsiEnumComponentsA'; function MsiEnumComponentsW; external msilib name 'MsiEnumComponentsW'; function MsiEnumComponents; external msilib name 'MsiEnumComponents' + AWSuffix; function MsiEnumClientsA; external msilib name 'MsiEnumClientsA'; function MsiEnumClientsW; external msilib name 'MsiEnumClientsW'; function MsiEnumClients; external msilib name 'MsiEnumClients' + AWSuffix; function MsiEnumComponentQualifiersA; external msilib name 'MsiEnumComponentQualifiersA'; function MsiEnumComponentQualifiersW; external msilib name 'MsiEnumComponentQualifiersW'; function MsiEnumComponentQualifiers; external msilib name 'MsiEnumComponentQualifiers' + AWSuffix; function MsiOpenProductA; external msilib name 'MsiOpenProductA'; function MsiOpenProductW; external msilib name 'MsiOpenProductW'; function MsiOpenProduct; external msilib name 'MsiOpenProduct' + AWSuffix; function MsiOpenPackageA; external msilib name 'MsiOpenPackageA'; function MsiOpenPackageW; external msilib name 'MsiOpenPackageW'; function MsiOpenPackage; external msilib name 'MsiOpenPackage' + AWSuffix; function MsiOpenPackageExA; external msilib name 'MsiOpenPackageExA'; function MsiOpenPackageExW; external msilib name 'MsiOpenPackageExW'; function MsiOpenPackageEx; external msilib name 'MsiOpenPackageEx' + AWSuffix; function MsiGetProductPropertyA; external msilib name 'MsiGetProductPropertyA'; function MsiGetProductPropertyW; external msilib name 'MsiGetProductPropertyW'; function MsiGetProductProperty; external msilib name 'MsiGetProductProperty' + AWSuffix; function MsiVerifyPackageA; external msilib name 'MsiVerifyPackageA'; function MsiVerifyPackageW; external msilib name 'MsiVerifyPackageW'; function MsiVerifyPackage; external msilib name 'MsiVerifyPackage' + AWSuffix; function MsiGetFeatureInfoA; external msilib name 'MsiGetFeatureInfoA'; function MsiGetFeatureInfoW; external msilib name 'MsiGetFeatureInfoW'; function MsiGetFeatureInfo; external msilib name 'MsiGetFeatureInfo' + AWSuffix; function MsiInstallMissingComponentA; external msilib name 'MsiInstallMissingComponentA'; function MsiInstallMissingComponentW; external msilib name 'MsiInstallMissingComponentW'; function MsiInstallMissingComponent; external msilib name 'MsiInstallMissingComponent' + AWSuffix; function MsiInstallMissingFileA; external msilib name 'MsiInstallMissingFileA'; function MsiInstallMissingFileW; external msilib name 'MsiInstallMissingFileW'; function MsiInstallMissingFile; external msilib name 'MsiInstallMissingFile' + AWSuffix; function MsiLocateComponentA; external msilib name 'MsiLocateComponentA'; function MsiLocateComponentW; external msilib name 'MsiLocateComponentW'; function MsiLocateComponent; external msilib name 'MsiLocateComponent' + AWSuffix; {$IFDEF MSI110} function MsiSourceListClearAllA; external msilib name 'MsiSourceListClearAllA'; function MsiSourceListClearAllW; external msilib name 'MsiSourceListClearAllW'; function MsiSourceListClearAll; external msilib name 'MsiSourceListClearAll' + AWSuffix; function MsiSourceListAddSourceA; external msilib name 'MsiSourceListAddSourceA'; function MsiSourceListAddSourceW; external msilib name 'MsiSourceListAddSourceW'; function MsiSourceListAddSource; external msilib name 'MsiSourceListAddSource' + AWSuffix; function MsiSourceListForceResolutionA; external msilib name 'MsiSourceListForceResolutionA'; function MsiSourceListForceResolutionW; external msilib name 'MsiSourceListForceResolutionW'; function MsiSourceListForceResolution; external msilib name 'MsiSourceListForceResolution' + AWSuffix; {$ENDIF MSI110} function MsiGetFileVersionA; external msilib name 'MsiGetFileVersionA'; function MsiGetFileVersionW; external msilib name 'MsiGetFileVersionW'; function MsiGetFileVersion; external msilib name 'MsiGetFileVersion' + AWSuffix; function MsiGetFileHashA; external msilib name 'MsiGetFileHashA'; function MsiGetFileHashW; external msilib name 'MsiGetFileHashW'; function MsiGetFileHash; external msilib name 'MsiGetFileHash' + AWSuffix; function MsiGetFileSignatureInformationA; external msilib name 'MsiGetFileSignatureInformationA'; function MsiGetFileSignatureInformationW; external msilib name 'MsiGetFileSignatureInformationW'; function MsiGetFileSignatureInformation; external msilib name 'MsiGetFileSignatureInformation' + AWSuffix; {$IFDEF MSI110} function MsiGetShortcutTargetA; external msilib name 'MsiGetShortcutTargetA'; function MsiGetShortcutTargetW; external msilib name 'MsiGetShortcutTargetW'; function MsiGetShortcutTarget; external msilib name 'MsiGetShortcutTarget' + AWSuffix; {$ENDIF MSI110} function MsiIsProductElevatedA; external msilib name 'MsiIsProductElevatedA'; function MsiIsProductElevatedW; external msilib name 'MsiIsProductElevatedW'; function MsiIsProductElevated; external msilib name 'MsiIsProductElevated' + AWSuffix; {$ENDIF DYNAMIC_LINK} {$ENDIF JWA_INTERFACESECTION} {$IFNDEF JWA_OMIT_SECTIONS} end. {$ENDIF JWA_OMIT_SECTIONS}