Headers diff for msi.dll between 3.1.4000.3959-Windows 5.0 and 4.5.6002.18005-Windows 6.0 versions



 msi.h (3.1.4000.3959-Windows 5.0)   msi.h (4.5.6002.18005-Windows 6.0) 
/*****************************************************************************\ /*****************************************************************************\
* * * *
* msi.h - - Interface for external access to Installer Service * * msi.h - - Interface for external access to Installer Service *
* * * *
* Version 3.1 * * Version 4.0 *
* * * *
* NOTES: All buffers sizes are TCHAR count, null included only on input * * NOTES: All buffers sizes are TCHAR count, null included only on input *
* Return argument pointers may be null if not interested in value * * Return argument pointers may be null if not interested in value *
* * * *
* Copyright (c) Microsoft Corporation. All rights reserved. * * Copyright (c) Microsoft Corporation. All rights reserved. *
* * * *
\*****************************************************************************/ \*****************************************************************************/
#ifndef _MSI_H_ #ifndef _MSI_H_
#define _MSI_H_ #define _MSI_H_
skipping to change at line 30 skipping to change at line 30
#endif #endif
#ifndef NTDDI_WINXP #ifndef NTDDI_WINXP
#define NTDDI_WINXP 0x05010000 #define NTDDI_WINXP 0x05010000
#endif #endif
#ifndef NTDDI_WINXPSP2 #ifndef NTDDI_WINXPSP2
#define NTDDI_WINXPSP2 0x05010200 #define NTDDI_WINXPSP2 0x05010200
#endif #endif
#ifndef NTDDI_WS03SP1 #ifndef NTDDI_WS03SP1
#define NTDDI_WS03SP1 0x05020100 #define NTDDI_WS03SP1 0x05020100
#endif #endif
#ifndef NTDDI_LONGHORN
#define NTDDI_LONGHORN 0x06000000
#endif
#ifndef _WIN32_MSI #ifndef _WIN32_MSI
#if (_WIN32_WINNT >= 0x0501 || (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI _WINXP)) #if (_WIN32_WINNT >= 0x0501 || (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI _WINXP))
#if (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WS03SP1) #if (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_LONGHORN)
#define _WIN32_MSI 400
#elif (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WS03SP1)
#define _WIN32_MSI 310 #define _WIN32_MSI 310
#elif (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINXPSP2) #elif (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINXPSP2)
#define _WIN32_MSI 300 #define _WIN32_MSI 300
#else #else
#define _WIN32_MSI 200 #define _WIN32_MSI 200
#endif #endif
#elif (_WIN32_WINNT >= 0x0500 || (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTD DI_WIN2K)) #elif (_WIN32_WINNT >= 0x0500 || (defined(NTDDI_VERSION) && NTDDI_VERSION >= NTD DI_WIN2K))
#define _WIN32_MSI 110 #define _WIN32_MSI 110
#else #else
#define _WIN32_MSI 100 #define _WIN32_MSI 100
#endif //_WIN32_WINNT #endif //_WIN32_WINNT
#endif // !_WIN32_MSI #endif // !_WIN32_MSI
#include "specstrings.h"
#define MAX_GUID_CHARS 38
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
#ifndef _MSI_NO_CRYPTO #ifndef _MSI_NO_CRYPTO
#include "wincrypt.h" #include "wincrypt.h"
#endif // _MSI_NO_CRYPTO #endif // _MSI_NO_CRYPTO
#endif //(_WIN32_MSI >= 150) #endif //(_WIN32_MSI >= 150)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Installer generic handle definitions // Installer generic handle definitions
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
skipping to change at line 119 skipping to change at line 127
INSTALLMESSAGE_FILESINUSE = 0x05000000L, // list of files in use that need to be replaced INSTALLMESSAGE_FILESINUSE = 0x05000000L, // list of files in use that need to be replaced
INSTALLMESSAGE_RESOLVESOURCE = 0x06000000L, // request to determine a va lid source location INSTALLMESSAGE_RESOLVESOURCE = 0x06000000L, // request to determine a va lid source location
INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000L, // insufficient disk space m essage INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000L, // insufficient disk space m essage
INSTALLMESSAGE_ACTIONSTART = 0x08000000L, // start of action: action n ame & description INSTALLMESSAGE_ACTIONSTART = 0x08000000L, // start of action: action n ame & description
INSTALLMESSAGE_ACTIONDATA = 0x09000000L, // formatted data associated with individual action item INSTALLMESSAGE_ACTIONDATA = 0x09000000L, // formatted data associated with individual action item
INSTALLMESSAGE_PROGRESS = 0x0A000000L, // progress gauge info: unit s so far, total INSTALLMESSAGE_PROGRESS = 0x0A000000L, // progress gauge info: unit s so far, total
INSTALLMESSAGE_COMMONDATA = 0x0B000000L, // product info for dialog: language Id, dialog caption INSTALLMESSAGE_COMMONDATA = 0x0B000000L, // product info for dialog: language Id, dialog caption
INSTALLMESSAGE_INITIALIZE = 0x0C000000L, // sent prior to UI initiali zation, no string data INSTALLMESSAGE_INITIALIZE = 0x0C000000L, // sent prior to UI initiali zation, no string data
INSTALLMESSAGE_TERMINATE = 0x0D000000L, // sent after UI termination , no string data INSTALLMESSAGE_TERMINATE = 0x0D000000L, // sent after UI termination , no string data
INSTALLMESSAGE_SHOWDIALOG = 0x0E000000L, // sent prior to display or authored dialog or wizard INSTALLMESSAGE_SHOWDIALOG = 0x0E000000L, // sent prior to display or authored dialog or wizard
#if (_WIN32_MSI >= 400)
INSTALLMESSAGE_RMFILESINUSE = 0x19000000L, // the list of apps that the
user can request Restart Manager to shut down and restart
#endif // (_WIN32_MSI >= 400)
} INSTALLMESSAGE; } INSTALLMESSAGE;
// external error handler supplied to installation API functions // external error handler supplied to installation API functions
typedef int (WINAPI *INSTALLUI_HANDLERA)(LPVOID pvContext, UINT iMessageType, LP CSTR szMessage); typedef int (WINAPI *INSTALLUI_HANDLERA)(LPVOID pvContext, UINT iMessageType, LP CSTR szMessage);
// external error handler supplied to installation API functions // external error handler supplied to installation API functions
typedef int (WINAPI *INSTALLUI_HANDLERW)(LPVOID pvContext, UINT iMessageType, LP CWSTR szMessage); typedef int (WINAPI *INSTALLUI_HANDLERW)(LPVOID pvContext, UINT iMessageType, LP CWSTR szMessage);
#ifdef UNICODE #ifdef UNICODE
#define INSTALLUI_HANDLER INSTALLUI_HANDLERW #define INSTALLUI_HANDLER INSTALLUI_HANDLERW
#else #else
#define INSTALLUI_HANDLER INSTALLUI_HANDLERA #define INSTALLUI_HANDLER INSTALLUI_HANDLERA
skipping to change at line 219 skipping to change at line 230
INSTALLLOGMODE_COMMONDATA = (1 << (INSTALLMESSAGE_COMMONDATA >> 2 4)), INSTALLLOGMODE_COMMONDATA = (1 << (INSTALLMESSAGE_COMMONDATA >> 2 4)),
INSTALLLOGMODE_PROPERTYDUMP = (1 << (INSTALLMESSAGE_PROGRESS >> 2 4)), // log only INSTALLLOGMODE_PROPERTYDUMP = (1 << (INSTALLMESSAGE_PROGRESS >> 2 4)), // log only
INSTALLLOGMODE_VERBOSE = (1 << (INSTALLMESSAGE_INITIALIZE >> 2 4)), // log only INSTALLLOGMODE_VERBOSE = (1 << (INSTALLMESSAGE_INITIALIZE >> 2 4)), // log only
INSTALLLOGMODE_EXTRADEBUG = (1 << (INSTALLMESSAGE_TERMINATE >> 2 4)), // log only INSTALLLOGMODE_EXTRADEBUG = (1 << (INSTALLMESSAGE_TERMINATE >> 2 4)), // log only
INSTALLLOGMODE_LOGONLYONERROR = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 2 4)), // log only INSTALLLOGMODE_LOGONLYONERROR = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 2 4)), // log only
INSTALLLOGMODE_PROGRESS = (1 << (INSTALLMESSAGE_PROGRESS >> 2 4)), // external handler only INSTALLLOGMODE_PROGRESS = (1 << (INSTALLMESSAGE_PROGRESS >> 2 4)), // external handler only
INSTALLLOGMODE_INITIALIZE = (1 << (INSTALLMESSAGE_INITIALIZE >> 2 4)), // external handler only INSTALLLOGMODE_INITIALIZE = (1 << (INSTALLMESSAGE_INITIALIZE >> 2 4)), // external handler only
INSTALLLOGMODE_TERMINATE = (1 << (INSTALLMESSAGE_TERMINATE >> 2 4)), // external handler only INSTALLLOGMODE_TERMINATE = (1 << (INSTALLMESSAGE_TERMINATE >> 2 4)), // external handler only
INSTALLLOGMODE_SHOWDIALOG = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 2 4)), // external handler only INSTALLLOGMODE_SHOWDIALOG = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 2 4)), // external handler only
INSTALLLOGMODE_FILESINUSE = (1 << (INSTALLMESSAGE_FILESINUSE >> 2 4)), // external handler only INSTALLLOGMODE_FILESINUSE = (1 << (INSTALLMESSAGE_FILESINUSE >> 2 4)), // external handler only
#if (_WIN32_MSI >= 400)
INSTALLLOGMODE_RMFILESINUSE = (1 << (INSTALLMESSAGE_RMFILESINUSE >> 2
4)), // external handler only
#endif // (_WIN32_MSI >= 400)
} INSTALLLOGMODE; } INSTALLLOGMODE;
typedef enum tagINSTALLLOGATTRIBUTES // flag attributes for MsiEnableLog typedef enum tagINSTALLLOGATTRIBUTES // flag attributes for MsiEnableLog
{ {
INSTALLLOGATTRIBUTES_APPEND = (1 << 0), INSTALLLOGATTRIBUTES_APPEND = (1 << 0),
INSTALLLOGATTRIBUTES_FLUSHEACHLINE = (1 << 1), INSTALLLOGATTRIBUTES_FLUSHEACHLINE = (1 << 1),
} INSTALLLOGATTRIBUTES; } INSTALLLOGATTRIBUTES;
typedef enum tagINSTALLFEATUREATTRIBUTE // bit flags typedef enum tagINSTALLFEATUREATTRIBUTE // bit flags
{ {
skipping to change at line 445 skipping to change at line 459
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to set the UI handling and logging. The UI will be used for error, // 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 // progress, and log messages for all subsequent calls to Installer Service
// API functions that require UI. // API functions that require UI.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Enable internal UI // Enable internal UI
INSTALLUILEVEL WINAPI MsiSetInternalUI( INSTALLUILEVEL WINAPI MsiSetInternalUI(
INSTALLUILEVEL dwUILevel, // UI level __in INSTALLUILEVEL dwUILevel, // UI level
HWND *phWnd); // handle of owner window __inout_opt HWND *phWnd); // handle of owner window
// Enable external UI handling, returns any previous handler or NULL if none. // Enable external UI handling, returns any previous handler or NULL if none.
// Messages are designated with a combination of bits from INSTALLLOGMODE enum. // Messages are designated with a combination of bits from INSTALLLOGMODE enum.
INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA( INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(
INSTALLUI_HANDLERA puiHandler, // for progress and error handling __in_opt INSTALLUI_HANDLERA puiHandler, // for progress and error handli
DWORD dwMessageFilter, // bit flags designating messages to ng
handle __in DWORD dwMessageFilter, // bit flags designating message
LPVOID pvContext); // application context s to handle
__in_opt LPVOID pvContext); // application context
INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW( INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(
INSTALLUI_HANDLERW puiHandler, // for progress and error handling __in_opt INSTALLUI_HANDLERW puiHandler, // for progress and error handli
DWORD dwMessageFilter, // bit flags designating messages to ng
handle __in DWORD dwMessageFilter, // bit flags designating message
LPVOID pvContext); // application context s to handle
__in_opt LPVOID pvContext); // application context
#ifdef UNICODE #ifdef UNICODE
#define MsiSetExternalUI MsiSetExternalUIW #define MsiSetExternalUI MsiSetExternalUIW
#else #else
#define MsiSetExternalUI MsiSetExternalUIA #define MsiSetExternalUI MsiSetExternalUIA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 310) #if (_WIN32_MSI >= 310)
UINT WINAPI MsiSetExternalUIRecord( UINT WINAPI MsiSetExternalUIRecord(
INSTALLUI_HANDLER_RECORD puiHandler, // for progress and error handling __in INSTALLUI_HANDLER_RECORD puiHandler, // for progress and
DWORD dwMessageFilter, // bit flags designating messages to error handling
handle __in DWORD dwMessageFilter, // bit flags design
LPVOID pvContext, // application context ating messages to handle
PINSTALLUI_HANDLER_RECORD ppuiPrevHandler); // pointer to the previously __in_opt LPVOID pvContext, // application cont
set handler ext
__out_opt PINSTALLUI_HANDLER_RECORD ppuiPrevHandler); // pointer to the p
reviously set handler
#endif // (_WIN32_MSI >= 310) #endif // (_WIN32_MSI >= 310)
// Enable logging to a file for all install sessions for the client process, // 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. // with control over which log messages are passed to the specified log file.
// Messages are designated with a combination of bits from INSTALLLOGMODE enum. // Messages are designated with a combination of bits from INSTALLLOGMODE enum.
UINT WINAPI MsiEnableLogA( UINT WINAPI MsiEnableLogA(
DWORD dwLogMode, // bit flags designating operations to rep __in DWORD dwLogMode, // bit flags designating operations t
ort o report
LPCSTR szLogFile, // log file, or NULL to disable logging __in_opt LPCSTR szLogFile, // log file, or NULL to disable logging
DWORD dwLogAttributes); // INSTALLLOGATTRIBUTES flags __in DWORD dwLogAttributes); // INSTALLLOGATTRIBUTES flags
UINT WINAPI MsiEnableLogW( UINT WINAPI MsiEnableLogW(
DWORD dwLogMode, // bit flags designating operations to rep __in DWORD dwLogMode, // bit flags designating operations t
ort o report
LPCWSTR szLogFile, // log file, or NULL to disable logging __in_opt LPCWSTR szLogFile, // log file, or NULL to disable loggin
DWORD dwLogAttributes); // INSTALLLOGATTRIBUTES flags g
__in DWORD dwLogAttributes); // INSTALLLOGATTRIBUTES flags
#ifdef UNICODE #ifdef UNICODE
#define MsiEnableLog MsiEnableLogW #define MsiEnableLog MsiEnableLogW
#else #else
#define MsiEnableLog MsiEnableLogA #define MsiEnableLog MsiEnableLogA
#endif // !UNICODE #endif // !UNICODE
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to query and configure a product as a whole. // Functions to query and configure a product as a whole.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Return the installed state for a product // Return the installed state for a product
INSTALLSTATE WINAPI MsiQueryProductStateA( INSTALLSTATE WINAPI MsiQueryProductStateA(
LPCSTR szProduct); __in LPCSTR szProduct);
INSTALLSTATE WINAPI MsiQueryProductStateW( INSTALLSTATE WINAPI MsiQueryProductStateW(
LPCWSTR szProduct); __in LPCWSTR szProduct);
#ifdef UNICODE #ifdef UNICODE
#define MsiQueryProductState MsiQueryProductStateW #define MsiQueryProductState MsiQueryProductStateW
#else #else
#define MsiQueryProductState MsiQueryProductStateA #define MsiQueryProductState MsiQueryProductStateA
#endif // !UNICODE #endif // !UNICODE
// Return product info // Return product info
UINT WINAPI MsiGetProductInfoA( UINT WINAPI MsiGetProductInfoA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szAttribute, // attribute name, case-sensitive __in LPCSTR szAttribute, // attribute name,
LPSTR lpValueBuf, // returned value, NULL if not desired case-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPSTR lpValueBuf, // returned value,
NULL if not desired
__inout_opt LPDWORD pcchValueBuf); // in/out buffer
character count
UINT WINAPI MsiGetProductInfoW( UINT WINAPI MsiGetProductInfoW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szAttribute, // attribute name, case-sensitive __in LPCWSTR szAttribute, // attribute name,
LPWSTR lpValueBuf, // returned value, NULL if not desired case-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPWSTR lpValueBuf, // returned value,
NULL if not desired
__inout_opt LPDWORD pcchValueBuf); // in/out buffer
character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetProductInfo MsiGetProductInfoW #define MsiGetProductInfo MsiGetProductInfoW
#else #else
#define MsiGetProductInfo MsiGetProductInfoA #define MsiGetProductInfo MsiGetProductInfoA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 300) #if (_WIN32_MSI >= 300)
// Retrieve product info for a particular product instance // Retrieve product info for a particular product instance
UINT WINAPI MsiGetProductInfoExA( UINT WINAPI MsiGetProductInfoExA(
LPCSTR szProductCode, // Information is queried on this produ __in LPCSTR szProductCode, // Information is que
ct ried on this product
LPCSTR szUserSid, // Account of this product instance __in_opt LPCSTR szUserSid, // Account of this pr
MSIINSTALLCONTEXT dwContext,// Context of this product instance oduct instance
LPCSTR szProperty, // Property being queried __in MSIINSTALLCONTEXT dwContext, // Context of this
LPSTR szValue, // Value read product instance
LPDWORD pcchValue); // size of the szValue buffer __in LPCSTR szProperty, // Property being que
ried
__out_ecount_opt(*pcchValue) LPSTR szValue, // Value read
__inout_opt LPDWORD pcchValue); // size of the szVa
lue buffer
UINT WINAPI MsiGetProductInfoExW( UINT WINAPI MsiGetProductInfoExW(
LPCWSTR szProductCode, // Information is queried on this prod __in LPCWSTR szProductCode, // Information is qu
uct eried on this product
LPCWSTR szUserSid, // Account of this product instance __in_opt LPCWSTR szUserSid, // Account of this p
MSIINSTALLCONTEXT dwContext,// Context of this product instance roduct instance
LPCWSTR szProperty, // Property being queried __in MSIINSTALLCONTEXT dwContext, // Context of this
LPWSTR szValue, // Value read product instance
LPDWORD pcchValue); // size of the szValue buffer __in LPCWSTR szProperty, // Property being qu
eried
__out_ecount_opt(*pcchValue) LPWSTR szValue, // Value read
__inout_opt LPDWORD pcchValue); // size of the szVa
lue buffer
#ifdef UNICODE #ifdef UNICODE
#define MsiGetProductInfoEx MsiGetProductInfoExW #define MsiGetProductInfoEx MsiGetProductInfoExW
#else #else
#define MsiGetProductInfoEx MsiGetProductInfoExA #define MsiGetProductInfoEx MsiGetProductInfoExA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 300) #endif //(_WIN32_MSI >= 300)
// Install a new product. // Install a new product.
// Either may be NULL, but the DATABASE property must be specfied // Either may be NULL, but the DATABASE property must be specfied
UINT WINAPI MsiInstallProductA( UINT WINAPI MsiInstallProductA(
LPCSTR szPackagePath, // location of package to install __in LPCSTR szPackagePath, // location of package to install
LPCSTR szCommandLine); // command line <property settings> __in_opt LPCSTR szCommandLine); // command line <property settings
>
UINT WINAPI MsiInstallProductW( UINT WINAPI MsiInstallProductW(
LPCWSTR szPackagePath, // location of package to install __in LPCWSTR szPackagePath, // location of package to install
LPCWSTR szCommandLine); // command line <property settings> __in_opt LPCWSTR szCommandLine); // command line <property setting
s>
#ifdef UNICODE #ifdef UNICODE
#define MsiInstallProduct MsiInstallProductW #define MsiInstallProduct MsiInstallProductW
#else #else
#define MsiInstallProduct MsiInstallProductA #define MsiInstallProduct MsiInstallProductA
#endif // !UNICODE #endif // !UNICODE
// Install/uninstall an advertised or installed product // Install/uninstall an advertised or installed product
// No action if installed and INSTALLSTATE_DEFAULT specified // No action if installed and INSTALLSTATE_DEFAULT specified
UINT WINAPI MsiConfigureProductA( UINT WINAPI MsiConfigureProductA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
int iInstallLevel, // how much of the product to install __in int iInstallLevel, // how much of the product to install
INSTALLSTATE eInstallState); // local/source/default/absent/lock/uncach __in INSTALLSTATE eInstallState); // local/source/default/absent/lock/u
e ncache
UINT WINAPI MsiConfigureProductW( UINT WINAPI MsiConfigureProductW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
int iInstallLevel, // how much of the product to install __in int iInstallLevel, // how much of the product to install
INSTALLSTATE eInstallState); // local/source/default/absent/lock/uncach __in INSTALLSTATE eInstallState); // local/source/default/absent/lock/u
e ncache
#ifdef UNICODE #ifdef UNICODE
#define MsiConfigureProduct MsiConfigureProductW #define MsiConfigureProduct MsiConfigureProductW
#else #else
#define MsiConfigureProduct MsiConfigureProductA #define MsiConfigureProduct MsiConfigureProductA
#endif // !UNICODE #endif // !UNICODE
// Install/uninstall an advertised or installed product // Install/uninstall an advertised or installed product
// No action if installed and INSTALLSTATE_DEFAULT specified // No action if installed and INSTALLSTATE_DEFAULT specified
UINT WINAPI MsiConfigureProductExA( UINT WINAPI MsiConfigureProductExA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
int iInstallLevel, // how much of the product to install __in int iInstallLevel, // how much of the product to in
INSTALLSTATE eInstallState, // local/source/default/absent/lock/uncach stall
e __in INSTALLSTATE eInstallState, // local/source/default/absent/l
LPCSTR szCommandLine); // command line <property settings> ock/uncache
__in_opt LPCSTR szCommandLine); // command line <property settings
>
UINT WINAPI MsiConfigureProductExW( UINT WINAPI MsiConfigureProductExW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
int iInstallLevel, // how much of the product to install __in int iInstallLevel, // how much of the product to in
INSTALLSTATE eInstallState, // local/source/default/absent/lock/uncach stall
e __in INSTALLSTATE eInstallState, // local/source/default/absent/l
LPCWSTR szCommandLine); // command line <property settings> ock/uncache
__in_opt LPCWSTR szCommandLine); // command line <property setting
s>
#ifdef UNICODE #ifdef UNICODE
#define MsiConfigureProductEx MsiConfigureProductExW #define MsiConfigureProductEx MsiConfigureProductExW
#else #else
#define MsiConfigureProductEx MsiConfigureProductExA #define MsiConfigureProductEx MsiConfigureProductExA
#endif // !UNICODE #endif // !UNICODE
// Reinstall product, used to validate or correct problems // Reinstall product, used to validate or correct problems
UINT WINAPI MsiReinstallProductA( UINT WINAPI MsiReinstallProductA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
DWORD szReinstallMode); // one or more REINSTALLMODE modes __in DWORD szReinstallMode); // one or more REINSTALLMODE modes
UINT WINAPI MsiReinstallProductW( UINT WINAPI MsiReinstallProductW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
DWORD szReinstallMode); // one or more REINSTALLMODE modes __in DWORD szReinstallMode); // one or more REINSTALLMODE modes
#ifdef UNICODE #ifdef UNICODE
#define MsiReinstallProduct MsiReinstallProductW #define MsiReinstallProduct MsiReinstallProductW
#else #else
#define MsiReinstallProduct MsiReinstallProductA #define MsiReinstallProduct MsiReinstallProductA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
// Output reg and shortcut info to script file for specified architecture for As sign or Publish // Output reg and shortcut info to script file for specified architecture for As sign or Publish
// If dwPlatform is 0, then the script is created based on the current platform (behavior of MsiAdvertiseProduct) // If dwPlatform is 0, then the script is created based on the current platform (behavior of MsiAdvertiseProduct)
// If dwPlatform specifies a platform, then the script is created as if the curr ent platform is the // If dwPlatform specifies a platform, then the script is created as if the curr ent platform is the
// platform specified in dwPlatform // platform specified in dwPlatform
// If dwOptions includes MSIADVERTISEOPTIONFLAGS_INSTANCE, then a new instance i s advertised. Use of // If dwOptions includes MSIADVERTISEOPTIONFLAGS_INSTANCE, then a new instance i s advertised. Use of
// this option requires that szTransforms include the instance transform that changes the product code // this option requires that szTransforms include the instance transform that changes the product code
UINT WINAPI MsiAdvertiseProductExA( UINT WINAPI MsiAdvertiseProductExA(
LPCSTR szPackagePath, // location of package __in LPCSTR szPackagePath, // location of package
LPCSTR szScriptfilePath, // if NULL, product is locally advertised __in_opt LPCSTR szScriptfilePath, // if NULL, product is locally adv
LPCSTR szTransforms, // list of transforms to be applied ertised
LANGID lgidLanguage, // install language __in_opt LPCSTR szTransforms, // list of transforms to be applie
DWORD dwPlatform, // the MSIARCHITECTUREFLAGS that control d
for which platform __in LANGID lgidLanguage, // install language
__in DWORD dwPlatform, // the MSIARCHITECTUREFLAGS that con
trol for which platform
// to create the script, ignored if szS criptfilePath is NULL // to create the script, ignored if szS criptfilePath is NULL
DWORD dwOptions); // the MSIADVERTISEOPTIONFLAGS that speci fy extra advertise parameters __in DWORD dwOptions); // the MSIADVERTISEOPTIONFLAGS that specify extra advertise parameters
UINT WINAPI MsiAdvertiseProductExW( UINT WINAPI MsiAdvertiseProductExW(
LPCWSTR szPackagePath, // location of package __in LPCWSTR szPackagePath, // location of package
LPCWSTR szScriptfilePath, // if NULL, product is locally advertised __in_opt LPCWSTR szScriptfilePath, // if NULL, product is locally ad
LPCWSTR szTransforms, // list of transforms to be applied vertised
LANGID lgidLanguage, // install language __in_opt LPCWSTR szTransforms, // list of transforms to be appli
DWORD dwPlatform, // the MSIARCHITECTUREFLAGS that control ed
for which platform __in LANGID lgidLanguage, // install language
__in DWORD dwPlatform, // the MSIARCHITECTUREFLAGS that con
trol for which platform
// to create the script, ignored if szS criptfilePath is NULL // to create the script, ignored if szS criptfilePath is NULL
DWORD dwOptions); // the MSIADVERTISEOPTIONFLAGS that speci fy extra advertise parameters __in DWORD dwOptions); // the MSIADVERTISEOPTIONFLAGS that specify extra advertise parameters
#ifdef UNICODE #ifdef UNICODE
#define MsiAdvertiseProductEx MsiAdvertiseProductExW #define MsiAdvertiseProductEx MsiAdvertiseProductExW
#else #else
#define MsiAdvertiseProductEx MsiAdvertiseProductExA #define MsiAdvertiseProductEx MsiAdvertiseProductExA
#endif // !UNICODE #endif // !UNICODE
#endif // (_WIN32_MSI >= 150) #endif // (_WIN32_MSI >= 150)
// Output reg and shortcut info to script file for Assign or Publish // Output reg and shortcut info to script file for Assign or Publish
UINT WINAPI MsiAdvertiseProductA( UINT WINAPI MsiAdvertiseProductA(
LPCSTR szPackagePath, // location of package __in LPCSTR szPackagePath, // location of package
LPCSTR szScriptfilePath, // if NULL, product is locally advertised __in_opt LPCSTR szScriptfilePath, // if NULL, product is locally ad
LPCSTR szTransforms, // list of transforms to be applied vertised
LANGID lgidLanguage); // install language __in_opt LPCSTR szTransforms, // list of transforms to be appli
ed
__in LANGID lgidLanguage); // install language
UINT WINAPI MsiAdvertiseProductW( UINT WINAPI MsiAdvertiseProductW(
LPCWSTR szPackagePath, // location of package __in LPCWSTR szPackagePath, // location of package
LPCWSTR szScriptfilePath, // if NULL, product is locally advertised __in_opt LPCWSTR szScriptfilePath, // if NULL, product is locally a
LPCWSTR szTransforms, // list of transforms to be applied dvertised
LANGID lgidLanguage); // install language __in_opt LPCWSTR szTransforms, // list of transforms to be appl
ied
__in LANGID lgidLanguage); // install language
#ifdef UNICODE #ifdef UNICODE
#define MsiAdvertiseProduct MsiAdvertiseProductW #define MsiAdvertiseProduct MsiAdvertiseProductW
#else #else
#define MsiAdvertiseProduct MsiAdvertiseProductA #define MsiAdvertiseProduct MsiAdvertiseProductA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
// Process advertise script file into supplied locations // Process advertise script file into supplied locations
// If an icon folder is specified, icon files will be placed there // 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 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 // If fShortcuts is TRUE, shortcuts will be created. If a special folder is
// returned by SHGetSpecialFolderLocation(?), it will hold the shortcuts. // returned by SHGetSpecialFolderLocation(?), it will hold the shortcuts.
// if fRemoveItems is TRUE, items that are present will be removed // if fRemoveItems is TRUE, items that are present will be removed
UINT WINAPI MsiProcessAdvertiseScriptA( UINT WINAPI MsiProcessAdvertiseScriptA(
LPCSTR szScriptFile, // path to script from MsiAdvertiseProduct __in LPCSTR szScriptFile, // path to script from MsiAdvertiseProduc
LPCSTR szIconFolder, // optional path to folder for icon files and t
transforms __in_opt LPCSTR szIconFolder, // optional path to folder for icon f
HKEY hRegData, // optional parent registry key iles and transforms
BOOL fShortcuts, // TRUE if shortcuts output to special folder __in_opt HKEY hRegData, // optional parent registry key
BOOL fRemoveItems); // TRUE if specified items are to be removed __in BOOL fShortcuts, // TRUE if shortcuts output to special f
older
__in BOOL fRemoveItems); // TRUE if specified items are to be rem
oved
UINT WINAPI MsiProcessAdvertiseScriptW( UINT WINAPI MsiProcessAdvertiseScriptW(
LPCWSTR szScriptFile, // path to script from MsiAdvertiseProduct __in LPCWSTR szScriptFile, // path to script from MsiAdvertiseProdu
LPCWSTR szIconFolder, // optional path to folder for icon files and ct
transforms __in_opt LPCWSTR szIconFolder, // optional path to folder for icon
HKEY hRegData, // optional parent registry key files and transforms
BOOL fShortcuts, // TRUE if shortcuts output to special folder __in_opt HKEY hRegData, // optional parent registry key
BOOL fRemoveItems); // TRUE if specified items are to be removed __in BOOL fShortcuts, // TRUE if shortcuts output to special f
older
__in BOOL fRemoveItems); // TRUE if specified items are to be rem
oved
#ifdef UNICODE #ifdef UNICODE
#define MsiProcessAdvertiseScript MsiProcessAdvertiseScriptW #define MsiProcessAdvertiseScript MsiProcessAdvertiseScriptW
#else #else
#define MsiProcessAdvertiseScript MsiProcessAdvertiseScriptA #define MsiProcessAdvertiseScript MsiProcessAdvertiseScriptA
#endif // !UNICODE #endif // !UNICODE
#endif // (_WIN32_MSI >= 150) #endif // (_WIN32_MSI >= 150)
// Process advertise script file using the supplied dwFlags control flags // Process advertise script file using the supplied dwFlags control flags
// if fRemoveItems is TRUE, items that are present will be removed // if fRemoveItems is TRUE, items that are present will be removed
UINT WINAPI MsiAdvertiseScriptA( UINT WINAPI MsiAdvertiseScriptA(
LPCSTR szScriptFile, // path to script from MsiAdvertiseProduct __in LPCSTR szScriptFile, // path to script from MsiAdvertiseProduc
DWORD dwFlags, // the SCRIPTFLAGS bit flags that control th t
e script execution __in DWORD dwFlags, // the SCRIPTFLAGS bit flags that contr
PHKEY phRegData, // optional parent registry key ol the script execution
BOOL fRemoveItems); // TRUE if specified items are to be removed __in_opt PHKEY phRegData, // optional parent registry key
__in BOOL fRemoveItems); // TRUE if specified items are to be re
moved
UINT WINAPI MsiAdvertiseScriptW( UINT WINAPI MsiAdvertiseScriptW(
LPCWSTR szScriptFile, // path to script from MsiAdvertiseProduct __in LPCWSTR szScriptFile, // path to script from MsiAdvertiseProdu
DWORD dwFlags, // the SCRIPTFLAGS bit flags that control th ct
e script execution __in DWORD dwFlags, // the SCRIPTFLAGS bit flags that contr
PHKEY phRegData, // optional parent registry key ol the script execution
BOOL fRemoveItems); // TRUE if specified items are to be removed __in_opt PHKEY phRegData, // optional parent registry key
__in BOOL fRemoveItems); // TRUE if specified items are to be re
moved
#ifdef UNICODE #ifdef UNICODE
#define MsiAdvertiseScript MsiAdvertiseScriptW #define MsiAdvertiseScript MsiAdvertiseScriptW
#else #else
#define MsiAdvertiseScript MsiAdvertiseScriptA #define MsiAdvertiseScript MsiAdvertiseScriptA
#endif // !UNICODE #endif // !UNICODE
// Return product info from an installer script file: // Return product info from an installer script file:
// product code, language, version, readable name, path to package // product code, language, version, readable name, path to package
// Returns TRUE is success, FALSE if szScriptFile is not a valid script file // Returns TRUE is success, FALSE if szScriptFile is not a valid script file
UINT WINAPI MsiGetProductInfoFromScriptA( UINT WINAPI MsiGetProductInfoFromScriptA(
LPCSTR szScriptFile, // path to installer script file __in LPCSTR szScriptFile, // path to in
LPSTR lpProductBuf39, // buffer for product code string GUID, 39 chars staller script file
LANGID *plgidLanguage, // return language Id __out_ecount_opt(MAX_GUID_CHARS+1) LPSTR lpProductBuf39, // buffer for
DWORD *pdwVersion, // return version: Maj:Min:Build <8:8:16> product code string GUID, 39 chars
LPSTR lpNameBuf, // buffer to return readable product name __out_opt LANGID *plgidLanguage, // return la
DWORD *pcchNameBuf, // in/out name buffer character count nguage Id
LPSTR lpPackageBuf, // buffer for path to product package __out_opt LPDWORD pdwVersion, // return ve
DWORD *pcchPackageBuf);// in/out path buffer character count rsion: Maj:Min:Build <8:8:16>
__out_ecount_opt(*pcchNameBuf) LPSTR lpNameBuf, // buffer to
return readable product name
__inout_opt LPDWORD pcchNameBuf, // in/out na
me buffer character count
__out_ecount_opt(*pcchPackageBuf) LPSTR lpPackageBuf, // buffer for
path to product package
__inout_opt LPDWORD pcchPackageBuf);// in/out pa
th buffer character count
UINT WINAPI MsiGetProductInfoFromScriptW( UINT WINAPI MsiGetProductInfoFromScriptW(
LPCWSTR szScriptFile, // path to installer script file __in LPCWSTR szScriptFile, // path to i
LPWSTR lpProductBuf39, // buffer for product code string GUID, 39 char nstaller script file
s __out_ecount_opt(MAX_GUID_CHARS+1) LPWSTR lpProductBuf39, // buffer fo
LANGID *plgidLanguage, // return language Id r product code string GUID, 39 chars
DWORD *pdwVersion, // return version: Maj:Min:Build <8:8:16> __out_opt LANGID *plgidLanguage, // return la
LPWSTR lpNameBuf, // buffer to return readable product name nguage Id
DWORD *pcchNameBuf, // in/out name buffer character count __out_opt LPDWORD pdwVersion, // return ve
LPWSTR lpPackageBuf, // buffer for path to product package rsion: Maj:Min:Build <8:8:16>
DWORD *pcchPackageBuf);// in/out path buffer character count __out_ecount_opt(*pcchNameBuf) LPWSTR lpNameBuf, // buffer to
return readable product name
__inout_opt LPDWORD pcchNameBuf, // in/out na
me buffer character count
__out_ecount_opt(*pcchPackageBuf) LPWSTR lpPackageBuf, // buffer for
path to product package
__inout_opt LPDWORD pcchPackageBuf);// in/out pa
th buffer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetProductInfoFromScript MsiGetProductInfoFromScriptW #define MsiGetProductInfoFromScript MsiGetProductInfoFromScriptW
#else #else
#define MsiGetProductInfoFromScript MsiGetProductInfoFromScriptA #define MsiGetProductInfoFromScript MsiGetProductInfoFromScriptA
#endif // !UNICODE #endif // !UNICODE
// Return the product code for a registered component, called once by apps // Return the product code for a registered component, called once by apps
UINT WINAPI MsiGetProductCodeA( UINT WINAPI MsiGetProductCodeA(
LPCSTR szComponent, // component Id registered for this product __in LPCSTR szComponent, // component Id registered for this product
LPSTR lpBuf39); // returned string GUID, sized for 39 characters __out_ecount(MAX_GUID_CHARS+1) LPSTR lpBuf39); // returned string GUID,
sized for 39 characters
UINT WINAPI MsiGetProductCodeW( UINT WINAPI MsiGetProductCodeW(
LPCWSTR szComponent, // component Id registered for this product __in LPCWSTR szComponent, // component Id registered for this product
LPWSTR lpBuf39); // returned string GUID, sized for 39 characters __out_ecount(MAX_GUID_CHARS+1) LPWSTR lpBuf39); // returned string GUID
, sized for 39 characters
#ifdef UNICODE #ifdef UNICODE
#define MsiGetProductCode MsiGetProductCodeW #define MsiGetProductCode MsiGetProductCodeW
#else #else
#define MsiGetProductCode MsiGetProductCodeA #define MsiGetProductCode MsiGetProductCodeA
#endif // !UNICODE #endif // !UNICODE
// Return the registered user information for an installed product // Return the registered user information for an installed product
USERINFOSTATE WINAPI MsiGetUserInfoA( USERINFOSTATE WINAPI MsiGetUserInfoA(
LPCSTR szProduct, // product code, string GUID __in LPCSTR szProduct, // product c
LPSTR lpUserNameBuf, // return user name ode, string GUID
DWORD *pcchUserNameBuf, // in/out buffer character count __out_ecount_opt(*pcchUserNameBuf) LPSTR lpUserNameBuf, // return us
LPSTR lpOrgNameBuf, // return company name er name
DWORD *pcchOrgNameBuf, // in/out buffer character count __inout_opt LPDWORD pcchUserNameBuf, // in/out b
LPSTR lpSerialBuf, // return product serial number uffer character count
DWORD *pcchSerialBuf); // in/out buffer character count __out_ecount_opt(*pcchOrgNameBuf) LPSTR lpOrgNameBuf, // return co
mpany name
__inout_opt LPDWORD pcchOrgNameBuf, // in/out b
uffer character count
__out_ecount_opt(*pcchSerialBuf) LPSTR lpSerialBuf, // return pr
oduct serial number
__inout_opt LPDWORD pcchSerialBuf); // in/out b
uffer character count
USERINFOSTATE WINAPI MsiGetUserInfoW( USERINFOSTATE WINAPI MsiGetUserInfoW(
LPCWSTR szProduct, // product code, string GUID __in LPCWSTR szProduct, // product
LPWSTR lpUserNameBuf, // return user name code, string GUID
DWORD *pcchUserNameBuf, // in/out buffer character count __out_ecount_opt(*pcchUserNameBuf) LPWSTR lpUserNameBuf, // return u
LPWSTR lpOrgNameBuf, // return company name ser name
DWORD *pcchOrgNameBuf, // in/out buffer character count __inout_opt LPDWORD pcchUserNameBuf, // in/out b
LPWSTR lpSerialBuf, // return product serial number uffer character count
DWORD *pcchSerialBuf); // in/out buffer character count __out_ecount_opt(*pcchOrgNameBuf) LPWSTR lpOrgNameBuf, // return c
ompany name
__inout_opt LPDWORD pcchOrgNameBuf, // in/out b
uffer character count
__out_ecount_opt(*pcchSerialBuf) LPWSTR lpSerialBuf, // return p
roduct serial number
__inout_opt LPDWORD pcchSerialBuf); // in/out b
uffer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetUserInfo MsiGetUserInfoW #define MsiGetUserInfo MsiGetUserInfoW
#else #else
#define MsiGetUserInfo MsiGetUserInfoA #define MsiGetUserInfo MsiGetUserInfoA
#endif // !UNICODE #endif // !UNICODE
// Obtain and store user info and PID from installation wizard (first run) // Obtain and store user info and PID from installation wizard (first run)
UINT WINAPI MsiCollectUserInfoA( UINT WINAPI MsiCollectUserInfoA(
LPCSTR szProduct); // product code, string GUID __in LPCSTR szProduct); // product code, string GUID
UINT WINAPI MsiCollectUserInfoW( UINT WINAPI MsiCollectUserInfoW(
LPCWSTR szProduct); // product code, string GUID __in LPCWSTR szProduct); // product code, string GUID
#ifdef UNICODE #ifdef UNICODE
#define MsiCollectUserInfo MsiCollectUserInfoW #define MsiCollectUserInfo MsiCollectUserInfoW
#else #else
#define MsiCollectUserInfo MsiCollectUserInfoA #define MsiCollectUserInfo MsiCollectUserInfoA
#endif // !UNICODE #endif // !UNICODE
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to query, apply, and remove patches to a product. // Functions to query, apply, and remove patches to a product.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Patch all possible installed products. // Patch all possible installed products.
UINT WINAPI MsiApplyPatchA( UINT WINAPI MsiApplyPatchA(
LPCSTR szPatchPackage, // location of patch package __in LPCSTR szPatchPackage, // location of patch package
LPCSTR szInstallPackage, // location of package for install to patch __in_opt LPCSTR szInstallPackage, // location of package for install to p
<optional> atch <optional>
INSTALLTYPE eInstallType, // type of install to patch __in INSTALLTYPE eInstallType, // type of install to patch
LPCSTR szCommandLine); // command line <property settings> __in_opt LPCSTR szCommandLine); // command line <property settings>
UINT WINAPI MsiApplyPatchW( UINT WINAPI MsiApplyPatchW(
LPCWSTR szPatchPackage, // location of patch package __in LPCWSTR szPatchPackage, // location of patch package
LPCWSTR szInstallPackage, // location of package for install to patc __in_opt LPCWSTR szInstallPackage, // location of package for install to
h <optional> patch <optional>
INSTALLTYPE eInstallType, // type of install to patch __in INSTALLTYPE eInstallType, // type of install to patch
LPCWSTR szCommandLine); // command line <property settings> __in_opt LPCWSTR szCommandLine); // command line <property settings>
#ifdef UNICODE #ifdef UNICODE
#define MsiApplyPatch MsiApplyPatchW #define MsiApplyPatch MsiApplyPatchW
#else #else
#define MsiApplyPatch MsiApplyPatchA #define MsiApplyPatch MsiApplyPatchA
#endif // !UNICODE #endif // !UNICODE
// Return patch info for first visible patch // Return patch info for first visible patch
UINT WINAPI MsiGetPatchInfoA( UINT WINAPI MsiGetPatchInfoA(
LPCSTR szPatch, // patch code __in LPCSTR szPatch, // patch code
LPCSTR szAttribute, // attribute name, case-sensitive __in LPCSTR szAttribute, // attribute name, case
LPSTR lpValueBuf, // returned value, NULL if not desired -sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPSTR lpValueBuf, // returned value, NULL
if not desired
__inout_opt LPDWORD pcchValueBuf); // in/out buffer char
acter count
UINT WINAPI MsiGetPatchInfoW( UINT WINAPI MsiGetPatchInfoW(
LPCWSTR szPatch, // patch code __in LPCWSTR szPatch, // patch code
LPCWSTR szAttribute, // attribute name, case-sensitive __in LPCWSTR szAttribute, // attribute name, cas
LPWSTR lpValueBuf, // returned value, NULL if not desired e-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPWSTR lpValueBuf, // returned value, NUL
L if not desired
__inout_opt LPDWORD pcchValueBuf); // in/out buffer char
acter count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetPatchInfo MsiGetPatchInfoW #define MsiGetPatchInfo MsiGetPatchInfoW
#else #else
#define MsiGetPatchInfo MsiGetPatchInfoA #define MsiGetPatchInfo MsiGetPatchInfoA
#endif // !UNICODE #endif // !UNICODE
// Enumerate all patches for a product in contexts visible to caller // Enumerate all patches for a product in contexts visible to caller
UINT WINAPI MsiEnumPatchesA( UINT WINAPI MsiEnumPatchesA(
LPCSTR szProduct, __in LPCSTR szProduct,
DWORD iPatchIndex, __in DWORD iPatchIndex,
LPSTR lpPatchBuf, __out_ecount(MAX_GUID_CHARS+1) LPSTR lpPatchBuf,
LPSTR lpTransformsBuf, __out_ecount(*pcchTransformsBuf) LPSTR lpTransformsBuf,
DWORD *pcchTransformsBuf); __inout LPDWORD pcchTransformsBuf);
UINT WINAPI MsiEnumPatchesW( UINT WINAPI MsiEnumPatchesW(
LPCWSTR szProduct, __in LPCWSTR szProduct,
DWORD iPatchIndex, __in DWORD iPatchIndex,
LPWSTR lpPatchBuf, __out_ecount(MAX_GUID_CHARS+1) LPWSTR lpPatchBuf,
LPWSTR lpTransformsBuf, __out_ecount(*pcchTransformsBuf) LPWSTR lpTransformsBuf,
DWORD *pcchTransformsBuf); __inout LPDWORD pcchTransformsBuf);
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumPatches MsiEnumPatchesW #define MsiEnumPatches MsiEnumPatchesW
#else #else
#define MsiEnumPatches MsiEnumPatchesA #define MsiEnumPatches MsiEnumPatchesA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 300) #if (_WIN32_MSI >= 300)
// Remove one or more patches from the specified product. // Remove one or more patches from the specified product.
UINT WINAPI MsiRemovePatchesA( UINT WINAPI MsiRemovePatchesA(
LPCSTR szPatchList, // semi-colon delimited list of patches __in LPCSTR szPatchList, // semi-colon delimited list of patches
to remove; patch can be referenced by patch package path or Patch GUID to remove; patch can be referenced by patch package path or Patch GUID
LPCSTR szProductCode, // ProductCode GUID of product with patc __in LPCSTR szProductCode, // ProductCode GUID of product with patc
h to remove h to remove
INSTALLTYPE eUninstallType, // type of patch uninstall to perform. __in INSTALLTYPE eUninstallType, // type of patch uninstall to perform.
Must be INSTALLTYPE_SINGLE_INSTANCE. Must be INSTALLTYPE_SINGLE_INSTANCE.
LPCSTR szPropertyList); // command line property settings using __in_opt LPCSTR szPropertyList); // command line property settings using
PROPERTY=VALUE pairs PROPERTY=VALUE pairs
UINT WINAPI MsiRemovePatchesW( UINT WINAPI MsiRemovePatchesW(
LPCWSTR szPatchList, // semi-colon delimited list of patches __in LPCWSTR szPatchList, // semi-colon delimited list of patches
to remove; patch can be referenced by patch package path or Patch GUID to remove; patch can be referenced by patch package path or Patch GUID
LPCWSTR szProductCode, // ProductCode GUID of product with pat __in LPCWSTR szProductCode, // ProductCode GUID of product with pat
ch to remove ch to remove
INSTALLTYPE eUninstallType, // type of patch uninstall to perform. __in INSTALLTYPE eUninstallType, // type of patch uninstall to perform.
Must be INSTALLTYPE_SINGLE_INSTANCE. Must be INSTALLTYPE_SINGLE_INSTANCE.
LPCWSTR szPropertyList); // command line property settings using __in_opt LPCWSTR szPropertyList); // command line property settings using
PROPERTY=VALUE pairs PROPERTY=VALUE pairs
#ifdef UNICODE #ifdef UNICODE
#define MsiRemovePatches MsiRemovePatchesW #define MsiRemovePatches MsiRemovePatchesW
#else #else
#define MsiRemovePatches MsiRemovePatchesA #define MsiRemovePatches MsiRemovePatchesA
#endif // !UNICODE #endif // !UNICODE
// Extract XML data from the patch // Extract XML data from the patch
UINT WINAPI MsiExtractPatchXMLDataA( UINT WINAPI MsiExtractPatchXMLDataA(
LPCSTR szPatchPath, // Patch file to open __in LPCSTR szPatchPath, // Patch file to open
DWORD dwReserved, // Reserved __reserved DWORD dwReserved, // Reserved
LPSTR szXMLData, // Buffer that gets the XML data __out_ecount_opt(*pcchXMLData) LPSTR szXMLData, // Buffer that gets the
DWORD *pcchXMLData); // in/out XML data buffer character count XML data
__inout_opt LPDWORD pcchXMLData); // in/out XML data buf
fer character count
UINT WINAPI MsiExtractPatchXMLDataW( UINT WINAPI MsiExtractPatchXMLDataW(
LPCWSTR szPatchPath, // Patch file to open __in LPCWSTR szPatchPath, // Patch file to open
DWORD dwReserved, // Reserved __reserved DWORD dwReserved, // Reserved
LPWSTR szXMLData, // Buffer that gets the XML data __out_ecount_opt(*pcchXMLData) LPWSTR szXMLData, // Buffer that gets the
DWORD *pcchXMLData); // in/out XML data buffer character count XML data
__inout_opt LPDWORD pcchXMLData); // in/out XML data buf
fer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiExtractPatchXMLData MsiExtractPatchXMLDataW #define MsiExtractPatchXMLData MsiExtractPatchXMLDataW
#else #else
#define MsiExtractPatchXMLData MsiExtractPatchXMLDataA #define MsiExtractPatchXMLData MsiExtractPatchXMLDataA
#endif // !UNICODE #endif // !UNICODE
// Retrieve extended patch info for a particular patch applied // Retrieve extended patch info for a particular patch applied
// to a particular product instance. // to a particular product instance.
UINT WINAPI MsiGetPatchInfoExA( UINT WINAPI MsiGetPatchInfoExA(
LPCSTR szPatchCode, // target patch to query __in LPCSTR szPatchCode, // target patch to query
LPCSTR szProductCode, // target product of patch application __in LPCSTR szProductCode, // target product of patch a
LPCSTR szUserSid, // Account of this product instance pplication
MSIINSTALLCONTEXT dwContext, // context to query for product and patch __in_opt LPCSTR szUserSid, // Account of this product i
LPCSTR szProperty, // property of patch to retrieve nstance
LPSTR lpValue, // address buffer for data __in MSIINSTALLCONTEXT dwContext, // context to query for pr
DWORD *pcchValue); // in/out value buffer character count oduct and patch
__in LPCSTR szProperty, // property of patch to retr
ieve
__out_ecount_opt(*pcchValue) LPSTR lpValue, // address buffer for data
__inout_opt LPDWORD pcchValue); // in/out value buffer cha
racter count
UINT WINAPI MsiGetPatchInfoExW( UINT WINAPI MsiGetPatchInfoExW(
LPCWSTR szPatchCode, // target patch to query __in LPCWSTR szPatchCode, // target patch to query
LPCWSTR szProductCode, // target product of patch application __in LPCWSTR szProductCode, // target product of patch
LPCWSTR szUserSid, // Account of this product instance application
MSIINSTALLCONTEXT dwContext, // context to query for product and patch __in_opt LPCWSTR szUserSid, // Account of this product
LPCWSTR szProperty, // property of patch to retrieve instance
LPWSTR lpValue, // address buffer for data __in MSIINSTALLCONTEXT dwContext, // context to query for pr
DWORD *pcchValue); // in/out value buffer character count oduct and patch
__in LPCWSTR szProperty, // property of patch to ret
rieve
__out_ecount_opt(*pcchValue) LPWSTR lpValue, // address buffer for data
__inout_opt LPDWORD pcchValue); // in/out value buffer cha
racter count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetPatchInfoEx MsiGetPatchInfoExW #define MsiGetPatchInfoEx MsiGetPatchInfoExW
#else #else
#define MsiGetPatchInfoEx MsiGetPatchInfoExA #define MsiGetPatchInfoEx MsiGetPatchInfoExA
#endif // !UNICODE #endif // !UNICODE
// Apply multiple patches to the specified product or to all eligible products // Apply multiple patches to the specified product or to all eligible products
// on the machine // on the machine
UINT WINAPI MsiApplyMultiplePatchesA( UINT WINAPI MsiApplyMultiplePatchesA(
LPCSTR szPatchPackages, // Patches to apply __in LPCSTR szPatchPackages, // Patches to apply
LPCSTR szProductCode, // target product of patch application __in_opt LPCSTR szProductCode, // target product of patch applicatio
LPCSTR szPropertiesList); // Properties settings n
__in_opt LPCSTR szPropertiesList); // Properties settings
UINT WINAPI MsiApplyMultiplePatchesW( UINT WINAPI MsiApplyMultiplePatchesW(
LPCWSTR szPatchPackages, // Patches to apply __in LPCWSTR szPatchPackages, // Patches to apply
LPCWSTR szProductCode, // target product of patch application __in_opt LPCWSTR szProductCode, // target product of patch applicati
LPCWSTR szPropertiesList); // Properties settings on
__in_opt LPCWSTR szPropertiesList); // Properties settings
#ifdef UNICODE #ifdef UNICODE
#define MsiApplyMultiplePatches MsiApplyMultiplePatchesW #define MsiApplyMultiplePatches MsiApplyMultiplePatchesW
#else #else
#define MsiApplyMultiplePatches MsiApplyMultiplePatchesA #define MsiApplyMultiplePatches MsiApplyMultiplePatchesA
#endif // !UNICODE #endif // !UNICODE
// Determines which patches apply and in what sequence for the provided set of // Determines which patches apply and in what sequence for the provided set of
// patch files, XML files, and/or XML blobs. Patches already applied to the prod uct // patch files, XML files, and/or XML blobs. Patches already applied to the prod uct
// are taken into account // are taken into account
UINT WINAPI MsiDeterminePatchSequenceA( UINT WINAPI MsiDeterminePatchSequenceA(
LPCSTR szProductCode, // Product code GUID of an installed pr __in LPCSTR szProductCode, // Product c
oduct ode GUID of an installed product
LPCSTR szUserSid, // User account we're interested in __in_opt LPCSTR szUserSid, // User acco
MSIINSTALLCONTEXT dwContext, // Installation context we're interes unt we're interested in
ted in __in MSIINSTALLCONTEXT dwContext, // Install
DWORD cPatchInfo, // Number of patches in the array ation context we're interested in
PMSIPATCHSEQUENCEINFOA pPatchInfo); // Array of patch sequence informatio __in DWORD cPatchInfo, // Number
n data of patches in the array
__inout_ecount(cPatchInfo) PMSIPATCHSEQUENCEINFOA pPatchInfo); // Array o
f patch sequence information data
UINT WINAPI MsiDeterminePatchSequenceW( UINT WINAPI MsiDeterminePatchSequenceW(
LPCWSTR szProductCode, // Product code GUID of an installed p __in LPCWSTR szProductCode, // Product
roduct code GUID of an installed product
LPCWSTR szUserSid, // User account we're interested in __in_opt LPCWSTR szUserSid, // User acc
MSIINSTALLCONTEXT dwContext, // Installation context we're interes ount we're interested in
ted in __in MSIINSTALLCONTEXT dwContext, // Install
DWORD cPatchInfo, // Number of patches in the array ation context we're interested in
PMSIPATCHSEQUENCEINFOW pPatchInfo); // Array of patch sequence informatio __in DWORD cPatchInfo, // Number
n data of patches in the array
__inout_ecount(cPatchInfo) PMSIPATCHSEQUENCEINFOW pPatchInfo); // Array o
f patch sequence information data
#ifdef UNICODE #ifdef UNICODE
#define MsiDeterminePatchSequence MsiDeterminePatchSequenceW #define MsiDeterminePatchSequence MsiDeterminePatchSequenceW
#else #else
#define MsiDeterminePatchSequence MsiDeterminePatchSequenceA #define MsiDeterminePatchSequence MsiDeterminePatchSequenceA
#endif // !UNICODE #endif // !UNICODE
// Determines which patches apply and what sequence for the provided set of patc h files, // Determines which patches apply and what sequence for the provided set of patc h files,
// XML files, and/or XML blobs. Does not take into account either products or pa tches // XML files, and/or XML blobs. Does not take into account either products or pa tches
// already installed on the machine. // already installed on the machine.
UINT WINAPI MsiDetermineApplicablePatchesA( UINT WINAPI MsiDetermineApplicablePatchesA(
LPCSTR szProductPackagePath, // Fully qualified path to a product MS __in LPCSTR szProductPackagePath, // Fully qua
I database lified path to a product MSI database
DWORD cPatchInfo, // Number of patches in the array __in DWORD cPatchInfo, // Number
PMSIPATCHSEQUENCEINFOA pPatchInfo); // Array of patch sequence informatio of patches in the array
n data __inout_ecount(cPatchInfo) PMSIPATCHSEQUENCEINFOA pPatchInfo); // Array o
f patch sequence information data
UINT WINAPI MsiDetermineApplicablePatchesW( UINT WINAPI MsiDetermineApplicablePatchesW(
LPCWSTR szProductPackagePath, // Fully qualified path to a product M __in LPCWSTR szProductPackagePath, // Fully qu
SI database alified path to a product MSI database
DWORD cPatchInfo, // Number of patches in the array __in DWORD cPatchInfo, // Number
PMSIPATCHSEQUENCEINFOW pPatchInfo); // Array of patch sequence informatio of patches in the array
n data __inout_ecount(cPatchInfo) PMSIPATCHSEQUENCEINFOW pPatchInfo); // Array o
f patch sequence information data
#ifdef UNICODE #ifdef UNICODE
#define MsiDetermineApplicablePatches MsiDetermineApplicablePatchesW #define MsiDetermineApplicablePatches MsiDetermineApplicablePatchesW
#else #else
#define MsiDetermineApplicablePatches MsiDetermineApplicablePatchesA #define MsiDetermineApplicablePatches MsiDetermineApplicablePatchesA
#endif // !UNICODE #endif // !UNICODE
// Enumerates all patches applied for a single product or all products based upo n // Enumerates all patches applied for a single product or all products based upo n
// enumeration context and filter. // enumeration context and filter.
UINT WINAPI MsiEnumPatchesExA( UINT WINAPI MsiEnumPatchesExA(
LPCSTR szProductCode, // Enumerate patches on instances of this prod __in_opt LPCSTR szProductCode, // Enume
uct rate patches on instances of this product
LPCSTR szUserSid, // Account for enumeration __in_opt LPCSTR szUserSid, // Accou
DWORD dwContext, // Contexts for enumeration nt for enumeration
DWORD dwFilter, // Filter for enumeration __in DWORD dwContext, // Con
DWORD dwIndex, // Index for enumeration texts for enumeration
CHAR szPatchCode[39], // Enumerated patch code __in DWORD dwFilter, // Fil
CHAR szTargetProductCode[39], // Enumerated patch's product code ter for enumeration
MSIINSTALLCONTEXT *pdwTargetProductContext, //Enumerated patch's contex __in DWORD dwIndex, // Ind
t ex for enumeration
LPSTR szTargetUserSid, // Enumerated patch's user account __out_ecount_opt(MAX_GUID_CHARS+1) CHAR szPatchCode[39], // Enume
LPDWORD pcchTargetUserSid); // in/out character count of szTargetUserSid rated patch code
__out_ecount_opt(MAX_GUID_CHARS+1) CHAR szTargetProductCode[39], // Enume
rated patch's product code
__out_opt MSIINSTALLCONTEXT *pdwTargetProductContext, //Enum
erated patch's context
__out_ecount_opt(*pcchTargetUserSid) LPSTR szTargetUserSid, // Enume
rated patch's user account
__inout_opt LPDWORD pcchTargetUserSid); // in/
out character count of szTargetUserSid
UINT WINAPI MsiEnumPatchesExW( UINT WINAPI MsiEnumPatchesExW(
LPCWSTR szProductCode, // Enumerate patches on instances of this pro __in_opt LPCWSTR szProductCode, // Enum
duct erate patches on instances of this product
LPCWSTR szUserSid, // Account for enumeration __in_opt LPCWSTR szUserSid, // Acco
DWORD dwContext, // Contexts for enumeration unt for enumeration
DWORD dwFilter, // Filter for enumeration __in DWORD dwContext, // Con
DWORD dwIndex, // Index for enumeration texts for enumeration
WCHAR szPatchCode[39], // Enumerated patch code __in DWORD dwFilter, // Fil
WCHAR szTargetProductCode[39], // Enumerated patch's product code ter for enumeration
MSIINSTALLCONTEXT *pdwTargetProductContext, //Enumerated patch's contex __in DWORD dwIndex, // Ind
t ex for enumeration
LPWSTR szTargetUserSid, // Enumerated patch's user account __out_ecount_opt(MAX_GUID_CHARS+1) WCHAR szPatchCode[39], // Enum
LPDWORD pcchTargetUserSid); // in/out character count of szTargetUserSid erated patch code
__out_ecount_opt(MAX_GUID_CHARS+1) WCHAR szTargetProductCode[39], // Enum
erated patch's product code
__out_opt MSIINSTALLCONTEXT *pdwTargetProductContext, //Enum
erated patch's context
__out_ecount_opt(*pcchTargetUserSid) LPWSTR szTargetUserSid, // Enum
erated patch's user account
__inout_opt LPDWORD pcchTargetUserSid); // in/
out character count of szTargetUserSid
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumPatchesEx MsiEnumPatchesExW #define MsiEnumPatchesEx MsiEnumPatchesExW
#else #else
#define MsiEnumPatchesEx MsiEnumPatchesExA #define MsiEnumPatchesEx MsiEnumPatchesExA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 300) #endif //(_WIN32_MSI >= 300)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to query and configure a feature within a product. // Functions to query and configure a feature within a product.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Return the installed state for a product feature // Return the installed state for a product feature
INSTALLSTATE WINAPI MsiQueryFeatureStateA( INSTALLSTATE WINAPI MsiQueryFeatureStateA(
LPCSTR szProduct, __in LPCSTR szProduct,
LPCSTR szFeature); __in LPCSTR szFeature);
INSTALLSTATE WINAPI MsiQueryFeatureStateW( INSTALLSTATE WINAPI MsiQueryFeatureStateW(
LPCWSTR szProduct, __in LPCWSTR szProduct,
LPCWSTR szFeature); __in LPCWSTR szFeature);
#ifdef UNICODE #ifdef UNICODE
#define MsiQueryFeatureState MsiQueryFeatureStateW #define MsiQueryFeatureState MsiQueryFeatureStateW
#else #else
#define MsiQueryFeatureState MsiQueryFeatureStateA #define MsiQueryFeatureState MsiQueryFeatureStateA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 300) #if (_WIN32_MSI >= 300)
// Retrieve the installed state for a product feature in a particular product in stance // Retrieve the installed state for a product feature in a particular product in stance
UINT WINAPI MsiQueryFeatureStateExA( UINT WINAPI MsiQueryFeatureStateExA(
LPCSTR szProductCode, // Information is queried on this produ __in LPCSTR szProductCode, // Information is queried on th
ct is product
LPCSTR szUserSid, // Account of this product instance __in_opt LPCSTR szUserSid, // Account of this product inst
MSIINSTALLCONTEXT dwContext,// Context of this product instance ance
LPCSTR szFeature, // Name of the feature being queried __in MSIINSTALLCONTEXT dwContext, // Context of this product in
INSTALLSTATE *pdwState); // State value stance
__in LPCSTR szFeature, // Name of the feature being qu
eried
__out_opt INSTALLSTATE *pdwState); // State value
UINT WINAPI MsiQueryFeatureStateExW( UINT WINAPI MsiQueryFeatureStateExW(
LPCWSTR szProductCode, // Information is queried on this prod __in LPCWSTR szProductCode, // Information is queried on t
uct his product
LPCWSTR szUserSid, // Account of this product instance __in_opt LPCWSTR szUserSid, // Account of this product ins
MSIINSTALLCONTEXT dwContext,// Context of this product instance tance
LPCWSTR szFeature, // Name of the feature being queried __in MSIINSTALLCONTEXT dwContext, // Context of this product in
INSTALLSTATE *pdwState); // State value stance
__in LPCWSTR szFeature, // Name of the feature being q
ueried
__out_opt INSTALLSTATE *pdwState); // State value
#ifdef UNICODE #ifdef UNICODE
#define MsiQueryFeatureStateEx MsiQueryFeatureStateExW #define MsiQueryFeatureStateEx MsiQueryFeatureStateExW
#else #else
#define MsiQueryFeatureStateEx MsiQueryFeatureStateExA #define MsiQueryFeatureStateEx MsiQueryFeatureStateExA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 300) #endif //(_WIN32_MSI >= 300)
// Indicate intent to use a product feature, increments usage count // Indicate intent to use a product feature, increments usage count
// Prompts for CD if not loaded, does not install feature // Prompts for CD if not loaded, does not install feature
INSTALLSTATE WINAPI MsiUseFeatureA( INSTALLSTATE WINAPI MsiUseFeatureA(
LPCSTR szProduct, __in LPCSTR szProduct,
LPCSTR szFeature); __in LPCSTR szFeature);
INSTALLSTATE WINAPI MsiUseFeatureW( INSTALLSTATE WINAPI MsiUseFeatureW(
LPCWSTR szProduct, __in LPCWSTR szProduct,
LPCWSTR szFeature); __in LPCWSTR szFeature);
#ifdef UNICODE #ifdef UNICODE
#define MsiUseFeature MsiUseFeatureW #define MsiUseFeature MsiUseFeatureW
#else #else
#define MsiUseFeature MsiUseFeatureA #define MsiUseFeature MsiUseFeatureA
#endif // !UNICODE #endif // !UNICODE
// Indicate intent to use a product feature, increments usage count // Indicate intent to use a product feature, increments usage count
// Prompts for CD if not loaded, does not install feature // Prompts for CD if not loaded, does not install feature
// Allows for bypassing component detection where performance is critical // Allows for bypassing component detection where performance is critical
INSTALLSTATE WINAPI MsiUseFeatureExA( INSTALLSTATE WINAPI MsiUseFeatureExA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szFeature, // feature ID __in LPCSTR szFeature, // feature ID
DWORD dwInstallMode, // INSTALLMODE_NODETECTION, else 0 __in DWORD dwInstallMode, // INSTALLMODE_NODETECTION, else 0
DWORD dwReserved); // reserved, must be 0 __reserved DWORD dwReserved); // reserved, must be 0
INSTALLSTATE WINAPI MsiUseFeatureExW( INSTALLSTATE WINAPI MsiUseFeatureExW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szFeature, // feature ID __in LPCWSTR szFeature, // feature ID
DWORD dwInstallMode, // INSTALLMODE_NODETECTION, else 0 __in DWORD dwInstallMode, // INSTALLMODE_NODETECTION, else 0
DWORD dwReserved); // reserved, must be 0 __reserved DWORD dwReserved); // reserved, must be 0
#ifdef UNICODE #ifdef UNICODE
#define MsiUseFeatureEx MsiUseFeatureExW #define MsiUseFeatureEx MsiUseFeatureExW
#else #else
#define MsiUseFeatureEx MsiUseFeatureExA #define MsiUseFeatureEx MsiUseFeatureExA
#endif // !UNICODE #endif // !UNICODE
// Return the usage metrics for a product feature // Return the usage metrics for a product feature
UINT WINAPI MsiGetFeatureUsageA( UINT WINAPI MsiGetFeatureUsageA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szFeature, // feature ID __in LPCSTR szFeature, // feature ID
DWORD *pdwUseCount, // returned use count __out_opt LPDWORD pdwUseCount, // returned use count
WORD *pwDateUsed); // last date used (DOS date format) __out_opt LPWORD pwDateUsed); // last date used (DOS date form
at)
UINT WINAPI MsiGetFeatureUsageW( UINT WINAPI MsiGetFeatureUsageW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szFeature, // feature ID __in LPCWSTR szFeature, // feature ID
DWORD *pdwUseCount, // returned use count __out_opt LPDWORD pdwUseCount, // returned use count
WORD *pwDateUsed); // last date used (DOS date format) __out_opt LPWORD pwDateUsed); // last date used (DOS date form
at)
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFeatureUsage MsiGetFeatureUsageW #define MsiGetFeatureUsage MsiGetFeatureUsageW
#else #else
#define MsiGetFeatureUsage MsiGetFeatureUsageA #define MsiGetFeatureUsage MsiGetFeatureUsageA
#endif // !UNICODE #endif // !UNICODE
// Force the installed state for a product feature // Force the installed state for a product feature
UINT WINAPI MsiConfigureFeatureA( UINT WINAPI MsiConfigureFeatureA(
LPCSTR szProduct, __in LPCSTR szProduct,
LPCSTR szFeature, __in LPCSTR szFeature,
INSTALLSTATE eInstallState); // local/source/default/absent/lock/uncach __in INSTALLSTATE eInstallState); // local/source/default/absent/lock/u
e ncache
UINT WINAPI MsiConfigureFeatureW( UINT WINAPI MsiConfigureFeatureW(
LPCWSTR szProduct, __in LPCWSTR szProduct,
LPCWSTR szFeature, __in LPCWSTR szFeature,
INSTALLSTATE eInstallState); // local/source/default/absent/lock/uncach __in INSTALLSTATE eInstallState); // local/source/default/absent/lock/u
e ncache
#ifdef UNICODE #ifdef UNICODE
#define MsiConfigureFeature MsiConfigureFeatureW #define MsiConfigureFeature MsiConfigureFeatureW
#else #else
#define MsiConfigureFeature MsiConfigureFeatureA #define MsiConfigureFeature MsiConfigureFeatureA
#endif // !UNICODE #endif // !UNICODE
// Reinstall feature, used to validate or correct problems // Reinstall feature, used to validate or correct problems
UINT WINAPI MsiReinstallFeatureA( UINT WINAPI MsiReinstallFeatureA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szFeature, // feature ID, NULL for entire product __in LPCSTR szFeature, // feature ID, NULL for entire product
DWORD dwReinstallMode); // one or more REINSTALLMODE modes __in DWORD dwReinstallMode); // one or more REINSTALLMODE modes
UINT WINAPI MsiReinstallFeatureW( UINT WINAPI MsiReinstallFeatureW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szFeature, // feature ID, NULL for entire product __in LPCWSTR szFeature, // feature ID, NULL for entire produc
DWORD dwReinstallMode); // one or more REINSTALLMODE modes t
__in DWORD dwReinstallMode); // one or more REINSTALLMODE modes
#ifdef UNICODE #ifdef UNICODE
#define MsiReinstallFeature MsiReinstallFeatureW #define MsiReinstallFeature MsiReinstallFeatureW
#else #else
#define MsiReinstallFeature MsiReinstallFeatureA #define MsiReinstallFeature MsiReinstallFeatureA
#endif // !UNICODE #endif // !UNICODE
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to query a component. For functions that return a path to // Functions to query a component. For functions that return a path to
// a particular component, the state of the feature being used should // a particular component, the state of the feature being used should
// have been checked previously. // have been checked previously.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Return full component path, performing any necessary installation // Return full component path, performing any necessary installation
// calls MsiQueryFeatureState to detect that all components are installed // calls MsiQueryFeatureState to detect that all components are installed
// then calls MsiConfigureFeature if any of its components are uninstalled // then calls MsiConfigureFeature if any of its components are uninstalled
// then calls MsiLocateComponent to obtain the path the its key file // then calls MsiLocateComponent to obtain the path the its key file
UINT WINAPI MsiProvideComponentA( UINT WINAPI MsiProvideComponentA(
LPCSTR szProduct, // product code in case install required __in LPCSTR szProduct, // product code
LPCSTR szFeature, // feature ID in case install required in case install required
LPCSTR szComponent, // component ID __in LPCSTR szFeature, // feature ID in
DWORD dwInstallMode,// either of type INSTALLMODE or a combination case install required
of the REINSTALLMODE flags __in LPCSTR szComponent, // component ID
LPSTR lpPathBuf, // returned path, NULL if not desired __in DWORD dwInstallMode, // either of t
DWORD *pcchPathBuf);// in/out buffer character count ype INSTALLMODE or a combination of the REINSTALLMODE flags
__out_ecount_opt(*pcchPathBuf) LPSTR lpPathBuf, // returned path
, NULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buff
er character count
UINT WINAPI MsiProvideComponentW( UINT WINAPI MsiProvideComponentW(
LPCWSTR szProduct, // product code in case install required __in LPCWSTR szProduct, // product code
LPCWSTR szFeature, // feature ID in case install required in case install required
LPCWSTR szComponent, // component ID __in LPCWSTR szFeature, // feature ID i
DWORD dwInstallMode,// either of type INSTALLMODE or a combination n case install required
of the REINSTALLMODE flags __in LPCWSTR szComponent, // component ID
LPWSTR lpPathBuf, // returned path, NULL if not desired __in DWORD dwInstallMode, // either of t
DWORD *pcchPathBuf);// in/out buffer character count ype INSTALLMODE or a combination of the REINSTALLMODE flags
__out_ecount_opt(*pcchPathBuf) LPWSTR lpPathBuf, // returned pat
h, NULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buff
er character count
#ifdef UNICODE #ifdef UNICODE
#define MsiProvideComponent MsiProvideComponentW #define MsiProvideComponent MsiProvideComponentW
#else #else
#define MsiProvideComponent MsiProvideComponentA #define MsiProvideComponent MsiProvideComponentA
#endif // !UNICODE #endif // !UNICODE
// Return full component path for a qualified component, performing any necessar y installation. // Return full component path for a qualified component, performing any necessar y installation.
// Prompts for source if necessary and increments the usage count for the featur e. // Prompts for source if necessary and increments the usage count for the featur e.
UINT WINAPI MsiProvideQualifiedComponentA( UINT WINAPI MsiProvideQualifiedComponentA(
LPCSTR szCategory, // component category ID __in LPCSTR szCategory, // component catego
LPCSTR szQualifier, // specifies which component to access ry ID
DWORD dwInstallMode,// either of type INSTALLMODE or a combination __in LPCSTR szQualifier, // specifies which
of the REINSTALLMODE flags component to access
LPSTR lpPathBuf, // returned path, NULL if not desired __in DWORD dwInstallMode, // either of type
DWORD *pcchPathBuf); // in/out buffer character count INSTALLMODE or a combination of the REINSTALLMODE flags
__out_ecount_opt(*pcchPathBuf) LPSTR lpPathBuf, // returned path, N
ULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buffer
character count
UINT WINAPI MsiProvideQualifiedComponentW( UINT WINAPI MsiProvideQualifiedComponentW(
LPCWSTR szCategory, // component category ID __in LPCWSTR szCategory, // component categ
LPCWSTR szQualifier, // specifies which component to access ory ID
DWORD dwInstallMode,// either of type INSTALLMODE or a combination __in LPCWSTR szQualifier, // specifies which
of the REINSTALLMODE flags component to access
LPWSTR lpPathBuf, // returned path, NULL if not desired __in DWORD dwInstallMode, // either of type
DWORD *pcchPathBuf); // in/out buffer character count INSTALLMODE or a combination of the REINSTALLMODE flags
__out_ecount_opt(*pcchPathBuf) LPWSTR lpPathBuf, // returned path,
NULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buffer
character count
#ifdef UNICODE #ifdef UNICODE
#define MsiProvideQualifiedComponent MsiProvideQualifiedComponentW #define MsiProvideQualifiedComponent MsiProvideQualifiedComponentW
#else #else
#define MsiProvideQualifiedComponent MsiProvideQualifiedComponentA #define MsiProvideQualifiedComponent MsiProvideQualifiedComponentA
#endif // !UNICODE #endif // !UNICODE
// Return full component path for a qualified component, performing any necessar y installation. // Return full component path for a qualified component, performing any necessar y installation.
// Prompts for source if necessary and increments the usage count for the featur e. // Prompts for source if necessary and increments the usage count for the featur e.
// The szProduct parameter specifies the product to match that has published the qualified // The szProduct parameter specifies the product to match that has published the qualified
// component. If null, this API works the same as MsiProvideQualifiedComponent. // component. If null, this API works the same as MsiProvideQualifiedComponent.
UINT WINAPI MsiProvideQualifiedComponentExA( UINT WINAPI MsiProvideQualifiedComponentExA(
LPCSTR szCategory, // component category ID __in LPCSTR szCategory, // component catego
LPCSTR szQualifier, // specifies which component to access ry ID
DWORD dwInstallMode,// either of type INSTALLMODE or a combination __in LPCSTR szQualifier, // specifies which
of the REINSTALLMODE flags component to access
LPCSTR szProduct, // the product code __in DWORD dwInstallMode, // either of type
DWORD dwUnused1, // not used, must be zero INSTALLMODE or a combination of the REINSTALLMODE flags
DWORD dwUnused2, // not used, must be zero __in_opt LPCSTR szProduct, // the product code
LPSTR lpPathBuf, // returned path, NULL if not desired __reserved DWORD dwUnused1, // not used, must
DWORD *pcchPathBuf); // in/out buffer character count be zero
__reserved DWORD dwUnused2, // not used, must
be zero
__out_ecount_opt(*pcchPathBuf) LPSTR lpPathBuf, // returned path, N
ULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buffer
character count
UINT WINAPI MsiProvideQualifiedComponentExW( UINT WINAPI MsiProvideQualifiedComponentExW(
LPCWSTR szCategory, // component category ID __in LPCWSTR szCategory, // component categ
LPCWSTR szQualifier, // specifies which component to access ory ID
DWORD dwInstallMode,// either of type INSTALLMODE or a combination __in LPCWSTR szQualifier, // specifies which
of the REINSTALLMODE flags component to access
LPCWSTR szProduct, // the product code __in DWORD dwInstallMode, // either of type
DWORD dwUnused1, // not used, must be zero INSTALLMODE or a combination of the REINSTALLMODE flags
DWORD dwUnused2, // not used, must be zero __in_opt LPCWSTR szProduct, // the product cod
LPWSTR lpPathBuf, // returned path, NULL if not desired e
DWORD *pcchPathBuf); // in/out buffer character count __reserved DWORD dwUnused1, // not used, must
be zero
__reserved DWORD dwUnused2, // not used, must
be zero
__out_ecount_opt(*pcchPathBuf) LPWSTR lpPathBuf, // returned path,
NULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buffer
character count
#ifdef UNICODE #ifdef UNICODE
#define MsiProvideQualifiedComponentEx MsiProvideQualifiedComponentExW #define MsiProvideQualifiedComponentEx MsiProvideQualifiedComponentExW
#else #else
#define MsiProvideQualifiedComponentEx MsiProvideQualifiedComponentExA #define MsiProvideQualifiedComponentEx MsiProvideQualifiedComponentExA
#endif // !UNICODE #endif // !UNICODE
// Return full path to an installed component // Return full path to an installed component
INSTALLSTATE WINAPI MsiGetComponentPathA( INSTALLSTATE WINAPI MsiGetComponentPathA(
LPCSTR szProduct, // product code for client product __in LPCSTR szProduct, // product code for clien
LPCSTR szComponent, // component Id, string GUID t product
LPSTR lpPathBuf, // returned path __in LPCSTR szComponent, // component Id, string G
DWORD *pcchBuf); // in/out buffer character count UID
__out_ecount_opt(*pcchBuf) LPSTR lpPathBuf, // returned path
__inout_opt LPDWORD pcchBuf); // in/out buffer charac
ter count
INSTALLSTATE WINAPI MsiGetComponentPathW( INSTALLSTATE WINAPI MsiGetComponentPathW(
LPCWSTR szProduct, // product code for client product __in LPCWSTR szProduct, // product code for clie
LPCWSTR szComponent, // component Id, string GUID nt product
LPWSTR lpPathBuf, // returned path __in LPCWSTR szComponent, // component Id, string
DWORD *pcchBuf); // in/out buffer character count GUID
__out_ecount_opt(*pcchBuf) LPWSTR lpPathBuf, // returned path
__inout_opt LPDWORD pcchBuf); // in/out buffer charac
ter count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetComponentPath MsiGetComponentPathW #define MsiGetComponentPath MsiGetComponentPathW
#else #else
#define MsiGetComponentPath MsiGetComponentPathA #define MsiGetComponentPath MsiGetComponentPathA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
#define MSIASSEMBLYINFO_NETASSEMBLY 0 // Net assemblies #define MSIASSEMBLYINFO_NETASSEMBLY 0 // Net assemblies
#define MSIASSEMBLYINFO_WIN32ASSEMBLY 1 // Win32 assemblies #define MSIASSEMBLYINFO_WIN32ASSEMBLY 1 // Win32 assemblies
// Return full component path for an assembly installed via the WI, performing a ny necessary installation. // Return full component path for an assembly installed via the WI, performing a ny necessary installation.
// Prompts for source if necessary and increments the usage count for the featur e. // Prompts for source if necessary and increments the usage count for the featur e.
// The szAssemblyName parameter specifies the stringized assembly name. // The szAssemblyName parameter specifies the stringized assembly name.
// The szAppContext is the full path to the .cfg file or the app exe to which th e assembly being requested // The szAppContext is the full path to the .cfg file or the app exe to which th e assembly being requested
// has been privatised to, which is null for global assemblies // has been privatised to, which is null for global assemblies
UINT WINAPI MsiProvideAssemblyA( UINT WINAPI MsiProvideAssemblyA(
LPCSTR szAssemblyName, // stringized assembly name __in LPCSTR szAssemblyName, // stringized assemb
LPCSTR szAppContext, // specifies the full path to the parent asm's . ly name
cfg file, null for global assemblies __in_opt LPCSTR szAppContext, // specifies the ful
DWORD dwInstallMode,// either of type INSTALLMODE or a combination l path to the parent asm's .cfg file, null for global assemblies
of the REINSTALLMODE flags __in DWORD dwInstallMode, // either of type
DWORD dwAssemblyInfo, // assembly info, including assembly type INSTALLMODE or a combination of the REINSTALLMODE flags
LPSTR lpPathBuf, // returned path, NULL if not desired __in DWORD dwAssemblyInfo, // assembly info,
DWORD *pcchPathBuf); // in/out buffer character count including assembly type
__out_ecount_opt(*pcchPathBuf) LPSTR lpPathBuf, // returned path, NU
LL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buffer c
haracter count
UINT WINAPI MsiProvideAssemblyW( UINT WINAPI MsiProvideAssemblyW(
LPCWSTR szAssemblyName, // stringized assembly name __in LPCWSTR szAssemblyName, // stringized assem
LPCWSTR szAppContext, // specifies the full path to the parent asm's bly name
.cfg file, null for global assemblies __in_opt LPCWSTR szAppContext, // specifies the fu
DWORD dwInstallMode,// either of type INSTALLMODE or a combination ll path to the parent asm's .cfg file, null for global assemblies
of the REINSTALLMODE flags __in DWORD dwInstallMode, // either of type
DWORD dwAssemblyInfo, // assembly info, including assembly type INSTALLMODE or a combination of the REINSTALLMODE flags
LPWSTR lpPathBuf, // returned path, NULL if not desired __in DWORD dwAssemblyInfo, // assembly info,
DWORD *pcchPathBuf); // in/out buffer character count including assembly type
__out_ecount_opt(*pcchPathBuf) LPWSTR lpPathBuf, // returned path, N
ULL if not desired
__inout_opt LPDWORD pcchPathBuf); // in/out buffer c
haracter count
#ifdef UNICODE #ifdef UNICODE
#define MsiProvideAssembly MsiProvideAssemblyW #define MsiProvideAssembly MsiProvideAssemblyW
#else #else
#define MsiProvideAssembly MsiProvideAssemblyA #define MsiProvideAssembly MsiProvideAssemblyA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 150) #endif //(_WIN32_MSI >= 150)
#if (_WIN32_MSI >= 300) #if (_WIN32_MSI >= 300)
// Query the installed state of a component in the specified product instance // Query the installed state of a component in the specified product instance
UINT WINAPI MsiQueryComponentStateA( UINT WINAPI MsiQueryComponentStateA(
LPCSTR szProductCode, // Information is queried on this produ __in LPCSTR szProductCode, // Information is queried on thi
ct s product
LPCSTR szUserSid, // Account of this product instance __in_opt LPCSTR szUserSid, // Account of this product insta
MSIINSTALLCONTEXT dwContext,// Context of this product instance nce
LPCSTR szComponentCode, // Name of the component being queried __in MSIINSTALLCONTEXT dwContext, // Context of this product ins
INSTALLSTATE *pdwState); // State value tance
__in LPCSTR szComponentCode, // Name of the component being q
ueried
__out_opt INSTALLSTATE *pdwState); // State value
UINT WINAPI MsiQueryComponentStateW( UINT WINAPI MsiQueryComponentStateW(
LPCWSTR szProductCode, // Information is queried on this prod __in LPCWSTR szProductCode, // Information is queried on th
uct is product
LPCWSTR szUserSid, // Account of this product instance __in_opt LPCWSTR szUserSid, // Account of this product inst
MSIINSTALLCONTEXT dwContext,// Context of this product instance ance
LPCWSTR szComponentCode, // Name of the component being queried __in MSIINSTALLCONTEXT dwContext, // Context of this product ins
INSTALLSTATE *pdwState); // State value tance
__in LPCWSTR szComponentCode, // Name of the component being
queried
__out_opt INSTALLSTATE *pdwState); // State value
#ifdef UNICODE #ifdef UNICODE
#define MsiQueryComponentState MsiQueryComponentStateW #define MsiQueryComponentState MsiQueryComponentStateW
#else #else
#define MsiQueryComponentState MsiQueryComponentStateA #define MsiQueryComponentState MsiQueryComponentStateA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 300) #endif //(_WIN32_MSI >= 300)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to iterate registered products, features, and components. // Functions to iterate registered products, features, and components.
// As with reg keys, they accept a 0-based index into the enumeration. // As with reg keys, they accept a 0-based index into the enumeration.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Enumerate the registered products, either installed or advertised // Enumerate the registered products, either installed or advertised
UINT WINAPI MsiEnumProductsA( UINT WINAPI MsiEnumProductsA(
DWORD iProductIndex, // 0-based index into registered products __in DWORD iProductIndex, // 0-based in
LPSTR lpProductBuf); // buffer of char count: 39 (size of string GUI dex into registered products
D) __out_ecount(MAX_GUID_CHARS+1) LPSTR lpProductBuf); // buffer of ch
ar count: 39 (size of string GUID)
UINT WINAPI MsiEnumProductsW( UINT WINAPI MsiEnumProductsW(
DWORD iProductIndex, // 0-based index into registered products __in DWORD iProductIndex, // 0-based in
LPWSTR lpProductBuf); // buffer of char count: 39 (size of string GU dex into registered products
ID) __out_ecount(MAX_GUID_CHARS+1) LPWSTR lpProductBuf); // buffer of c
har count: 39 (size of string GUID)
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumProducts MsiEnumProductsW #define MsiEnumProducts MsiEnumProductsW
#else #else
#define MsiEnumProducts MsiEnumProductsA #define MsiEnumProducts MsiEnumProductsA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 300) #if (_WIN32_MSI >= 300)
// Enumerate the registered products, either installed or advertised in // Enumerate the registered products, either installed or advertised in
// the specified context // the specified context
UINT WINAPI MsiEnumProductsExA( UINT WINAPI MsiEnumProductsExA(
LPCSTR szProductCode, // Enumerate instances of this product __in_opt LPCSTR szProductCode,
LPCSTR szUserSid, // Account for enumeration // Enumerate instances of this product
DWORD dwContext, // Contexts for enumeration __in_opt LPCSTR szUserSid,
DWORD dwIndex, // Index for enumeration // Account for enumeration
CHAR szInstalledProductCode[39], // Enumerated product's ProductC __in DWORD dwContext,
ode // Contexts for enumeration
MSIINSTALLCONTEXT *pdwInstalledContext, //Enumerated product's __in DWORD dwIndex,
context // Index for enumeration
LPSTR szSid, // Enumerated product's user account __out_ecount_opt(MAX_GUID_CHARS+1) CHAR szInstalledProductCode[39
LPDWORD pcchSid); // in/out character count of szSid ], // Enumerated product's ProductCode
__out_opt MSIINSTALLCONTEXT *pdwInstalledContext,
// Enumerated product's context
__out_ecount_opt(*pcchSid) LPSTR szSid,
// Enumerated product's user account
__inout_opt LPDWORD pcchSid);
// in/out character count of szSid
// Enumerate the registered products, either installed or advertised in // Enumerate the registered products, either installed or advertised in
// the specified context // the specified context
UINT WINAPI MsiEnumProductsExW( UINT WINAPI MsiEnumProductsExW(
LPCWSTR szProductCode, // Enumerate instances of this product __in_opt LPCWSTR szProductCode,
LPCWSTR szUserSid, // Account for enumeration // Enumerate instances of this product
DWORD dwContext, // Contexts for enumeration __in_opt LPCWSTR szUserSid,
DWORD dwIndex, // Index for enumeration // Account for enumeration
WCHAR szInstalledProductCode[39], // Enumerated product's Product __in DWORD dwContext,
Code // Contexts for enumeration
MSIINSTALLCONTEXT *pdwInstalledContext, //Enumerated product's __in DWORD dwIndex,
context // Index for enumeration
LPWSTR szSid, // Enumerated product's user account __out_ecount_opt(MAX_GUID_CHARS+1) WCHAR szInstalledProductCode[3
LPDWORD pcchSid); // in/out character count of szSid 9], // Enumerated product's ProductCode
__out_opt MSIINSTALLCONTEXT *pdwInstalledContext,
// Enumerated product's context
__out_ecount_opt(*pcchSid) LPWSTR szSid,
// Enumerated product's user account
__inout_opt LPDWORD pcchSid);
// in/out character count of szSid
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumProductsEx MsiEnumProductsExW #define MsiEnumProductsEx MsiEnumProductsExW
#else #else
#define MsiEnumProductsEx MsiEnumProductsExA #define MsiEnumProductsEx MsiEnumProductsExA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 300) #endif //(_WIN32_MSI >= 300)
#if (_WIN32_MSI >= 110) #if (_WIN32_MSI >= 110)
// Enumerate products with given upgrade code // Enumerate products with given upgrade code
UINT WINAPI MsiEnumRelatedProductsA( UINT WINAPI MsiEnumRelatedProductsA(
LPCSTR lpUpgradeCode, // upgrade code of products to enumerate __in LPCSTR lpUpgradeCode, // upgrade code
DWORD dwReserved, // reserved, must be 0 of products to enumerate
DWORD iProductIndex, // 0-based index into registered products __reserved DWORD dwReserved, // reserved,
LPSTR lpProductBuf); // buffer of char count: 39 (size of string GUI must be 0
D) __in DWORD iProductIndex, // 0-based in
dex into registered products
__out_ecount(MAX_GUID_CHARS+1) LPSTR lpProductBuf); // buffer of ch
ar count: 39 (size of string GUID)
UINT WINAPI MsiEnumRelatedProductsW( UINT WINAPI MsiEnumRelatedProductsW(
LPCWSTR lpUpgradeCode, // upgrade code of products to enumerate __in LPCWSTR lpUpgradeCode, // upgrade cod
DWORD dwReserved, // reserved, must be 0 e of products to enumerate
DWORD iProductIndex, // 0-based index into registered products __reserved DWORD dwReserved, // reserved,
LPWSTR lpProductBuf); // buffer of char count: 39 (size of string GU must be 0
ID) __in DWORD iProductIndex, // 0-based in
dex into registered products
__out_ecount(MAX_GUID_CHARS+1) LPWSTR lpProductBuf); // buffer of c
har count: 39 (size of string GUID)
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumRelatedProducts MsiEnumRelatedProductsW #define MsiEnumRelatedProducts MsiEnumRelatedProductsW
#else #else
#define MsiEnumRelatedProducts MsiEnumRelatedProductsA #define MsiEnumRelatedProducts MsiEnumRelatedProductsA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 110) #endif //(_WIN32_MSI >= 110)
// Enumerate the advertised features for a given product. // Enumerate the advertised features for a given product.
// If parent is not required, supplying NULL will improve performance. // If parent is not required, supplying NULL will improve performance.
UINT WINAPI MsiEnumFeaturesA( UINT WINAPI MsiEnumFeaturesA(
LPCSTR szProduct, __in LPCSTR szProduct,
DWORD iFeatureIndex, // 0-based index into published features __in DWORD iFeatureIndex, // 0-bas
LPSTR lpFeatureBuf, // feature name buffer, size=MAX_FEATURE_CHARS+ ed index into published features
1 __out_ecount(MAX_FEATURE_CHARS+1) LPSTR lpFeatureBuf, // feature
LPSTR lpParentBuf); // parent feature buffer, size=MAX_FEATURE_CHARS+ name buffer, size=MAX_FEATURE_CHARS+1
1 __out_ecount_opt(MAX_FEATURE_CHARS+1) LPSTR lpParentBuf); // parent
feature buffer, size=MAX_FEATURE_CHARS+1
UINT WINAPI MsiEnumFeaturesW( UINT WINAPI MsiEnumFeaturesW(
LPCWSTR szProduct, __in LPCWSTR szProduct,
DWORD iFeatureIndex, // 0-based index into published features __in DWORD iFeatureIndex, // 0-bas
LPWSTR lpFeatureBuf, // feature name buffer, size=MAX_FEATURE_CHARS ed index into published features
+1 __out_ecount(MAX_FEATURE_CHARS+1) LPWSTR lpFeatureBuf, // featur
LPWSTR lpParentBuf); // parent feature buffer, size=MAX_FEATURE_CHARS e name buffer, size=MAX_FEATURE_CHARS+1
+1 __out_ecount_opt(MAX_FEATURE_CHARS+1) LPWSTR lpParentBuf); // parent
feature buffer, size=MAX_FEATURE_CHARS+1
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumFeatures MsiEnumFeaturesW #define MsiEnumFeatures MsiEnumFeaturesW
#else #else
#define MsiEnumFeatures MsiEnumFeaturesA #define MsiEnumFeatures MsiEnumFeaturesA
#endif // !UNICODE #endif // !UNICODE
// Enumerate the installed components for all products // Enumerate the installed components for all products
UINT WINAPI MsiEnumComponentsA( UINT WINAPI MsiEnumComponentsA(
DWORD iComponentIndex, // 0-based index into installed components __in DWORD iComponentIndex, // 0-based in
LPSTR lpComponentBuf); // buffer of char count: 39 (size of string GUI dex into installed components
D) __out_ecount(MAX_GUID_CHARS+1) LPSTR lpComponentBuf); // buffer of ch
ar count: 39 (size of string GUID)
UINT WINAPI MsiEnumComponentsW( UINT WINAPI MsiEnumComponentsW(
DWORD iComponentIndex, // 0-based index into installed components __in DWORD iComponentIndex, // 0-based in
LPWSTR lpComponentBuf); // buffer of char count: 39 (size of string GU dex into installed components
ID) __out_ecount(MAX_GUID_CHARS+1) LPWSTR lpComponentBuf); // buffer of c
har count: 39 (size of string GUID)
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumComponents MsiEnumComponentsW #define MsiEnumComponents MsiEnumComponentsW
#else #else
#define MsiEnumComponents MsiEnumComponentsA #define MsiEnumComponents MsiEnumComponentsA
#endif // !UNICODE #endif // !UNICODE
// Enumerate the client products for a component // Enumerate the client products for a component
UINT WINAPI MsiEnumClientsA( UINT WINAPI MsiEnumClientsA(
LPCSTR szComponent, __in LPCSTR szComponent,
DWORD iProductIndex, // 0-based index into client products __in DWORD iProductIndex, // 0-based in
LPSTR lpProductBuf); // buffer of char count: 39 (size of string GUI dex into client products
D) __out_ecount(MAX_GUID_CHARS+1) LPSTR lpProductBuf); // buffer of ch
ar count: 39 (size of string GUID)
UINT WINAPI MsiEnumClientsW( UINT WINAPI MsiEnumClientsW(
LPCWSTR szComponent, __in LPCWSTR szComponent,
DWORD iProductIndex, // 0-based index into client products __in DWORD iProductIndex, // 0-based in
LPWSTR lpProductBuf); // buffer of char count: 39 (size of string GU dex into client products
ID) __out_ecount(MAX_GUID_CHARS+1) LPWSTR lpProductBuf); // buffer of c
har count: 39 (size of string GUID)
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumClients MsiEnumClientsW #define MsiEnumClients MsiEnumClientsW
#else #else
#define MsiEnumClients MsiEnumClientsA #define MsiEnumClients MsiEnumClientsA
#endif // !UNICODE #endif // !UNICODE
// Enumerate the qualifiers for an advertised component. // Enumerate the qualifiers for an advertised component.
UINT WINAPI MsiEnumComponentQualifiersA( UINT WINAPI MsiEnumComponentQualifiersA(
LPCSTR szComponent, // generic component ID that is qualified __in LPCSTR szComponent,
DWORD iIndex, // 0-based index into qualifiers // generic component ID that is qualified
LPSTR lpQualifierBuf, // qualifier buffer __in DWORD iIndex,
DWORD *pcchQualifierBuf, // in/out qualifier buffer character count // 0-based index into qualifiers
LPSTR lpApplicationDataBuf, // description buffer __out_ecount(*pcchQualifierBuf) LPSTR lpQualifierBuf,
DWORD *pcchApplicationDataBuf); // in/out description buffer characte // qualifier buffer
r count __inout LPDWORD pcchQualifierBuf,
// in/out qualifier buffer character count
__out_ecount_opt(*pcchApplicationDataBuf) LPSTR lpApplicationDataBuf,
// description buffer
__inout_opt LPDWORD pcchApplicationData
Buf); // in/out description buffer character count
UINT WINAPI MsiEnumComponentQualifiersW( UINT WINAPI MsiEnumComponentQualifiersW(
LPCWSTR szComponent, // generic component ID that is qualified __in LPCWSTR szComponent,
DWORD iIndex, // 0-based index into qualifiers // generic component ID that is qualified
LPWSTR lpQualifierBuf, // qualifier buffer __in DWORD iIndex,
DWORD *pcchQualifierBuf, // in/out qualifier buffer character count // 0-based index into qualifiers
LPWSTR lpApplicationDataBuf, // description buffer __out_ecount(*pcchQualifierBuf) LPWSTR lpQualifierBuf,
DWORD *pcchApplicationDataBuf); // in/out description buffer characte // qualifier buffer
r count __inout LPDWORD pcchQualifierBuf,
// in/out qualifier buffer character count
__out_ecount_opt(*pcchApplicationDataBuf) LPWSTR lpApplicationDataBuf
, // description buffer
__inout_opt LPDWORD pcchApplicationData
Buf); // in/out description buffer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumComponentQualifiers MsiEnumComponentQualifiersW #define MsiEnumComponentQualifiers MsiEnumComponentQualifiersW
#else #else
#define MsiEnumComponentQualifiers MsiEnumComponentQualifiersA #define MsiEnumComponentQualifiers MsiEnumComponentQualifiersA
#endif // !UNICODE #endif // !UNICODE
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to obtain product or package information. // Functions to obtain product or package information.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Open the installation for a product to obtain detailed information // Open the installation for a product to obtain detailed information
UINT WINAPI MsiOpenProductA( UINT WINAPI MsiOpenProductA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
MSIHANDLE *hProduct); // returned product handle, must be closed __out MSIHANDLE *hProduct); // returned product handle, must be closed
UINT WINAPI MsiOpenProductW( UINT WINAPI MsiOpenProductW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
MSIHANDLE *hProduct); // returned product handle, must be closed __out MSIHANDLE *hProduct); // returned product handle, must be closed
#ifdef UNICODE #ifdef UNICODE
#define MsiOpenProduct MsiOpenProductW #define MsiOpenProduct MsiOpenProductW
#else #else
#define MsiOpenProduct MsiOpenProductA #define MsiOpenProduct MsiOpenProductA
#endif // !UNICODE #endif // !UNICODE
// Open a product package in order to access product properties // Open a product package in order to access product properties
UINT WINAPI MsiOpenPackageA( UINT WINAPI MsiOpenPackageA(
LPCSTR szPackagePath, // path to package, or database handle: #nnn __in LPCSTR szPackagePath, // path to package, or database handle
n : #nnnn
MSIHANDLE *hProduct); // returned product handle, must be closed __out MSIHANDLE *hProduct); // returned product handle, must be
closed
UINT WINAPI MsiOpenPackageW( UINT WINAPI MsiOpenPackageW(
LPCWSTR szPackagePath, // path to package, or database handle: #nn __in LPCWSTR szPackagePath, // path to package, or database handl
nn e: #nnnn
MSIHANDLE *hProduct); // returned product handle, must be closed __out MSIHANDLE *hProduct); // returned product handle, must be
closed
#ifdef UNICODE #ifdef UNICODE
#define MsiOpenPackage MsiOpenPackageW #define MsiOpenPackage MsiOpenPackageW
#else #else
#define MsiOpenPackage MsiOpenPackageA #define MsiOpenPackage MsiOpenPackageA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
// Open a product package in order to access product properties // Open a product package in order to access product properties
// Option to create a "safe" engine that does not look at machine state // Option to create a "safe" engine that does not look at machine state
// and does not allow for modification of machine state // and does not allow for modification of machine state
UINT WINAPI MsiOpenPackageExA( UINT WINAPI MsiOpenPackageExA(
LPCSTR szPackagePath, // path to package, or database handle: #nnnn __in LPCSTR szPackagePath, // path to package, or database handle: #nn
DWORD dwOptions, // options flags to indicate whether or not to nn
ignore machine state __in DWORD dwOptions, // options flags to indicate whether or n
MSIHANDLE *hProduct); // returned product handle, must be closed ot to ignore machine state
__out MSIHANDLE *hProduct); // returned product handle, must be close
d
UINT WINAPI MsiOpenPackageExW( UINT WINAPI MsiOpenPackageExW(
LPCWSTR szPackagePath, // path to package, or database handle: #nnnn __in LPCWSTR szPackagePath, // path to package, or database handle: #n
DWORD dwOptions, // options flags to indicate whether or not to nnn
ignore machine state __in DWORD dwOptions, // options flags to indicate whether or n
MSIHANDLE *hProduct); // returned product handle, must be closed ot to ignore machine state
__out MSIHANDLE *hProduct); // returned product handle, must be close
d
#ifdef UNICODE #ifdef UNICODE
#define MsiOpenPackageEx MsiOpenPackageExW #define MsiOpenPackageEx MsiOpenPackageExW
#else #else
#define MsiOpenPackageEx MsiOpenPackageExA #define MsiOpenPackageEx MsiOpenPackageExA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 150) #endif //(_WIN32_MSI >= 150)
#if (_WIN32_MSI >= 400)
UINT WINAPI MsiGetPatchFileListA(
__in LPCSTR szProductCode,
__in LPCSTR szPatchPackages,
__out LPDWORD pcFiles,
__out MSIHANDLE** pphFileRecords);
UINT WINAPI MsiGetPatchFileListW(
__in LPCWSTR szProductCode,
__in LPCWSTR szPatchPackages,
__out LPDWORD pcFiles,
__out MSIHANDLE** pphFileRecords);
#ifdef UNICODE
#define MsiGetPatchFileList MsiGetPatchFileListW
#else
#define MsiGetPatchFileList MsiGetPatchFileListA
#endif // !UNICODE
#endif // #if (_WIN32_MSI >= 400)
// Provide the value for an installation property. // Provide the value for an installation property.
UINT WINAPI MsiGetProductPropertyA( UINT WINAPI MsiGetProductPropertyA(
MSIHANDLE hProduct, // product handle obtained from MsiOpenProduc __in MSIHANDLE hProduct, // product h
t andle obtained from MsiOpenProduct
LPCSTR szProperty, // property name, case-sensitive __in LPCSTR szProperty, // property na
LPSTR lpValueBuf, // returned value, NULL if not desired me, case-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPSTR lpValueBuf, // returned va
lue, NULL if not desired
__inout_opt LPDWORD pcchValueBuf); // in/out bu
ffer character count
UINT WINAPI MsiGetProductPropertyW( UINT WINAPI MsiGetProductPropertyW(
MSIHANDLE hProduct, // product handle obtained from MsiOpenProduc __in MSIHANDLE hProduct, // product h
t andle obtained from MsiOpenProduct
LPCWSTR szProperty, // property name, case-sensitive __in LPCWSTR szProperty, // property n
LPWSTR lpValueBuf, // returned value, NULL if not desired ame, case-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPWSTR lpValueBuf, // returned v
alue, NULL if not desired
__inout_opt LPDWORD pcchValueBuf); // in/out bu
ffer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetProductProperty MsiGetProductPropertyW #define MsiGetProductProperty MsiGetProductPropertyW
#else #else
#define MsiGetProductProperty MsiGetProductPropertyA #define MsiGetProductProperty MsiGetProductPropertyA
#endif // !UNICODE #endif // !UNICODE
// Determine whether a file is a package // Determine whether a file is a package
// Returns ERROR_SUCCESS if file is a package. // Returns ERROR_SUCCESS if file is a package.
UINT WINAPI MsiVerifyPackageA( UINT WINAPI MsiVerifyPackageA(
LPCSTR szPackagePath); // location of package __in LPCSTR szPackagePath); // location of package
UINT WINAPI MsiVerifyPackageW( UINT WINAPI MsiVerifyPackageW(
LPCWSTR szPackagePath); // location of package __in LPCWSTR szPackagePath); // location of package
#ifdef UNICODE #ifdef UNICODE
#define MsiVerifyPackage MsiVerifyPackageW #define MsiVerifyPackage MsiVerifyPackageW
#else #else
#define MsiVerifyPackage MsiVerifyPackageA #define MsiVerifyPackage MsiVerifyPackageA
#endif // !UNICODE #endif // !UNICODE
// Provide descriptive information for product feature: title and description. // Provide descriptive information for product feature: title and description.
// Returns the install level for the feature, or -1 if feature is unknown. // Returns the install level for the feature, or -1 if feature is unknown.
// 0 = feature is not available on this machine // 0 = feature is not available on this machine
// 1 = highest priority, feature installed if parent is installed // 1 = highest priority, feature installed if parent is installed
// >1 = decreasing priority, feature installation based on InstallLevel propert y // >1 = decreasing priority, feature installation based on InstallLevel propert y
UINT WINAPI MsiGetFeatureInfoA( UINT WINAPI MsiGetFeatureInfoA(
MSIHANDLE hProduct, // product handle obtained from MsiOpenProduc __in MSIHANDLE hProduct, // product ha
t ndle obtained from MsiOpenProduct
LPCSTR szFeature, // feature name __in LPCSTR szFeature, // feature name
DWORD *lpAttributes, // attribute flags for the feature, using INST __out_opt LPDWORD lpAttributes, // attribute
ALLFEATUREATTRIBUTE flags for the feature, using INSTALLFEATUREATTRIBUTE
LPSTR lpTitleBuf, // returned localized name, NULL if not desired __out_ecount_opt(*pcchTitleBuf) LPSTR lpTitleBuf, // returned loc
DWORD *pcchTitleBuf, // in/out buffer character count alized name, NULL if not desired
LPSTR lpHelpBuf, // returned description, NULL if not desired __inout_opt LPDWORD pcchTitleBuf, // in/out buf
DWORD *pcchHelpBuf); // in/out buffer character count fer character count
__out_ecount_opt(*pcchHelpBuf) LPSTR lpHelpBuf, // returned des
cription, NULL if not desired
__inout_opt LPDWORD pcchHelpBuf); // in/out buf
fer character count
UINT WINAPI MsiGetFeatureInfoW( UINT WINAPI MsiGetFeatureInfoW(
MSIHANDLE hProduct, // product handle obtained from MsiOpenProduc __in MSIHANDLE hProduct, // product ha
t ndle obtained from MsiOpenProduct
LPCWSTR szFeature, // feature name __in LPCWSTR szFeature, // feature nam
DWORD *lpAttributes, // attribute flags for the feature, using INST e
ALLFEATUREATTRIBUTE __out_opt LPDWORD lpAttributes, // attribute
LPWSTR lpTitleBuf, // returned localized name, NULL if not desire flags for the feature, using INSTALLFEATUREATTRIBUTE
d __out_ecount_opt(*pcchTitleBuf) LPWSTR lpTitleBuf, // returned lo
DWORD *pcchTitleBuf, // in/out buffer character count calized name, NULL if not desired
LPWSTR lpHelpBuf, // returned description, NULL if not desired __inout_opt LPDWORD pcchTitleBuf, // in/out buf
DWORD *pcchHelpBuf); // in/out buffer character count fer character count
__out_ecount_opt(*pcchHelpBuf) LPWSTR lpHelpBuf, // returned de
scription, NULL if not desired
__inout_opt LPDWORD pcchHelpBuf); // in/out buf
fer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFeatureInfo MsiGetFeatureInfoW #define MsiGetFeatureInfo MsiGetFeatureInfoW
#else #else
#define MsiGetFeatureInfo MsiGetFeatureInfoA #define MsiGetFeatureInfo MsiGetFeatureInfoA
#endif // !UNICODE #endif // !UNICODE
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to access or install missing components and files. // Functions to access or install missing components and files.
// These should be used as a last resort. // These should be used as a last resort.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Install a component unexpectedly missing, provided only for error recovery // Install a component unexpectedly missing, provided only for error recovery
// This would typically occur due to failue to establish feature availability // This would typically occur due to failue to establish feature availability
// The product feature having the smallest incremental cost is installed // The product feature having the smallest incremental cost is installed
UINT WINAPI MsiInstallMissingComponentA( UINT WINAPI MsiInstallMissingComponentA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szComponent, // component Id, string GUID __in LPCSTR szComponent, // component Id, string GUID
INSTALLSTATE eInstallState); // local/source/default, absent invalid __in INSTALLSTATE eInstallState); // local/source/default, absent inva
lid
UINT WINAPI MsiInstallMissingComponentW( UINT WINAPI MsiInstallMissingComponentW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szComponent, // component Id, string GUID __in LPCWSTR szComponent, // component Id, string GUID
INSTALLSTATE eInstallState); // local/source/default, absent invalid __in INSTALLSTATE eInstallState); // local/source/default, absent inva
lid
#ifdef UNICODE #ifdef UNICODE
#define MsiInstallMissingComponent MsiInstallMissingComponentW #define MsiInstallMissingComponent MsiInstallMissingComponentW
#else #else
#define MsiInstallMissingComponent MsiInstallMissingComponentA #define MsiInstallMissingComponent MsiInstallMissingComponentA
#endif // !UNICODE #endif // !UNICODE
// Install a file unexpectedly missing, provided only for error recovery // Install a file unexpectedly missing, provided only for error recovery
// This would typically occur due to failue to establish feature availability // This would typically occur due to failue to establish feature availability
// The missing component is determined from the product's File table, then // The missing component is determined from the product's File table, then
// the product feature having the smallest incremental cost is installed // the product feature having the smallest incremental cost is installed
UINT WINAPI MsiInstallMissingFileA( UINT WINAPI MsiInstallMissingFileA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szFile); // file name, without path __in LPCSTR szFile); // file name, without path
UINT WINAPI MsiInstallMissingFileW( UINT WINAPI MsiInstallMissingFileW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szFile); // file name, without path __in LPCWSTR szFile); // file name, without path
#ifdef UNICODE #ifdef UNICODE
#define MsiInstallMissingFile MsiInstallMissingFileW #define MsiInstallMissingFile MsiInstallMissingFileW
#else #else
#define MsiInstallMissingFile MsiInstallMissingFileA #define MsiInstallMissingFile MsiInstallMissingFileA
#endif // !UNICODE #endif // !UNICODE
// Return full path to an installed component without a product code // Return full path to an installed component without a product code
// This function attempts to determine the product using MsiGetProductCode // This function attempts to determine the product using MsiGetProductCode
// but is not guaranteed to find the correct product for the caller. // but is not guaranteed to find the correct product for the caller.
// MsiGetComponentPath should always be called when possible. // MsiGetComponentPath should always be called when possible.
INSTALLSTATE WINAPI MsiLocateComponentA( INSTALLSTATE WINAPI MsiLocateComponentA(
LPCSTR szComponent, // component Id, string GUID __in LPCSTR szComponent, // component Id, string
LPSTR lpPathBuf, // returned path GUID
DWORD *pcchBuf); // in/out buffer character count __out_ecount_opt(*pcchBuf) LPSTR lpPathBuf, // returned path
__inout_opt LPDWORD pcchBuf); // in/out buffer chara
cter count
INSTALLSTATE WINAPI MsiLocateComponentW( INSTALLSTATE WINAPI MsiLocateComponentW(
LPCWSTR szComponent, // component Id, string GUID __in LPCWSTR szComponent, // component Id, string
LPWSTR lpPathBuf, // returned path GUID
DWORD *pcchBuf); // in/out buffer character count __out_ecount_opt(*pcchBuf) LPWSTR lpPathBuf, // returned path
__inout_opt LPDWORD pcchBuf); // in/out buffer chara
cter count
#ifdef UNICODE #ifdef UNICODE
#define MsiLocateComponent MsiLocateComponentW #define MsiLocateComponent MsiLocateComponentW
#else #else
#define MsiLocateComponent MsiLocateComponentA #define MsiLocateComponent MsiLocateComponentA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 110) #if (_WIN32_MSI >= 110)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions used to manage the list of valid sources. // Functions used to manage the list of valid sources.
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Opens the list of sources for the specified user's install of the product // 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 // and removes all network sources from the list. A NULL or empty value for
// the user name indicates the per-machine install. // the user name indicates the per-machine install.
UINT WINAPI MsiSourceListClearAllA( UINT WINAPI MsiSourceListClearAllA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szUserName, // user name or NULL/empty for per-machine __in_opt LPCSTR szUserName, // user name or NULL/empty for per-machin
DWORD dwReserved); // reserved - must be 0 e
__reserved DWORD dwReserved); // reserved - must be 0
UINT WINAPI MsiSourceListClearAllW( UINT WINAPI MsiSourceListClearAllW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szUserName, // user name or NULL/empty for per-machine __in_opt LPCWSTR szUserName, // user name or NULL/empty for per-machi
DWORD dwReserved); // reserved - must be 0 ne
__reserved DWORD dwReserved); // reserved - must be 0
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListClearAll MsiSourceListClearAllW #define MsiSourceListClearAll MsiSourceListClearAllW
#else #else
#define MsiSourceListClearAll MsiSourceListClearAllA #define MsiSourceListClearAll MsiSourceListClearAllA
#endif // !UNICODE #endif // !UNICODE
// Opens the list of sources for the specified user's install of the product // 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 // and adds the provided source as a new network source. A NULL or empty
// value for the user name indicates the per-machine install. // value for the user name indicates the per-machine install.
UINT WINAPI MsiSourceListAddSourceA( UINT WINAPI MsiSourceListAddSourceA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szUserName, // user name or NULL/empty for per-machine __in_opt LPCSTR szUserName, // user name or NULL/empty for per-machin
DWORD dwReserved, // reserved - must be 0 e
LPCSTR szSource); // new source __reserved DWORD dwReserved, // reserved - must be 0
__in LPCSTR szSource); // new source
UINT WINAPI MsiSourceListAddSourceW( UINT WINAPI MsiSourceListAddSourceW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szUserName, // user name or NULL/empty for per-machine __in_opt LPCWSTR szUserName, // user name or NULL/empty for per-machi
DWORD dwReserved, // reserved - must be 0 ne
LPCWSTR szSource); // new source __reserved DWORD dwReserved, // reserved - must be 0
__in LPCWSTR szSource); // new source
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListAddSource MsiSourceListAddSourceW #define MsiSourceListAddSource MsiSourceListAddSourceW
#else #else
#define MsiSourceListAddSource MsiSourceListAddSourceA #define MsiSourceListAddSource MsiSourceListAddSourceA
#endif // !UNICODE #endif // !UNICODE
// Forces the installer to reevaluate the list of sources the next time that // Forces the installer to reevaluate the list of sources the next time that
// the specified product needs a source. // the specified product needs a source.
UINT WINAPI MsiSourceListForceResolutionA( UINT WINAPI MsiSourceListForceResolutionA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
LPCSTR szUserName, // user name or NULL/empty for per-machine __in_opt LPCSTR szUserName, // user name or NULL/empty for per-machin
DWORD dwReserved); // reserved - must be 0 e
__reserved DWORD dwReserved); // reserved - must be 0
UINT WINAPI MsiSourceListForceResolutionW( UINT WINAPI MsiSourceListForceResolutionW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
LPCWSTR szUserName, // user name or NULL/empty for per-machine __in_opt LPCWSTR szUserName, // user name or NULL/empty for per-machi
DWORD dwReserved); // reserved - must be 0 ne
__reserved DWORD dwReserved); // reserved - must be 0
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListForceResolution MsiSourceListForceResolutionW #define MsiSourceListForceResolution MsiSourceListForceResolutionW
#else #else
#define MsiSourceListForceResolution MsiSourceListForceResolutionA #define MsiSourceListForceResolution MsiSourceListForceResolutionA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 110) #endif //(_WIN32_MSI >= 110)
#if (_WIN32_MSI >= 300) #if (_WIN32_MSI >= 300)
// Adds a source or moves a source within the list of sources for the // Adds a source or moves a source within the list of sources for the
// specified product or patch instance. The source can be network/url type. // specified product or patch instance. The source can be network/url type.
UINT WINAPI MsiSourceListAddSourceExA( UINT WINAPI MsiSourceListAddSourceExA(
LPCSTR szProductCodeOrPatchCode,// Source will be added to this product o __in LPCSTR szProductCodeOrPatchCode,// Source will be added to this prod
r patch uct or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch ins
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance tance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch i
LPCSTR szSource, // source to be added/re-ordered nstance
DWORD dwIndex); // new index for the source __in DWORD dwOptions, // Additional qualifiers
__in LPCSTR szSource, // source to be added/re-ordered
__in DWORD dwIndex); // new index for the source
UINT WINAPI MsiSourceListAddSourceExW( UINT WINAPI MsiSourceListAddSourceExW(
LPCWSTR szProductCodeOrPatchCode,// Source will be added to this product __in LPCWSTR szProductCodeOrPatchCode,// Source will be added to this pro
or patch duct or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch in
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance stance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch i
LPCWSTR szSource, // source to be added/re-ordered nstance
DWORD dwIndex); // new index for the source __in DWORD dwOptions, // Additional qualifiers
__in LPCWSTR szSource, // source to be added/re-ordered
__in DWORD dwIndex); // new index for the source
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListAddSourceEx MsiSourceListAddSourceExW #define MsiSourceListAddSourceEx MsiSourceListAddSourceExW
#else #else
#define MsiSourceListAddSourceEx MsiSourceListAddSourceExA #define MsiSourceListAddSourceEx MsiSourceListAddSourceExA
#endif // !UNICODE #endif // !UNICODE
// Add or update a media source for the specified product or patch instance // Add or update a media source for the specified product or patch instance
UINT WINAPI MsiSourceListAddMediaDiskA( UINT WINAPI MsiSourceListAddMediaDiskA(
LPCSTR szProductCodeOrPatchCode,// Disk will be added to this product or __in LPCSTR szProductCodeOrPatchCode,// Disk will be added to this produc
patch t or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch ins
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance tance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch i
DWORD dwDiskId, // ID of the disk to be added/updated nstance
LPCSTR szVolumeLabel, // Volume Label of the disk __in DWORD dwOptions, // Additional qualifiers
LPCSTR szDiskPrompt); // Disk Prompt of the disk __in DWORD dwDiskId, // ID of the disk to be added/upda
ted
__in_opt LPCSTR szVolumeLabel, // Volume Label of the disk
__in_opt LPCSTR szDiskPrompt); // Disk Prompt of the disk
UINT WINAPI MsiSourceListAddMediaDiskW( UINT WINAPI MsiSourceListAddMediaDiskW(
LPCWSTR szProductCodeOrPatchCode,// Disk will be added to this product or __in LPCWSTR szProductCodeOrPatchCode,// Disk will be added to this produ
patch ct or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch in
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance stance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch i
DWORD dwDiskId, // ID of the disk to be added/updated nstance
LPCWSTR szVolumeLabel, // Volume Label of the disk __in DWORD dwOptions, // Additional qualifiers
LPCWSTR szDiskPrompt); // Disk Prompt of the disk __in DWORD dwDiskId, // ID of the disk to be added/upda
ted
__in_opt LPCWSTR szVolumeLabel, // Volume Label of the disk
__in_opt LPCWSTR szDiskPrompt); // Disk Prompt of the disk
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListAddMediaDisk MsiSourceListAddMediaDiskW #define MsiSourceListAddMediaDisk MsiSourceListAddMediaDiskW
#else #else
#define MsiSourceListAddMediaDisk MsiSourceListAddMediaDiskA #define MsiSourceListAddMediaDisk MsiSourceListAddMediaDiskA
#endif // !UNICODE #endif // !UNICODE
// Remove an existing source for the specified product or patch instance // Remove an existing source for the specified product or patch instance
UINT WINAPI MsiSourceListClearSourceA( UINT WINAPI MsiSourceListClearSourceA(
LPCSTR szProductCodeOrPatchCode, // Source will be cleared for this produ __in LPCSTR szProductCodeOrPatchCode, // Source will be cleared for this
ct or patch product or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch in
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance stance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
LPCSTR szSource); // source to be removed instance
__in DWORD dwOptions, // Additional qualifiers
__in LPCSTR szSource); // source to be removed
UINT WINAPI MsiSourceListClearSourceW( UINT WINAPI MsiSourceListClearSourceW(
LPCWSTR szProductCodeOrPatchCode, // Source will be cleared for this prod __in LPCWSTR szProductCodeOrPatchCode, // Source will be cleared for this
uct or patch product or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch i
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance nstance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
LPCWSTR szSource); // source to be removed instance
__in DWORD dwOptions, // Additional qualifiers
__in LPCWSTR szSource); // source to be removed
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListClearSource MsiSourceListClearSourceW #define MsiSourceListClearSource MsiSourceListClearSourceW
#else #else
#define MsiSourceListClearSource MsiSourceListClearSourceA #define MsiSourceListClearSource MsiSourceListClearSourceA
#endif // !UNICODE #endif // !UNICODE
// Remove an existing registered disk under the media source for the specified p roduct or // Remove an existing registered disk under the media source for the specified p roduct or
// patch instance // patch instance
UINT WINAPI MsiSourceListClearMediaDiskA( UINT WINAPI MsiSourceListClearMediaDiskA(
LPCSTR szProductCodeOrPatchCode, // Disk will be cleared for this product __in LPCSTR szProductCodeOrPatchCode, // Disk will be cleared for this pr
or patch oduct or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch in
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance stance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
DWORD dwDiskId); // DiskID to be removed instance
__in DWORD dwOptions, // Additional qualifiers
__in DWORD dwDiskId); // DiskID to be removed
UINT WINAPI MsiSourceListClearMediaDiskW( UINT WINAPI MsiSourceListClearMediaDiskW(
LPCWSTR szProductCodeOrPatchCode, // Disk will be cleared for this produc __in LPCWSTR szProductCodeOrPatchCode, // Disk will be cleared for this p
t or patch roduct or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch i
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance nstance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
DWORD dwDiskId); // DiskID to be removed instance
__in DWORD dwOptions, // Additional qualifiers
__in DWORD dwDiskId); // DiskID to be removed
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListClearMediaDisk MsiSourceListClearMediaDiskW #define MsiSourceListClearMediaDisk MsiSourceListClearMediaDiskW
#else #else
#define MsiSourceListClearMediaDisk MsiSourceListClearMediaDiskA #define MsiSourceListClearMediaDisk MsiSourceListClearMediaDiskA
#endif // !UNICODE #endif // !UNICODE
// Remove all existing sources of the given source type for the specified produc t or patch // Remove all existing sources of the given source type for the specified produc t or patch
// instance // instance
UINT WINAPI MsiSourceListClearAllExA( UINT WINAPI MsiSourceListClearAllExA(
LPCSTR szProductCodeOrPatchCode, // All sources will be cleared for this __in LPCSTR szProductCodeOrPatchCode, // All sources will be cleared for
product or patch this product or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch in
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance stance
DWORD dwOptions); // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
instance
__in DWORD dwOptions); // Additional qualifiers
UINT WINAPI MsiSourceListClearAllExW( UINT WINAPI MsiSourceListClearAllExW(
LPCWSTR szProductCodeOrPatchCode, // All sources will be cleared for this __in LPCWSTR szProductCodeOrPatchCode, // All sources will be cleared for
product or patch this product or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch i
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance nstance
DWORD dwOptions); // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
instance
__in DWORD dwOptions); // Additional qualifiers
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListClearAllEx MsiSourceListClearAllExW #define MsiSourceListClearAllEx MsiSourceListClearAllExW
#else #else
#define MsiSourceListClearAllEx MsiSourceListClearAllExA #define MsiSourceListClearAllEx MsiSourceListClearAllExA
#endif // !UNICODE #endif // !UNICODE
// Forces the installer to reevaluate the list of sources the next time that // Forces the installer to reevaluate the list of sources the next time that
// the specified product or patch instance needs a source. // the specified product or patch instance needs a source.
UINT WINAPI MsiSourceListForceResolutionExA( UINT WINAPI MsiSourceListForceResolutionExA(
LPCSTR szProductCodeOrPatchCode, // Source Resolution will be forced for __in LPCSTR szProductCodeOrPatchCode, // Source Resolution will be force
this product or patch d for this product or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch i
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance nstance
DWORD dwOptions); // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
instance
__in DWORD dwOptions); // Additional qualifiers
UINT WINAPI MsiSourceListForceResolutionExW( UINT WINAPI MsiSourceListForceResolutionExW(
LPCWSTR szProductCodeOrPatchCode, // Source Resolution will be forced fo __in LPCWSTR szProductCodeOrPatchCode, // Source Resolution will be forc
r this product or patch ed for this product or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance instance
DWORD dwOptions); // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
instance
__in DWORD dwOptions); // Additional qualifiers
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListForceResolutionEx MsiSourceListForceResolutionExW #define MsiSourceListForceResolutionEx MsiSourceListForceResolutionExW
#else #else
#define MsiSourceListForceResolutionEx MsiSourceListForceResolutionExA #define MsiSourceListForceResolutionEx MsiSourceListForceResolutionExA
#endif // !UNICODE #endif // !UNICODE
// Set the source list property to the provided value for the specified product or patch instance // Set the source list property to the provided value for the specified product or patch instance
UINT WINAPI MsiSourceListSetInfoA( UINT WINAPI MsiSourceListSetInfoA(
LPCSTR szProductCodeOrPatchCode, // Source Info will be set for this prod __in LPCSTR szProductCodeOrPatchCode, // Source Info will be set for this
uct or patch product or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/patch in
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance stance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
LPCSTR szProperty, // Property being set/modified instance
LPCSTR szValue); // Value to be set __in DWORD dwOptions, // Additional qualifiers
__in LPCSTR szProperty, // Property being set/modified
__in LPCSTR szValue); // Value to be set
UINT WINAPI MsiSourceListSetInfoW( UINT WINAPI MsiSourceListSetInfoW(
LPCWSTR szProductCodeOrPatchCode, // Source Info will be set for this pro __in LPCWSTR szProductCodeOrPatchCode, // Source Info will be set for thi
duct or patch s product or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/patch i
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance nstance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product/patch
LPCWSTR szProperty, // Property being set/modified instance
LPCWSTR szValue); // Value to be set __in DWORD dwOptions, // Additional qualifiers
__in LPCWSTR szProperty, // Property being set/modified
__in LPCWSTR szValue); // Value to be set
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListSetInfo MsiSourceListSetInfoW #define MsiSourceListSetInfo MsiSourceListSetInfoW
#else #else
#define MsiSourceListSetInfo MsiSourceListSetInfoA #define MsiSourceListSetInfo MsiSourceListSetInfoA
#endif // !UNICODE #endif // !UNICODE
// Query the given source list property for the specified product or patch insta nce // Query the given source list property for the specified product or patch insta nce
UINT WINAPI MsiSourceListGetInfoA( UINT WINAPI MsiSourceListGetInfoA(
LPCSTR szProductCodeOrPatchCode, // Source Info will be queried for this __in LPCSTR szProductCodeOrPatchCode, // Source Info will be queri
produt or patch ed for this produt or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this product/p
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance atch instance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product
LPCSTR szProperty, // Property being queried /patch instance
LPSTR szValue, // Buffer to get the value __in DWORD dwOptions, // Additional qualifiers
LPDWORD pcchValue); // in/out character count of szValue __in LPCSTR szProperty, // Property being queried
__out_ecount_opt(*pcchValue) LPSTR szValue, // Buffer to get the value
__inout_opt LPDWORD pcchValue); // in/out character count
of szValue
UINT WINAPI MsiSourceListGetInfoW( UINT WINAPI MsiSourceListGetInfoW(
LPCWSTR szProductCodeOrPatchCode, // Source Info will be queried for this __in LPCWSTR szProductCodeOrPatchCode, // Source Info will be quer
produt or patch ied for this produt or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this product/
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance patch instance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this product
LPCWSTR szProperty, // Property being queried /patch instance
LPWSTR szValue, // Buffer to get the value __in DWORD dwOptions, // Additional qualifiers
LPDWORD pcchValue); // in/out character count of szValue __in LPCWSTR szProperty, // Property being queried
__out_ecount_opt(*pcchValue) LPWSTR szValue, // Buffer to get the value
__inout_opt LPDWORD pcchValue); // in/out character count
of szValue
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListGetInfo MsiSourceListGetInfoW #define MsiSourceListGetInfo MsiSourceListGetInfoW
#else #else
#define MsiSourceListGetInfo MsiSourceListGetInfoA #define MsiSourceListGetInfo MsiSourceListGetInfoA
#endif // !UNICODE #endif // !UNICODE
// Enumerate all sources for the specified product or patch instance // Enumerate all sources for the specified product or patch instance
UINT WINAPI MsiSourceListEnumSourcesA( UINT WINAPI MsiSourceListEnumSourcesA(
LPCSTR szProductCodeOrPatchCode, // Sources will be enumerated for this p __in LPCSTR szProductCodeOrPatchCode, // Sources will be enum
roduct or patch erated for this product or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of this prod
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance uct/patch instance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this pr
DWORD dwIndex, // Index value for enumeration oduct/patch instance
LPSTR szSource, // Buffer to receive the enumerated source __in DWORD dwOptions, // Additional qualifi
LPDWORD pcchSource); // in/out character count of szSource ers
__in DWORD dwIndex, // Index value for en
umeration
__out_ecount_opt(*pcchSource) LPSTR szSource, // Buffer to receive th
e enumerated source
__inout_opt LPDWORD pcchSource); // in/out character c
ount of szSource
UINT WINAPI MsiSourceListEnumSourcesW( UINT WINAPI MsiSourceListEnumSourcesW(
LPCWSTR szProductCodeOrPatchCode, // Sources will be enumerated for this __in LPCWSTR szProductCodeOrPatchCode, // Sources will be enu
product or patch merated for this product or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of this pro
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance duct/patch instance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context of this pr
DWORD dwIndex, // Index value for enumeration oduct/patch instance
LPWSTR szSource, // Buffer to receive the enumerated source __in DWORD dwOptions, // Additional qualifi
LPDWORD pcchSource); // in/out character count of szSource ers
__in DWORD dwIndex, // Index value for en
umeration
__out_ecount_opt(*pcchSource) LPWSTR szSource, // Buffer to receive t
he enumerated source
__inout_opt LPDWORD pcchSource); // in/out character c
ount of szSource
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListEnumSources MsiSourceListEnumSourcesW #define MsiSourceListEnumSources MsiSourceListEnumSourcesW
#else #else
#define MsiSourceListEnumSources MsiSourceListEnumSourcesA #define MsiSourceListEnumSources MsiSourceListEnumSourcesA
#endif // !UNICODE #endif // !UNICODE
// Enumerate all registered media disks for the specified product or patch insta nce // Enumerate all registered media disks for the specified product or patch insta nce
UINT WINAPI MsiSourceListEnumMediaDisksA( UINT WINAPI MsiSourceListEnumMediaDisksA(
LPCSTR szProductCodeOrPatchCode, // Disks will be enumerated for this pro __in LPCSTR szProductCodeOrPatchCode, // Disks will
duct or patch be enumerated for this product or patch
LPCSTR szUserSid, // Account of this product/patch instance __in_opt LPCSTR szUserSid, // Account of
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance this product/patch instance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context o
DWORD dwIndex, // Index value for enumeration f this product/patch instance
LPDWORD pdwDiskId, // ID of the disk being enumerated __in DWORD dwOptions, // Additiona
LPSTR szVolumeLabel, // Volume label of the disk being enumerated l qualifiers
LPDWORD pcchVolumeLabel, // in/out character count of szVolumeLabel __in DWORD dwIndex, // Index val
LPSTR szDiskPrompt, // DiskPrompt of the disk being enumerated ue for enumeration
LPDWORD pcchDiskPrompt); // in/out character count of szDiskPrompt __out_opt LPDWORD pdwDiskId, // ID of the
disk being enumerated
__out_ecount_opt(*pcchVolumeLabel) LPSTR szVolumeLabel, // Volume labe
l of the disk being enumerated
__inout_opt LPDWORD pcchVolumeLabel, // in/out ch
aracter count of szVolumeLabel
__out_ecount_opt(*pcchDiskPrompt) LPSTR szDiskPrompt, // DiskPrompt
of the disk being enumerated
__inout_opt LPDWORD pcchDiskPrompt); // in/out ch
aracter count of szDiskPrompt
UINT WINAPI MsiSourceListEnumMediaDisksW( UINT WINAPI MsiSourceListEnumMediaDisksW(
LPCWSTR szProductCodeOrPatchCode, // Disks will be enumerated for this pr __in LPCWSTR szProductCodeOrPatchCode, // Disks will
oduct or patch be enumerated for this product or patch
LPCWSTR szUserSid, // Account of this product/patch instance __in_opt LPCWSTR szUserSid, // Account of
MSIINSTALLCONTEXT dwContext, // Context of this product/patch instance this product/patch instance
DWORD dwOptions, // Additional qualifiers __in MSIINSTALLCONTEXT dwContext, // Context o
DWORD dwIndex, // Index value for enumeration f this product/patch instance
LPDWORD pdwDiskId, // ID of the disk being enumerated __in DWORD dwOptions, // Additiona
LPWSTR szVolumeLabel, // Volume label of the disk being enumerated l qualifiers
LPDWORD pcchVolumeLabel, // in/out character count of szVolumeLabel __in DWORD dwIndex, // Index val
LPWSTR szDiskPrompt, // DiskPrompt of the disk being enumerated ue for enumeration
LPDWORD pcchDiskPrompt); // in/out character count of szDiskPrompt __out_opt LPDWORD pdwDiskId, // ID of the
disk being enumerated
__out_ecount_opt(*pcchVolumeLabel) LPWSTR szVolumeLabel, // Volume lab
el of the disk being enumerated
__inout_opt LPDWORD pcchVolumeLabel, // in/out ch
aracter count of szVolumeLabel
__out_ecount_opt(*pcchDiskPrompt) LPWSTR szDiskPrompt, // DiskPrompt
of the disk being enumerated
__inout_opt LPDWORD pcchDiskPrompt); // in/out ch
aracter count of szDiskPrompt
#ifdef UNICODE #ifdef UNICODE
#define MsiSourceListEnumMediaDisks MsiSourceListEnumMediaDisksW #define MsiSourceListEnumMediaDisks MsiSourceListEnumMediaDisksW
#else #else
#define MsiSourceListEnumMediaDisks MsiSourceListEnumMediaDisksA #define MsiSourceListEnumMediaDisks MsiSourceListEnumMediaDisksA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 300) #endif //(_WIN32_MSI >= 300)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Utility functions // Utility functions
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Give the version string and language for a specified file // Give the version string and language for a specified file
UINT WINAPI MsiGetFileVersionA( UINT WINAPI MsiGetFileVersionA(
LPCSTR szFilePath, // path to the file __in LPCSTR szFilePath, // path to
LPSTR lpVersionBuf, // returned version string the file
DWORD *pcchVersionBuf, // in/out buffer byte count __out_ecount_opt(*pcchVersionBuf) LPSTR lpVersionBuf, // returne
LPSTR lpLangBuf, // returned language string d version string
DWORD *pcchLangBuf); // in/out buffer byte count __inout_opt LPDWORD pcchVersionBuf, // in/ou
t buffer byte count
__out_ecount_opt(*pcchLangBuf) LPSTR lpLangBuf, // returne
d language string
__inout_opt LPDWORD pcchLangBuf); // in/ou
t buffer byte count
UINT WINAPI MsiGetFileVersionW( UINT WINAPI MsiGetFileVersionW(
LPCWSTR szFilePath, // path to the file __in LPCWSTR szFilePath, // path t
LPWSTR lpVersionBuf, // returned version string o the file
DWORD *pcchVersionBuf, // in/out buffer byte count __out_ecount_opt(*pcchVersionBuf) LPWSTR lpVersionBuf, // return
LPWSTR lpLangBuf, // returned language string ed version string
DWORD *pcchLangBuf); // in/out buffer byte count __inout_opt LPDWORD pcchVersionBuf, // in/ou
t buffer byte count
__out_ecount_opt(*pcchLangBuf) LPWSTR lpLangBuf, // return
ed language string
__inout_opt LPDWORD pcchLangBuf); // in/ou
t buffer byte count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFileVersion MsiGetFileVersionW #define MsiGetFileVersion MsiGetFileVersionW
#else #else
#define MsiGetFileVersion MsiGetFileVersionA #define MsiGetFileVersion MsiGetFileVersionA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
UINT WINAPI MsiGetFileHashA( UINT WINAPI MsiGetFileHashA(
LPCSTR szFilePath, // path to the file __in LPCSTR szFilePath, // path to the file
DWORD dwOptions, // options __in DWORD dwOptions, // options
PMSIFILEHASHINFO pHash); // returned file hash info __inout PMSIFILEHASHINFO pHash); // returned file hash info
UINT WINAPI MsiGetFileHashW( UINT WINAPI MsiGetFileHashW(
LPCWSTR szFilePath, // path to the file __in LPCWSTR szFilePath, // path to the file
DWORD dwOptions, // options __in DWORD dwOptions, // options
PMSIFILEHASHINFO pHash); // returned file hash info __inout PMSIFILEHASHINFO pHash); // returned file hash info
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFileHash MsiGetFileHashW #define MsiGetFileHash MsiGetFileHashW
#else #else
#define MsiGetFileHash MsiGetFileHashA #define MsiGetFileHash MsiGetFileHashA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 150) #endif //(_WIN32_MSI >= 150)
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
#ifndef _MSI_NO_CRYPTO #ifndef _MSI_NO_CRYPTO
HRESULT WINAPI MsiGetFileSignatureInformationA( HRESULT WINAPI MsiGetFileSignatureInformationA(
LPCSTR szSignedObjectPath, // path to the signed object __in LPCSTR szSignedObjectPath, // path to the signed
DWORD dwFlags, // special extra error case flags object
PCCERT_CONTEXT *ppcCertContext, // returned signer cert context __in DWORD dwFlags, // special extra er
BYTE *pbHashData, // returned hash buffer, NULL if not ror case flags
desired __deref_out PCCERT_CONTEXT *ppcCertContext, // returned signer
DWORD *pcbHashData); // in/out buffer byte count cert context
__out_bcount_opt(*pcbHashData) LPBYTE pbHashData, // returned hash bu
ffer, NULL if not desired
__inout_opt LPDWORD pcbHashData); // in/out buffer by
te count
HRESULT WINAPI MsiGetFileSignatureInformationW( HRESULT WINAPI MsiGetFileSignatureInformationW(
LPCWSTR szSignedObjectPath, // path to the signed object __in LPCWSTR szSignedObjectPath, // path to the signe
DWORD dwFlags, // special extra error case flags d object
PCCERT_CONTEXT *ppcCertContext, // returned signer cert context __in DWORD dwFlags, // special extra er
BYTE *pbHashData, // returned hash buffer, NULL if not ror case flags
desired __deref_out PCCERT_CONTEXT *ppcCertContext, // returned signer
DWORD *pcbHashData); // in/out buffer byte count cert context
__out_bcount_opt(*pcbHashData) LPBYTE pbHashData, // returned hash bu
ffer, NULL if not desired
__inout_opt LPDWORD pcbHashData); // in/out buffer by
te count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFileSignatureInformation MsiGetFileSignatureInformationW #define MsiGetFileSignatureInformation MsiGetFileSignatureInformationW
#else #else
#define MsiGetFileSignatureInformation MsiGetFileSignatureInformationA #define MsiGetFileSignatureInformation MsiGetFileSignatureInformationA
#endif // !UNICODE #endif // !UNICODE
// By default, when only requesting the certificate context, an invalid hash // 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 // 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. // parameter to make the TRUST_E_BAD_DIGEST error fatal.
#define MSI_INVALID_HASH_IS_FATAL 0x1 #define MSI_INVALID_HASH_IS_FATAL 0x1
#endif// _MSI_NO_CRYPTO #endif// _MSI_NO_CRYPTO
#endif //(_WIN32_MSI >= 150) #endif //(_WIN32_MSI >= 150)
#if (_WIN32_MSI >= 110) #if (_WIN32_MSI >= 110)
// examine a shortcut, and retrieve its descriptor information // examine a shortcut, and retrieve its descriptor information
// if available. // if available.
UINT WINAPI MsiGetShortcutTargetA( UINT WINAPI MsiGetShortcutTargetA(
LPCSTR szShortcutPath, // full file path for the shortcut __in LPCSTR szShortcutPath, // fu
LPSTR szProductCode, // returned product code - GUID ll file path for the shortcut
LPSTR szFeatureId, // returned Feature Id. __out_ecount_opt(MAX_GUID_CHARS+1) LPSTR szProductCode, // re
LPSTR szComponentCode); // returned component code - GUID turned product code - GUID
__out_ecount_opt(MAX_FEATURE_CHARS+1) LPSTR szFeatureId, // re
turned Feature Id.
__out_ecount_opt(MAX_GUID_CHARS+1) LPSTR szComponentCode); // re
turned component code - GUID
UINT WINAPI MsiGetShortcutTargetW( UINT WINAPI MsiGetShortcutTargetW(
LPCWSTR szShortcutPath, // full file path for the shortcut __in LPCWSTR szShortcutPath, // f
LPWSTR szProductCode, // returned product code - GUID ull file path for the shortcut
LPWSTR szFeatureId, // returned Feature Id. __out_ecount_opt(MAX_GUID_CHARS+1) LPWSTR szProductCode, // r
LPWSTR szComponentCode); // returned component code - GUID eturned product code - GUID
__out_ecount_opt(MAX_FEATURE_CHARS+1) LPWSTR szFeatureId, // r
eturned Feature Id.
__out_ecount_opt(MAX_GUID_CHARS+1) LPWSTR szComponentCode); // r
eturned component code - GUID
#ifdef UNICODE #ifdef UNICODE
#define MsiGetShortcutTarget MsiGetShortcutTargetW #define MsiGetShortcutTarget MsiGetShortcutTargetW
#else #else
#define MsiGetShortcutTarget MsiGetShortcutTargetA #define MsiGetShortcutTarget MsiGetShortcutTargetA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 110) #endif //(_WIN32_MSI >= 110)
#if (_WIN32_MSI >= 110) #if (_WIN32_MSI >= 110)
// checks to see if a product is managed // checks to see if a product is managed
// checks per-machine if called from system context, per-user if from // checks per-machine if called from system context, per-user if from
// user context // user context
UINT WINAPI MsiIsProductElevatedA( UINT WINAPI MsiIsProductElevatedA(
LPCSTR szProduct, // product code __in LPCSTR szProduct, // product code
BOOL *pfElevated); // result __out BOOL *pfElevated); // result
// checks to see if a product is managed // checks to see if a product is managed
// checks per-machine if called from system context, per-user if from // checks per-machine if called from system context, per-user if from
// user context // user context
UINT WINAPI MsiIsProductElevatedW( UINT WINAPI MsiIsProductElevatedW(
LPCWSTR szProduct, // product code __in LPCWSTR szProduct, // product code
BOOL *pfElevated); // result __out BOOL *pfElevated); // result
#ifdef UNICODE #ifdef UNICODE
#define MsiIsProductElevated MsiIsProductElevatedW #define MsiIsProductElevated MsiIsProductElevatedW
#else #else
#define MsiIsProductElevated MsiIsProductElevatedA #define MsiIsProductElevated MsiIsProductElevatedA
#endif // !UNICODE #endif // !UNICODE
#endif //(_WIN32_MSI >= 110) #endif //(_WIN32_MSI >= 110)
#if (_WIN32_MSI >= 310) #if (_WIN32_MSI >= 310)
// Caller notifies us of a user who's been moved and results in a sid change. // Caller notifies us of a user who's been moved and results in a sid change.
UINT WINAPI MsiNotifySidChangeA(LPCSTR pOldSid, UINT WINAPI MsiNotifySidChangeA(__in LPCSTR pOldSid,
LPCSTR pNewSid); __in LPCSTR pNewSid);
UINT WINAPI MsiNotifySidChangeW(LPCWSTR pOldSid, UINT WINAPI MsiNotifySidChangeW(__in LPCWSTR pOldSid,
LPCWSTR pNewSid); __in LPCWSTR pNewSid);
#ifdef UNICODE #ifdef UNICODE
#define MsiNotifySidChange MsiNotifySidChangeW #define MsiNotifySidChange MsiNotifySidChangeW
#else #else
#define MsiNotifySidChange MsiNotifySidChangeA #define MsiNotifySidChange MsiNotifySidChangeA
#endif // !UNICODE #endif // !UNICODE
#else // _WIN32_MSI < 310 #else // _WIN32_MSI < 310
#endif // (_WIN32_MSI >= 310) #endif // (_WIN32_MSI >= 310)
skipping to change at line 2057 skipping to change at line 2091
// LOCALIZE BEGIN: // LOCALIZE BEGIN:
#define ERROR_INSTALL_SOURCE_ABSENT 1612L // The installation source for this p roduct is not available. Verify that the source exists and that you can access it. #define ERROR_INSTALL_SOURCE_ABSENT 1612L // The installation source for this p roduct is not available. Verify that the source exists and that you can access it.
// LOCALIZE END // LOCALIZE END
#define ERROR_PRODUCT_UNINSTALLED 1614L // Product is uninstalled. #define ERROR_PRODUCT_UNINSTALLED 1614L // Product is uninstalled.
#define ERROR_BAD_QUERY_SYNTAX 1615L // SQL query syntax invalid or unsupp orted. #define ERROR_BAD_QUERY_SYNTAX 1615L // SQL query syntax invalid or unsupp orted.
#define ERROR_INVALID_FIELD 1616L // Record field does not exist. #define ERROR_INVALID_FIELD 1616L // Record field does not exist.
#endif #endif
// LOCALIZE BEGIN: // LOCALIZE BEGIN:
#ifndef ERROR_INSTALL_SERVICE_FAILURE #ifndef ERROR_INSTALL_SERVICE_FAILURE
#define ERROR_INSTALL_SERVICE_FAILURE 1601L // The Windows Installer Servic e could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support pe rsonnel for assistance. #define ERROR_INSTALL_SERVICE_FAILURE 1601L // The Windows Installer Servic e could not be accessed. This can occur if the Windows Installer is not correctl y installed. Contact your support personnel for assistance.
#define ERROR_INSTALL_PACKAGE_VERSION 1613L // This installation package ca nnot be installed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service. #define ERROR_INSTALL_PACKAGE_VERSION 1613L // This installation package ca nnot be installed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service.
#define ERROR_INSTALL_ALREADY_RUNNING 1618L // Another installation is alre ady in progress. Complete that installation before proceeding with this install . #define ERROR_INSTALL_ALREADY_RUNNING 1618L // Another program is being ins talled. Please wait until that installation is complete, and then try installing this software again.
#define ERROR_INSTALL_PACKAGE_OPEN_FAILED 1619L // This installation package co uld not be opened. Verify that the package exists and that you can access it, o r contact the application vendor to verify that this is a valid Windows Installe r package. #define ERROR_INSTALL_PACKAGE_OPEN_FAILED 1619L // This installation package co uld not be opened. Verify that the package exists and that you can access it, o r contact the application vendor to verify that this is a valid Windows Installe r package.
#define ERROR_INSTALL_PACKAGE_INVALID 1620L // This installation package co uld not be opened. Contact the application vendor to verify that this is a vali d Windows Installer package. #define ERROR_INSTALL_PACKAGE_INVALID 1620L // This installation package co uld not be opened. Contact the application vendor to verify that this is a vali d Windows Installer package.
#define ERROR_INSTALL_UI_FAILURE 1621L // There was an error starting the Windows Installer service user interface. Contact your support personnel. #define ERROR_INSTALL_UI_FAILURE 1621L // There was an error starting the Windows Installer service user interface. Contact your support personnel.
#define ERROR_INSTALL_LOG_FAILURE 1622L // Error opening installation l og file. Verify that the specified log file location exists and is writable. #define ERROR_INSTALL_LOG_FAILURE 1622L // Error opening installation l og file. Verify that the specified log file location exists and is writable.
#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623L // This language of this instal lation package is not supported by your system. #define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623L // This language of this instal lation package is not supported by your system.
#define ERROR_INSTALL_PACKAGE_REJECTED 1625L // The system administrator has set policies to prevent this installation. #define ERROR_INSTALL_PACKAGE_REJECTED 1625L // The system administrator has set policies to prevent this installation.
// LOCALIZE END // LOCALIZE END
#define ERROR_FUNCTION_NOT_CALLED 1626L // Function could not be execut ed. #define ERROR_FUNCTION_NOT_CALLED 1626L // Function could not be execut ed.
#define ERROR_FUNCTION_FAILED 1627L // Function failed during execu tion. #define ERROR_FUNCTION_FAILED 1627L // Function failed during execu tion.
skipping to change at line 2187 skipping to change at line 2221
#define ERROR_INVALID_PATCH_XML 1650L // The XML patch data is inval id. #define ERROR_INVALID_PATCH_XML 1650L // The XML patch data is inval id.
#endif #endif
// LOCALIZE END // LOCALIZE END
// LOCALIZE BEGIN: // LOCALIZE BEGIN:
#ifndef ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT #ifndef ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT
#define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT 1651L // Windows Installer does n ot permit patching of managed advertised products. At least one feature of the p roduct must be installed before applying the patch. #define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT 1651L // Windows Installer does n ot permit patching of managed advertised products. At least one feature of the p roduct must be installed before applying the patch.
#endif #endif
// LOCALIZE END // LOCALIZE END
// The following error codes are returned from MSI 4.0 and later
// LOCALIZE BEGIN:
#ifndef ERROR_INSTALL_SERVICE_SAFEBOOT
#define ERROR_INSTALL_SERVICE_SAFEBOOT 1652L // The Windows Installer servic
e is not accessible in Safe Mode. Please try again when your computer is not in
Safe Mode or you can use System Restore to return your machine to a previous goo
d state.
#endif
// LOCALIZE END
#endif // _MSI_H_ #endif // _MSI_H_
 End of changes. 163 change blocks. 
758 lines changed or deleted 1141 lines changed or added


 msiquery.h (3.1.4000.3959-Windows 5.0)   msiquery.h (4.5.6002.18005-Windows 6.0) 
skipping to change at line 208 skipping to change at line 208
#define MsiDatabaseOpenView MsiDatabaseOpenViewW #define MsiDatabaseOpenView MsiDatabaseOpenViewW
#else #else
#define MsiDatabaseOpenView MsiDatabaseOpenViewA #define MsiDatabaseOpenView MsiDatabaseOpenViewA
#endif // !UNICODE #endif // !UNICODE
// Returns the MSIDBERROR enum and name of the column corresponding to the error // Returns the MSIDBERROR enum and name of the column corresponding to the error
// Similar to a GetLastError function, but for the view. NOT the same as MsiGetL astErrorRecord // Similar to a GetLastError function, but for the view. NOT the same as MsiGetL astErrorRecord
// Returns errors of MsiViewModify. // Returns errors of MsiViewModify.
MSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE hView, MSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE hView,
LPSTR szColumnNameBuffer, // buffer to hold column name __out_ecount_opt(*pcchBuf) LPSTR szColumnNameBuffer, // buffer to hold
DWORD* pcchBuf); // size of buffer column name
__inout_opt LPDWORD pcchBuf); // size of buff
er
MSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE hView, MSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE hView,
LPWSTR szColumnNameBuffer, // buffer to hold column name __out_ecount_opt(*pcchBuf) LPWSTR szColumnNameBuffer, // buffer to hol
DWORD* pcchBuf); // size of buffer d column name
__inout_opt LPDWORD pcchBuf); // size of buff
er
#ifdef UNICODE #ifdef UNICODE
#define MsiViewGetError MsiViewGetErrorW #define MsiViewGetError MsiViewGetErrorW
#else #else
#define MsiViewGetError MsiViewGetErrorA #define MsiViewGetError MsiViewGetErrorA
#endif // !UNICODE #endif // !UNICODE
// Exectute the view query, supplying parameters as required // Exectute the view query, supplying parameters as required
// Returns ERROR_SUCCESS, ERROR_INVALID_HANDLE, ERROR_INVALID_HANDLE_STATE, ERRO R_GEN_FAILURE // Returns ERROR_SUCCESS, ERROR_INVALID_HANDLE, ERROR_INVALID_HANDLE_STATE, ERRO R_GEN_FAILURE
// Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord // Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord
skipping to change at line 315 skipping to change at line 315
MSIHANDLE *phSummaryInfo); // returned handle to summary information data MSIHANDLE *phSummaryInfo); // returned handle to summary information data
#ifdef UNICODE #ifdef UNICODE
#define MsiGetSummaryInformation MsiGetSummaryInformationW #define MsiGetSummaryInformation MsiGetSummaryInformationW
#else #else
#define MsiGetSummaryInformation MsiGetSummaryInformationA #define MsiGetSummaryInformation MsiGetSummaryInformationA
#endif // !UNICODE #endif // !UNICODE
// Obtain the number of existing properties in the SummaryInformation stream // Obtain the number of existing properties in the SummaryInformation stream
UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo, UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo,
UINT *puiPropertyCount); // pointer to location to return total property count PUINT puiPropertyCount); // pointer to location to return total property count
// Set a single summary information property // Set a single summary information property
// Returns ERROR_SUCCESS, ERROR_INVALID_HANDLE, ERROR_UNKNOWN_PROPERTY // Returns ERROR_SUCCESS, ERROR_INVALID_HANDLE, ERROR_UNKNOWN_PROPERTY
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE hSummaryInfo, UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE hSummaryInfo,
UINT uiProperty, // property ID, one of allowed values for summar y information UINT uiProperty, // property ID, one of allowed values for summar y information
UINT uiDataType, // VT_I4, VT_LPSTR, VT_FILETIME, or VT_EMPTY UINT uiDataType, // VT_I4, VT_LPSTR, VT_FILETIME, or VT_EMPTY
INT iValue, // integer value, used only if integer property INT iValue, // integer value, used only if integer property
FILETIME *pftValue, // pointer to filetime value, used only if datet ime property FILETIME *pftValue, // pointer to filetime value, used only if datet ime property
LPCSTR szValue); // text value, used only if string property LPCSTR szValue); // text value, used only if string property
skipping to change at line 343 skipping to change at line 343
#define MsiSummaryInfoSetProperty MsiSummaryInfoSetPropertyW #define MsiSummaryInfoSetProperty MsiSummaryInfoSetPropertyW
#else #else
#define MsiSummaryInfoSetProperty MsiSummaryInfoSetPropertyA #define MsiSummaryInfoSetProperty MsiSummaryInfoSetPropertyA
#endif // !UNICODE #endif // !UNICODE
// Get a single property from the summary information // Get a single property from the summary information
// Returns ERROR_SUCCESS, ERROR_INVALID_HANDLE, ERROR_UNKNOWN_PROPERTY // Returns ERROR_SUCCESS, ERROR_INVALID_HANDLE, ERROR_UNKNOWN_PROPERTY
UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE hSummaryInfo, UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE hSummaryInfo,
UINT uiProperty, // property ID, one of allowed values for summar y information UINT uiProperty, // property ID, one of allowed values for summar y information
UINT *puiDataType, // returned type: VT_I4, VT_LPSTR, VT_FILETIME, __out PUINT puiDataType, // returned type: VT_I4, VT_LPSTR, VT_FILE
VT_EMPTY TIME, VT_EMPTY
INT *piValue, // returned integer property data __out LPINT piValue, // returned integer property data
FILETIME *pftValue, // returned datetime property data __out FILETIME *pftValue, // returned da
LPSTR szValueBuf, // buffer to return string property data tetime property data
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPSTR szValueBuf, // buffer to ret
urn string property data
__inout_opt LPDWORD pcchValueBuf); // in/out buff
er character count
UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE hSummaryInfo, UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE hSummaryInfo,
UINT uiProperty, // property ID, one of allowed values for summar y information UINT uiProperty, // property ID, one of allowed values for summar y information
UINT *puiDataType, // returned type: VT_I4, VT_LPSTR, VT_FILETIME, __out PUINT puiDataType, // returned type: VT_I4, VT_LPSTR, VT_FILE
VT_EMPTY TIME, VT_EMPTY
INT *piValue, // returned integer property data __out LPINT piValue, // returned integer property data
FILETIME *pftValue, // returned datetime property data __out FILETIME *pftValue, // returned da
LPWSTR szValueBuf, // buffer to return string property data tetime property data
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPWSTR szValueBuf, // buffer to re
turn string property data
__inout_opt LPDWORD pcchValueBuf); // in/out buff
er character count
#ifdef UNICODE #ifdef UNICODE
#define MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyW #define MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyW
#else #else
#define MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyA #define MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyA
#endif // !UNICODE #endif // !UNICODE
// Write back changed information to summary information stream // Write back changed information to summary information stream
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE hSummaryInfo); UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE hSummaryInfo);
skipping to change at line 562 skipping to change at line 562
UINT iField); UINT iField);
// Return the string value of a record field // Return the string value of a record field
// Integer fields will be converted to a string // Integer fields will be converted to a string
// Null and non-existent fields will report a value of 0 // Null and non-existent fields will report a value of 0
// Fields containing stream data will return ERROR_INVALID_DATATYPE // Fields containing stream data will return ERROR_INVALID_DATATYPE
// Returns ERROR_SUCCESS, ERROR_MORE_DATA, // Returns ERROR_SUCCESS, ERROR_MORE_DATA,
// ERROR_INVALID_HANDLE, ERROR_INVALID_FIELD, ERROR_BAD_ARGUMENTS // ERROR_INVALID_HANDLE, ERROR_INVALID_FIELD, ERROR_BAD_ARGUMENTS
UINT WINAPI MsiRecordGetStringA(MSIHANDLE hRecord, UINT WINAPI MsiRecordGetStringA(MSIHANDLE hRecord,
UINT iField, UINT iField,
LPSTR szValueBuf, // buffer for returned value __out_ecount_opt(*pcchValueBuf) LPSTR szValueBuf, // buffer for ret
DWORD *pcchValueBuf); // in/out buffer character count urned value
__inout_opt LPDWORD pcchValueBuf); // in/out buffe
r character count
UINT WINAPI MsiRecordGetStringW(MSIHANDLE hRecord, UINT WINAPI MsiRecordGetStringW(MSIHANDLE hRecord,
UINT iField, UINT iField,
LPWSTR szValueBuf, // buffer for returned value __out_ecount_opt(*pcchValueBuf) LPWSTR szValueBuf, // buffer for re
DWORD *pcchValueBuf); // in/out buffer character count turned value
__inout_opt LPDWORD pcchValueBuf); // in/out buffe
r character count
#ifdef UNICODE #ifdef UNICODE
#define MsiRecordGetString MsiRecordGetStringW #define MsiRecordGetString MsiRecordGetStringW
#else #else
#define MsiRecordGetString MsiRecordGetStringA #define MsiRecordGetString MsiRecordGetStringA
#endif // !UNICODE #endif // !UNICODE
// Returns the number of fields allocated in the record // Returns the number of fields allocated in the record
// Does not count field 0, used for formatting and op codes // Does not count field 0, used for formatting and op codes
UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE hRecord); UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE hRecord);
skipping to change at line 603 skipping to change at line 603
#else #else
#define MsiRecordSetStream MsiRecordSetStreamA #define MsiRecordSetStream MsiRecordSetStreamA
#endif // !UNICODE #endif // !UNICODE
// Read bytes from a record stream field into a buffer // Read bytes from a record stream field into a buffer
// Must set the in/out argument to the requested byte count to read // Must set the in/out argument to the requested byte count to read
// The number of bytes transferred is returned through the argument // The number of bytes transferred is returned through the argument
// If no more bytes are available, ERROR_SUCCESS is still returned // If no more bytes are available, ERROR_SUCCESS is still returned
UINT WINAPI MsiRecordReadStream(MSIHANDLE hRecord, UINT WINAPI MsiRecordReadStream(MSIHANDLE hRecord,
UINT iField, UINT iField,
char *szDataBuf, // buffer to receive bytes from stream __out_bcount_opt(*pcbDataBuf) char *szDataBuf, // buffer to receive
DWORD *pcbDataBuf); // in/out buffer byte count bytes from stream
__inout LPDWORD pcbDataBuf); // in/out buffer byt
e count
// Clears all data fields in a record to NULL // Clears all data fields in a record to NULL
UINT WINAPI MsiRecordClearData(MSIHANDLE hRecord); UINT WINAPI MsiRecordClearData(MSIHANDLE hRecord);
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Functions to access a running installation, called from custom actions // Functions to access a running installation, called from custom actions
// The install handle is the single argument passed to custom actions // The install handle is the single argument passed to custom actions
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
skipping to change at line 642 skipping to change at line 642
#define MsiSetProperty MsiSetPropertyW #define MsiSetProperty MsiSetPropertyW
#else #else
#define MsiSetProperty MsiSetPropertyA #define MsiSetProperty MsiSetPropertyA
#endif // !UNICODE #endif // !UNICODE
// Get the value for an installer property // Get the value for an installer property
// If the property is not defined, it is equivalent to a 0-length value, not err or // If the property is not defined, it is equivalent to a 0-length value, not err or
// Returns ERROR_SUCCESS, ERROR_MORE_DATA, ERROR_INVALID_HANDLE, ERROR_BAD_ARGUM ENTS // Returns ERROR_SUCCESS, ERROR_MORE_DATA, ERROR_INVALID_HANDLE, ERROR_BAD_ARGUM ENTS
UINT WINAPI MsiGetPropertyA(MSIHANDLE hInstall, UINT WINAPI MsiGetPropertyA(MSIHANDLE hInstall,
LPCSTR szName, // property identifier, case-sensitive LPCSTR szName, // property ide
LPSTR szValueBuf, // buffer for returned property value ntifier, case-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPSTR szValueBuf, // buffer for r
eturned property value
__inout_opt LPDWORD pcchValueBuf); // in/out buf
fer character count
UINT WINAPI MsiGetPropertyW(MSIHANDLE hInstall, UINT WINAPI MsiGetPropertyW(MSIHANDLE hInstall,
LPCWSTR szName, // property identifier, case-sensitive LPCWSTR szName, // property id
LPWSTR szValueBuf, // buffer for returned property value entifier, case-sensitive
DWORD *pcchValueBuf); // in/out buffer character count __out_ecount_opt(*pcchValueBuf) LPWSTR szValueBuf, // buffer for
returned property value
__inout_opt LPDWORD pcchValueBuf); // in/out buf
fer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetProperty MsiGetPropertyW #define MsiGetProperty MsiGetPropertyW
#else #else
#define MsiGetProperty MsiGetPropertyA #define MsiGetProperty MsiGetPropertyA
#endif // !UNICODE #endif // !UNICODE
// Return the numeric language for the currently running install // Return the numeric language for the currently running install
// Returns 0 if an install not running // Returns 0 if an install not running
LANGID WINAPI MsiGetLanguage(MSIHANDLE hInstall); LANGID WINAPI MsiGetLanguage(MSIHANDLE hInstall);
skipping to change at line 680 skipping to change at line 680
UINT WINAPI MsiSetMode(MSIHANDLE hInstall, UINT WINAPI MsiSetMode(MSIHANDLE hInstall,
MSIRUNMODE eRunMode, // particular mode for which state is to be set MSIRUNMODE eRunMode, // particular mode for which state is to be set
BOOL fState); // new state for bit flag BOOL fState); // new state for bit flag
// Format record data using a format string containing field markers and/or prop erties // Format record data using a format string containing field markers and/or prop erties
// Record field 0 must contain the format string // Record field 0 must contain the format string
// Other fields must contain data that may be referenced by the format string. // Other fields must contain data that may be referenced by the format string.
UINT WINAPI MsiFormatRecordA(MSIHANDLE hInstall, // non-zero for property expans ion UINT WINAPI MsiFormatRecordA(MSIHANDLE hInstall, // non-zero for property expans ion
MSIHANDLE hRecord, // handle to record, field 0 contains format st MSIHANDLE hRecord, // handle to
ring record, field 0 contains format string
LPSTR szResultBuf, // buffer to return formatted string __out_ecount_opt(*pcchResultBuf) LPSTR szResultBuf, // buffer to r
DWORD *pcchResultBuf); // in/out buffer character count eturn formatted string
__inout_opt LPDWORD pcchResultBuf); // in/out bu
ffer character count
UINT WINAPI MsiFormatRecordW(MSIHANDLE hInstall, // non-zero for property expans ion UINT WINAPI MsiFormatRecordW(MSIHANDLE hInstall, // non-zero for property expans ion
MSIHANDLE hRecord, // handle to record, field 0 contains format st MSIHANDLE hRecord, // handle to
ring record, field 0 contains format string
LPWSTR szResultBuf, // buffer to return formatted string __out_ecount_opt(*pcchResultBuf) LPWSTR szResultBuf, // buffer to
DWORD *pcchResultBuf); // in/out buffer character count return formatted string
__inout_opt LPDWORD pcchResultBuf); // in/out bu
ffer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiFormatRecord MsiFormatRecordW #define MsiFormatRecord MsiFormatRecordW
#else #else
#define MsiFormatRecord MsiFormatRecordA #define MsiFormatRecord MsiFormatRecordA
#endif // !UNICODE #endif // !UNICODE
// Execute another action, either built-in, custom, or UI wizard // Execute another action, either built-in, custom, or UI wizard
// Returns ERROR_FUNCTION_NOT_CALLED if action not found // Returns ERROR_FUNCTION_NOT_CALLED if action not found
// Returns ERROR_SUCCESS if action completed succesfully // Returns ERROR_SUCCESS if action completed succesfully
// Returns ERROR_INSTALL_USEREXIT if user cancelled during action // Returns ERROR_INSTALL_USEREXIT if user cancelled during action
skipping to change at line 847 skipping to change at line 847
// Can specify either current feature state or proposed state // Can specify either current feature state or proposed state
// Can specify extent of related features to cost // Can specify extent of related features to cost
// Note that adding costs for several features may produce an // Note that adding costs for several features may produce an
// excessively large cost due to shared components and parents. // excessively large cost due to shared components and parents.
// Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord // Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord
UINT WINAPI MsiGetFeatureCostA(MSIHANDLE hInstall, UINT WINAPI MsiGetFeatureCostA(MSIHANDLE hInstall,
LPCSTR szFeature, // name of feature LPCSTR szFeature, // name of feature
MSICOSTTREE iCostTree, // portion of tree to cost MSICOSTTREE iCostTree, // portion of tree to cost
INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN
INT *piCost); // returned cost, in units of 512 bytes LPINT piCost); // returned cost, in units of 512 bytes
UINT WINAPI MsiGetFeatureCostW(MSIHANDLE hInstall, UINT WINAPI MsiGetFeatureCostW(MSIHANDLE hInstall,
LPCWSTR szFeature, // name of feature LPCWSTR szFeature, // name of feature
MSICOSTTREE iCostTree, // portion of tree to cost MSICOSTTREE iCostTree, // portion of tree to cost
INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN
INT *piCost); // returned cost, in units of 512 bytes LPINT piCost); // returned cost, in units of 512 bytes
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFeatureCost MsiGetFeatureCostW #define MsiGetFeatureCost MsiGetFeatureCostW
#else #else
#define MsiGetFeatureCost MsiGetFeatureCostA #define MsiGetFeatureCost MsiGetFeatureCostA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_MSI >= 150) #if (_WIN32_MSI >= 150)
// Enumerates the costs and temporary costs per drives for // Enumerates the costs and temporary costs per drives for
// szComponent. If szComponent is set to NULL, it enumerates // szComponent. If szComponent is set to NULL, it enumerates
skipping to change at line 877 skipping to change at line 877
// //
// Can specify either current feature state or proposed state. // Can specify either current feature state or proposed state.
// //
// Execution of this function sets the error record, accessible // Execution of this function sets the error record, accessible
// via MsiGetLastErrorRecord. // via MsiGetLastErrorRecord.
UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE hInstall, UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE hInstall,
LPCSTR szComponent, // name of component LPCSTR szComponent, // name of component
DWORD dwIndex, // 0-based index into the list of drives DWORD dwIndex, // 0-based index into the list of drives
INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN
LPSTR szDriveBuf, // buffer for returned value __out_ecount(*pcchDriveBuf) LPSTR szDriveBuf, // buffer for re
DWORD *pcchDriveBuf, // in/out buffer character count turned value
INT *piCost, // returned cost, in units of 512 bytes __inout LPDWORD pcchDriveBuf, // in/out buff
INT *piTempCost); // returned temporary cost, in units of 512 er character count
bytes __out LPINT piCost, // returned co
st, in units of 512 bytes
__out LPINT piTempCost); // returned te
mporary cost, in units of 512 bytes
UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE hInstall, UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE hInstall,
LPCWSTR szComponent, // name of component LPCWSTR szComponent, // name of component
DWORD dwIndex, // 0-based index into the list of drives DWORD dwIndex, // 0-based index into the list of drives
INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN INSTALLSTATE iState, // requested state, or INSTALLSTATE_UNKNOWN
LPWSTR szDriveBuf, // buffer for returned value __out_ecount(*pcchDriveBuf) LPWSTR szDriveBuf, // buffer for r
DWORD *pcchDriveBuf, // in/out buffer character count eturned value
INT *piCost, // returned cost, in units of 512 bytes __inout LPDWORD pcchDriveBuf, // in/out buff
INT *piTempCost); // returned temporary cost, in units of 512 er character count
bytes __out LPINT piCost, // returned co
st, in units of 512 bytes
__out LPINT piTempCost); // returned te
mporary cost, in units of 512 bytes
#ifdef UNICODE #ifdef UNICODE
#define MsiEnumComponentCosts MsiEnumComponentCostsW #define MsiEnumComponentCosts MsiEnumComponentCostsW
#else #else
#define MsiEnumComponentCosts MsiEnumComponentCostsA #define MsiEnumComponentCosts MsiEnumComponentCostsA
#endif // !UNICODE #endif // !UNICODE
#endif // (_WIN32_MSI >= 150) #endif // (_WIN32_MSI >= 150)
// Set the install level for a full product installation (not a feature request) // Set the install level for a full product installation (not a feature request)
// Setting the value to 0 initialized components and features to the default lev el // Setting the value to 0 initialized components and features to the default lev el
skipping to change at line 910 skipping to change at line 910
UINT WINAPI MsiSetInstallLevel(MSIHANDLE hInstall, UINT WINAPI MsiSetInstallLevel(MSIHANDLE hInstall,
int iInstallLevel); int iInstallLevel);
// Get the valid install states for a feature, represented by bit flags // Get the valid install states for a feature, represented by bit flags
// For each valid install state, a bit is set of value: (1 << INSTALLSTATE) // For each valid install state, a bit is set of value: (1 << INSTALLSTATE)
// Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord // Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord
UINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE hInstall, UINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE hInstall,
LPCSTR szFeature, LPCSTR szFeature,
DWORD *dwInstallStates); LPDWORD lpInstallStates);
UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE hInstall, UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE hInstall,
LPCWSTR szFeature, LPCWSTR szFeature,
DWORD *dwInstallStates); LPDWORD lpInstallStates);
#ifdef UNICODE #ifdef UNICODE
#define MsiGetFeatureValidStates MsiGetFeatureValidStatesW #define MsiGetFeatureValidStates MsiGetFeatureValidStatesW
#else #else
#define MsiGetFeatureValidStates MsiGetFeatureValidStatesA #define MsiGetFeatureValidStates MsiGetFeatureValidStatesA
#endif // !UNICODE #endif // !UNICODE
// Return the full source path for a folder in the Directory table // Return the full source path for a folder in the Directory table
// Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord // Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord
UINT WINAPI MsiGetSourcePathA(MSIHANDLE hInstall, UINT WINAPI MsiGetSourcePathA(MSIHANDLE hInstall,
LPCSTR szFolder, // folder identifier, primary key into Directo LPCSTR szFolder, // folder ident
ry table ifier, primary key into Directory table
LPSTR szPathBuf, // buffer to return full path __out_ecount_opt(*pcchPathBuf) LPSTR szPathBuf, // buffer to re
DWORD *pcchPathBuf); // in/out buffer character count turn full path
__inout_opt LPDWORD pcchPathBuf); // in/out buf
fer character count
UINT WINAPI MsiGetSourcePathW(MSIHANDLE hInstall, UINT WINAPI MsiGetSourcePathW(MSIHANDLE hInstall,
LPCWSTR szFolder, // folder identifier, primary key into Direct LPCWSTR szFolder, // folder iden
ory table tifier, primary key into Directory table
LPWSTR szPathBuf, // buffer to return full path __out_ecount_opt(*pcchPathBuf) LPWSTR szPathBuf, // buffer to r
DWORD *pcchPathBuf); // in/out buffer character count eturn full path
__inout_opt LPDWORD pcchPathBuf); // in/out buf
fer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetSourcePath MsiGetSourcePathW #define MsiGetSourcePath MsiGetSourcePathW
#else #else
#define MsiGetSourcePath MsiGetSourcePathA #define MsiGetSourcePath MsiGetSourcePathA
#endif // !UNICODE #endif // !UNICODE
// Return the full target path for a folder in the Directory table // Return the full target path for a folder in the Directory table
// Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord // Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord
UINT WINAPI MsiGetTargetPathA(MSIHANDLE hInstall, UINT WINAPI MsiGetTargetPathA(MSIHANDLE hInstall,
LPCSTR szFolder, // folder identifier, primary key into Directo LPCSTR szFolder, // folder ident
ry table ifier, primary key into Directory table
LPSTR szPathBuf, // buffer to return full path __out_ecount_opt(*pcchPathBuf) LPSTR szPathBuf, // buffer to re
DWORD *pcchPathBuf); // in/out buffer character count turn full path
__inout_opt LPDWORD pcchPathBuf); // in/out buf
fer character count
UINT WINAPI MsiGetTargetPathW(MSIHANDLE hInstall, UINT WINAPI MsiGetTargetPathW(MSIHANDLE hInstall,
LPCWSTR szFolder, // folder identifier, primary key into Direct LPCWSTR szFolder, // folder iden
ory table tifier, primary key into Directory table
LPWSTR szPathBuf, // buffer to return full path __out_ecount_opt(*pcchPathBuf) LPWSTR szPathBuf, // buffer to r
DWORD *pcchPathBuf); // in/out buffer character count eturn full path
__inout_opt LPDWORD pcchPathBuf); // in/out buf
fer character count
#ifdef UNICODE #ifdef UNICODE
#define MsiGetTargetPath MsiGetTargetPathW #define MsiGetTargetPath MsiGetTargetPathW
#else #else
#define MsiGetTargetPath MsiGetTargetPathA #define MsiGetTargetPath MsiGetTargetPathA
#endif // !UNICODE #endif // !UNICODE
// Set the full target path for a folder in the Directory table // Set the full target path for a folder in the Directory table
// Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord // Execution of this function sets the error record, accessible via MsiGetLastEr rorRecord
UINT WINAPI MsiSetTargetPathA(MSIHANDLE hInstall, UINT WINAPI MsiSetTargetPathA(MSIHANDLE hInstall,
 End of changes. 22 change blocks. 
70 lines changed or deleted 110 lines changed or added

This html diff was produced by rfcdiff 1.41.