/*** Autogenerated by WIDL 3.16 from ../../wine-staging/include/inseng.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include <rpc.h>
#include <rpcndr.h>

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __inseng_h__
#define __inseng_h__

/* Forward declarations */

#ifndef __ICifComponent_FWD_DEFINED__
#define __ICifComponent_FWD_DEFINED__
typedef interface ICifComponent ICifComponent;
#ifdef __cplusplus
interface ICifComponent;
#endif /* __cplusplus */
#endif

#ifndef __ICifRWComponent_FWD_DEFINED__
#define __ICifRWComponent_FWD_DEFINED__
typedef interface ICifRWComponent ICifRWComponent;
#ifdef __cplusplus
interface ICifRWComponent;
#endif /* __cplusplus */
#endif

#ifndef __IEnumCifComponents_FWD_DEFINED__
#define __IEnumCifComponents_FWD_DEFINED__
typedef interface IEnumCifComponents IEnumCifComponents;
#ifdef __cplusplus
interface IEnumCifComponents;
#endif /* __cplusplus */
#endif

#ifndef __ICifGroup_FWD_DEFINED__
#define __ICifGroup_FWD_DEFINED__
typedef interface ICifGroup ICifGroup;
#ifdef __cplusplus
interface ICifGroup;
#endif /* __cplusplus */
#endif

#ifndef __ICifRWGroup_FWD_DEFINED__
#define __ICifRWGroup_FWD_DEFINED__
typedef interface ICifRWGroup ICifRWGroup;
#ifdef __cplusplus
interface ICifRWGroup;
#endif /* __cplusplus */
#endif

#ifndef __IEnumCifGroups_FWD_DEFINED__
#define __IEnumCifGroups_FWD_DEFINED__
typedef interface IEnumCifGroups IEnumCifGroups;
#ifdef __cplusplus
interface IEnumCifGroups;
#endif /* __cplusplus */
#endif

#ifndef __ICifMode_FWD_DEFINED__
#define __ICifMode_FWD_DEFINED__
typedef interface ICifMode ICifMode;
#ifdef __cplusplus
interface ICifMode;
#endif /* __cplusplus */
#endif

#ifndef __ICifRWMode_FWD_DEFINED__
#define __ICifRWMode_FWD_DEFINED__
typedef interface ICifRWMode ICifRWMode;
#ifdef __cplusplus
interface ICifRWMode;
#endif /* __cplusplus */
#endif

#ifndef __IEnumCifModes_FWD_DEFINED__
#define __IEnumCifModes_FWD_DEFINED__
typedef interface IEnumCifModes IEnumCifModes;
#ifdef __cplusplus
interface IEnumCifModes;
#endif /* __cplusplus */
#endif

#ifndef __ICifFile_FWD_DEFINED__
#define __ICifFile_FWD_DEFINED__
typedef interface ICifFile ICifFile;
#ifdef __cplusplus
interface ICifFile;
#endif /* __cplusplus */
#endif

#ifndef __ICifRWFile_FWD_DEFINED__
#define __ICifRWFile_FWD_DEFINED__
typedef interface ICifRWFile ICifRWFile;
#ifdef __cplusplus
interface ICifRWFile;
#endif /* __cplusplus */
#endif

#ifndef __IInstallEngineCallback_FWD_DEFINED__
#define __IInstallEngineCallback_FWD_DEFINED__
typedef interface IInstallEngineCallback IInstallEngineCallback;
#ifdef __cplusplus
interface IInstallEngineCallback;
#endif /* __cplusplus */
#endif

#ifndef __IInstallEngine_FWD_DEFINED__
#define __IInstallEngine_FWD_DEFINED__
typedef interface IInstallEngine IInstallEngine;
#ifdef __cplusplus
interface IInstallEngine;
#endif /* __cplusplus */
#endif

#ifndef __IInstallEngine2_FWD_DEFINED__
#define __IInstallEngine2_FWD_DEFINED__
typedef interface IInstallEngine2 IInstallEngine2;
#ifdef __cplusplus
interface IInstallEngine2;
#endif /* __cplusplus */
#endif

#ifndef __IInstallEngineTiming_FWD_DEFINED__
#define __IInstallEngineTiming_FWD_DEFINED__
typedef interface IInstallEngineTiming IInstallEngineTiming;
#ifdef __cplusplus
interface IInstallEngineTiming;
#endif /* __cplusplus */
#endif

#ifndef __InstallEngine_FWD_DEFINED__
#define __InstallEngine_FWD_DEFINED__
#ifdef __cplusplus
typedef class InstallEngine InstallEngine;
#else
typedef struct InstallEngine InstallEngine;
#endif /* defined __cplusplus */
#endif /* defined __InstallEngine_FWD_DEFINED__ */

#ifndef __DownloadSiteMgr_FWD_DEFINED__
#define __DownloadSiteMgr_FWD_DEFINED__
#ifdef __cplusplus
typedef class DownloadSiteMgr DownloadSiteMgr;
#else
typedef struct DownloadSiteMgr DownloadSiteMgr;
#endif /* defined __cplusplus */
#endif /* defined __DownloadSiteMgr_FWD_DEFINED__ */

/* Headers for imported files */

#include <unknwn.h>

#ifdef __cplusplus
extern "C" {
#endif

#if 0
#endif
#ifndef __IStream_FWD_DEFINED__
#define __IStream_FWD_DEFINED__
typedef interface IStream IStream;
#ifdef __cplusplus
interface IStream;
#endif /* __cplusplus */
#endif

#define MAX_ID_LENGTH            48
#define MAX_DISPLAYNAME_LENGTH   128
#define URLF_DEFAULT                 0x0
#define URLF_EXTRACT                 0x1
#define URLF_RELATIVEURL             0x2
#define URLF_DELETE_AFTER_EXTRACT    0x4
#define ENGINESTATUS_NOTREADY    0x0
#define ENGINESTATUS_LOADING     0x1
#define ENGINESTATUS_INSTALLING  0x2
#define ENGINESTATUS_READY       0x3
#define SETACTION_NONE       0x0
#define SETACTION_INSTALL    0x1
#define INSTALLOPTIONS_NOCACHE               0x01
#define INSTALLOPTIONS_DOWNLOAD              0x02
#define INSTALLOPTIONS_INSTALL               0x04
#define INSTALLOPTIONS_DONTALLOWXPLATFORM    0x08
#define INSTALLOPTIONS_FORCEDEPENDENCIES     0x10
#define EXECUTEJOB_SILENT                0x01
#define EXECUTEJOB_DELETE_JOB            0x02
#define EXECUTEJOB_VERIFYFILES           0x08
#define EXECUTEJOB_IGNORETRUST           0x10
#define EXECUTEJOB_IGNOREDOWNLOADERROR   0x20
#define EXECUTEJOB_DONTALLOWCANCEL       0x40
#define ENGINEPROBLEM_DOWNLOADFAIL   0x1
#define PLATFORM_WIN95       0x01
#define PLATFORM_WIN98       0x02
#define PLATFORM_NT4         0x04
#define PLATFORM_NT5         0x08
#define PLATFORM_NT4ALPHA    0x10
#define PLATFORM_NT5ALPHA    0x20
#define PLATFORM_MILLEN      0x40
#define PLATFORM_ALL         (PLATFORM_WIN95 | PLATFORM_WIN98 | PLATFORM_NT4 | PLATFORM_NT5 | PLATFORM_NT4ALPHA | PLATFORM_NT5ALPHA | PLATFORM_MILLEN)
enum InstallStatus {
    INSTALLSTATUS_INITIALIZING = 0,
    INSTALLSTATUS_DEPENDENCY = 1,
    INSTALLSTATUS_DOWNLOADING = 2,
    INSTALLSTATUS_COPYING = 3,
    INSTALLSTATUS_RETRYING = 4,
    INSTALLSTATUS_CHECKINGTRUST = 5,
    INSTALLSTATUS_EXTRACTING = 6,
    INSTALLSTATUS_RUNNING = 7,
    INSTALLSTATUS_FINISHED = 8,
    INSTALLSTATUS_DOWNLOADFINISHED = 9
};
enum ComponentAction {
    ActionNone = 0,
    ActionInstall = 1,
    ActionUninstall = 2
};
/*****************************************************************************
 * ICifComponent interface
 */
#ifndef __ICifComponent_INTERFACE_DEFINED__
#define __ICifComponent_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifComponent
{

    BEGIN_INTERFACE

    virtual HRESULT STDMETHODCALLTYPE GetID(
        char *id,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGUID(
        char *guid,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDescription(
        char *desc,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDetails(
        char *details,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUrl(
        UINT index,
        char *url,
        DWORD size,
        DWORD *flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFileExtractList(
        UINT index,
        char *extract,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUrlCheckRange(
        UINT index,
        DWORD *min,
        DWORD *max) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCommand(
        UINT index,
        char *cmd,
        DWORD cmd_size,
        char *switches,
        DWORD switch_size,
        DWORD *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVersion(
        DWORD *version,
        DWORD *build) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLocale(
        char *pszLocale,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUninstallKey(
        char *key,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInstalledSize(
        DWORD *win,
        DWORD *app) = 0;

    virtual DWORD STDMETHODCALLTYPE GetDownloadSize(
        ) = 0;

    virtual DWORD STDMETHODCALLTYPE GetExtractSize(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSuccessKey(
        char *key,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProgressKeys(
        char *progress,
        DWORD progress_size,
        char *cancel,
        DWORD cancel_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsActiveSetupAware(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsRebootRequired(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE RequiresAdminRights(
        ) = 0;

    virtual DWORD STDMETHODCALLTYPE GetPriority(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDependency(
        UINT index,
        char *id,
        DWORD buf,
        char *type,
        DWORD *ver,
        DWORD *build) = 0;

    virtual DWORD STDMETHODCALLTYPE GetPlatform(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMode(
        UINT index,
        char *mode,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGroup(
        char *id,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUIVisible(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPatchID(
        char *id,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDetVersion(
        char *dll,
        DWORD dll_size,
        char *entry,
        DWORD entry_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTreatAsOneComponents(
        UINT index,
        char *id,
        DWORD buf) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCustomData(
        char *key,
        char *data,
        DWORD size) = 0;

    virtual DWORD STDMETHODCALLTYPE IsComponentInstalled(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsComponentDownloaded(
        ) = 0;

    virtual DWORD STDMETHODCALLTYPE IsThisVersionInstalled(
        DWORD version,
        DWORD build,
        DWORD *ret_version,
        DWORD *ret_build) = 0;

    virtual DWORD STDMETHODCALLTYPE GetInstallQueueState(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInstallQueueState(
        DWORD state) = 0;

    virtual DWORD STDMETHODCALLTYPE GetActualDownloadSize(
        ) = 0;

    virtual DWORD STDMETHODCALLTYPE GetCurrentPriority(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCurrentPriority(
        DWORD priority) = 0;

    END_INTERFACE

};
#else
typedef struct ICifComponentVtbl {
    BEGIN_INTERFACE

    /*** ICifComponent methods ***/
    HRESULT (STDMETHODCALLTYPE *GetID)(
        ICifComponent *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        ICifComponent *This,
        char *guid,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifComponent *This,
        char *desc,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetails)(
        ICifComponent *This,
        char *details,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetUrl)(
        ICifComponent *This,
        UINT index,
        char *url,
        DWORD size,
        DWORD *flags);

    HRESULT (STDMETHODCALLTYPE *GetFileExtractList)(
        ICifComponent *This,
        UINT index,
        char *extract,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetUrlCheckRange)(
        ICifComponent *This,
        UINT index,
        DWORD *min,
        DWORD *max);

    HRESULT (STDMETHODCALLTYPE *GetCommand)(
        ICifComponent *This,
        UINT index,
        char *cmd,
        DWORD cmd_size,
        char *switches,
        DWORD switch_size,
        DWORD *type);

    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        ICifComponent *This,
        DWORD *version,
        DWORD *build);

    HRESULT (STDMETHODCALLTYPE *GetLocale)(
        ICifComponent *This,
        char *pszLocale,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetUninstallKey)(
        ICifComponent *This,
        char *key,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetInstalledSize)(
        ICifComponent *This,
        DWORD *win,
        DWORD *app);

    DWORD (STDMETHODCALLTYPE *GetDownloadSize)(
        ICifComponent *This);

    DWORD (STDMETHODCALLTYPE *GetExtractSize)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetSuccessKey)(
        ICifComponent *This,
        char *key,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetProgressKeys)(
        ICifComponent *This,
        char *progress,
        DWORD progress_size,
        char *cancel,
        DWORD cancel_size);

    HRESULT (STDMETHODCALLTYPE *IsActiveSetupAware)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *IsRebootRequired)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *RequiresAdminRights)(
        ICifComponent *This);

    DWORD (STDMETHODCALLTYPE *GetPriority)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetDependency)(
        ICifComponent *This,
        UINT index,
        char *id,
        DWORD buf,
        char *type,
        DWORD *ver,
        DWORD *build);

    DWORD (STDMETHODCALLTYPE *GetPlatform)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetMode)(
        ICifComponent *This,
        UINT index,
        char *mode,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetGroup)(
        ICifComponent *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *IsUIVisible)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetPatchID)(
        ICifComponent *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetVersion)(
        ICifComponent *This,
        char *dll,
        DWORD dll_size,
        char *entry,
        DWORD entry_size);

    HRESULT (STDMETHODCALLTYPE *GetTreatAsOneComponents)(
        ICifComponent *This,
        UINT index,
        char *id,
        DWORD buf);

    HRESULT (STDMETHODCALLTYPE *GetCustomData)(
        ICifComponent *This,
        char *key,
        char *data,
        DWORD size);

    DWORD (STDMETHODCALLTYPE *IsComponentInstalled)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *IsComponentDownloaded)(
        ICifComponent *This);

    DWORD (STDMETHODCALLTYPE *IsThisVersionInstalled)(
        ICifComponent *This,
        DWORD version,
        DWORD build,
        DWORD *ret_version,
        DWORD *ret_build);

    DWORD (STDMETHODCALLTYPE *GetInstallQueueState)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *SetInstallQueueState)(
        ICifComponent *This,
        DWORD state);

    DWORD (STDMETHODCALLTYPE *GetActualDownloadSize)(
        ICifComponent *This);

    DWORD (STDMETHODCALLTYPE *GetCurrentPriority)(
        ICifComponent *This);

    HRESULT (STDMETHODCALLTYPE *SetCurrentPriority)(
        ICifComponent *This,
        DWORD priority);

    END_INTERFACE
} ICifComponentVtbl;

interface ICifComponent {
    CONST_VTBL ICifComponentVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** ICifComponent methods ***/
#define ICifComponent_GetID(This,id,size) (This)->lpVtbl->GetID(This,id,size)
#define ICifComponent_GetGUID(This,guid,size) (This)->lpVtbl->GetGUID(This,guid,size)
#define ICifComponent_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifComponent_GetDetails(This,details,size) (This)->lpVtbl->GetDetails(This,details,size)
#define ICifComponent_GetUrl(This,index,url,size,flags) (This)->lpVtbl->GetUrl(This,index,url,size,flags)
#define ICifComponent_GetFileExtractList(This,index,extract,size) (This)->lpVtbl->GetFileExtractList(This,index,extract,size)
#define ICifComponent_GetUrlCheckRange(This,index,min,max) (This)->lpVtbl->GetUrlCheckRange(This,index,min,max)
#define ICifComponent_GetCommand(This,index,cmd,cmd_size,switches,switch_size,type) (This)->lpVtbl->GetCommand(This,index,cmd,cmd_size,switches,switch_size,type)
#define ICifComponent_GetVersion(This,version,build) (This)->lpVtbl->GetVersion(This,version,build)
#define ICifComponent_GetLocale(This,pszLocale,size) (This)->lpVtbl->GetLocale(This,pszLocale,size)
#define ICifComponent_GetUninstallKey(This,key,size) (This)->lpVtbl->GetUninstallKey(This,key,size)
#define ICifComponent_GetInstalledSize(This,win,app) (This)->lpVtbl->GetInstalledSize(This,win,app)
#define ICifComponent_GetDownloadSize(This) (This)->lpVtbl->GetDownloadSize(This)
#define ICifComponent_GetExtractSize(This) (This)->lpVtbl->GetExtractSize(This)
#define ICifComponent_GetSuccessKey(This,key,size) (This)->lpVtbl->GetSuccessKey(This,key,size)
#define ICifComponent_GetProgressKeys(This,progress,progress_size,cancel,cancel_size) (This)->lpVtbl->GetProgressKeys(This,progress,progress_size,cancel,cancel_size)
#define ICifComponent_IsActiveSetupAware(This) (This)->lpVtbl->IsActiveSetupAware(This)
#define ICifComponent_IsRebootRequired(This) (This)->lpVtbl->IsRebootRequired(This)
#define ICifComponent_RequiresAdminRights(This) (This)->lpVtbl->RequiresAdminRights(This)
#define ICifComponent_GetPriority(This) (This)->lpVtbl->GetPriority(This)
#define ICifComponent_GetDependency(This,index,id,buf,type,ver,build) (This)->lpVtbl->GetDependency(This,index,id,buf,type,ver,build)
#define ICifComponent_GetPlatform(This) (This)->lpVtbl->GetPlatform(This)
#define ICifComponent_GetMode(This,index,mode,size) (This)->lpVtbl->GetMode(This,index,mode,size)
#define ICifComponent_GetGroup(This,id,size) (This)->lpVtbl->GetGroup(This,id,size)
#define ICifComponent_IsUIVisible(This) (This)->lpVtbl->IsUIVisible(This)
#define ICifComponent_GetPatchID(This,id,size) (This)->lpVtbl->GetPatchID(This,id,size)
#define ICifComponent_GetDetVersion(This,dll,dll_size,entry,entry_size) (This)->lpVtbl->GetDetVersion(This,dll,dll_size,entry,entry_size)
#define ICifComponent_GetTreatAsOneComponents(This,index,id,buf) (This)->lpVtbl->GetTreatAsOneComponents(This,index,id,buf)
#define ICifComponent_GetCustomData(This,key,data,size) (This)->lpVtbl->GetCustomData(This,key,data,size)
#define ICifComponent_IsComponentInstalled(This) (This)->lpVtbl->IsComponentInstalled(This)
#define ICifComponent_IsComponentDownloaded(This) (This)->lpVtbl->IsComponentDownloaded(This)
#define ICifComponent_IsThisVersionInstalled(This,version,build,ret_version,ret_build) (This)->lpVtbl->IsThisVersionInstalled(This,version,build,ret_version,ret_build)
#define ICifComponent_GetInstallQueueState(This) (This)->lpVtbl->GetInstallQueueState(This)
#define ICifComponent_SetInstallQueueState(This,state) (This)->lpVtbl->SetInstallQueueState(This,state)
#define ICifComponent_GetActualDownloadSize(This) (This)->lpVtbl->GetActualDownloadSize(This)
#define ICifComponent_GetCurrentPriority(This) (This)->lpVtbl->GetCurrentPriority(This)
#define ICifComponent_SetCurrentPriority(This,priority) (This)->lpVtbl->SetCurrentPriority(This,priority)
#else
/*** ICifComponent methods ***/
static FORCEINLINE HRESULT ICifComponent_GetID(ICifComponent* This,char *id,DWORD size) {
    return This->lpVtbl->GetID(This,id,size);
}
static FORCEINLINE HRESULT ICifComponent_GetGUID(ICifComponent* This,char *guid,DWORD size) {
    return This->lpVtbl->GetGUID(This,guid,size);
}
static FORCEINLINE HRESULT ICifComponent_GetDescription(ICifComponent* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE HRESULT ICifComponent_GetDetails(ICifComponent* This,char *details,DWORD size) {
    return This->lpVtbl->GetDetails(This,details,size);
}
static FORCEINLINE HRESULT ICifComponent_GetUrl(ICifComponent* This,UINT index,char *url,DWORD size,DWORD *flags) {
    return This->lpVtbl->GetUrl(This,index,url,size,flags);
}
static FORCEINLINE HRESULT ICifComponent_GetFileExtractList(ICifComponent* This,UINT index,char *extract,DWORD size) {
    return This->lpVtbl->GetFileExtractList(This,index,extract,size);
}
static FORCEINLINE HRESULT ICifComponent_GetUrlCheckRange(ICifComponent* This,UINT index,DWORD *min,DWORD *max) {
    return This->lpVtbl->GetUrlCheckRange(This,index,min,max);
}
static FORCEINLINE HRESULT ICifComponent_GetCommand(ICifComponent* This,UINT index,char *cmd,DWORD cmd_size,char *switches,DWORD switch_size,DWORD *type) {
    return This->lpVtbl->GetCommand(This,index,cmd,cmd_size,switches,switch_size,type);
}
static FORCEINLINE HRESULT ICifComponent_GetVersion(ICifComponent* This,DWORD *version,DWORD *build) {
    return This->lpVtbl->GetVersion(This,version,build);
}
static FORCEINLINE HRESULT ICifComponent_GetLocale(ICifComponent* This,char *pszLocale,DWORD size) {
    return This->lpVtbl->GetLocale(This,pszLocale,size);
}
static FORCEINLINE HRESULT ICifComponent_GetUninstallKey(ICifComponent* This,char *key,DWORD size) {
    return This->lpVtbl->GetUninstallKey(This,key,size);
}
static FORCEINLINE HRESULT ICifComponent_GetInstalledSize(ICifComponent* This,DWORD *win,DWORD *app) {
    return This->lpVtbl->GetInstalledSize(This,win,app);
}
static FORCEINLINE DWORD ICifComponent_GetDownloadSize(ICifComponent* This) {
    return This->lpVtbl->GetDownloadSize(This);
}
static FORCEINLINE DWORD ICifComponent_GetExtractSize(ICifComponent* This) {
    return This->lpVtbl->GetExtractSize(This);
}
static FORCEINLINE HRESULT ICifComponent_GetSuccessKey(ICifComponent* This,char *key,DWORD size) {
    return This->lpVtbl->GetSuccessKey(This,key,size);
}
static FORCEINLINE HRESULT ICifComponent_GetProgressKeys(ICifComponent* This,char *progress,DWORD progress_size,char *cancel,DWORD cancel_size) {
    return This->lpVtbl->GetProgressKeys(This,progress,progress_size,cancel,cancel_size);
}
static FORCEINLINE HRESULT ICifComponent_IsActiveSetupAware(ICifComponent* This) {
    return This->lpVtbl->IsActiveSetupAware(This);
}
static FORCEINLINE HRESULT ICifComponent_IsRebootRequired(ICifComponent* This) {
    return This->lpVtbl->IsRebootRequired(This);
}
static FORCEINLINE HRESULT ICifComponent_RequiresAdminRights(ICifComponent* This) {
    return This->lpVtbl->RequiresAdminRights(This);
}
static FORCEINLINE DWORD ICifComponent_GetPriority(ICifComponent* This) {
    return This->lpVtbl->GetPriority(This);
}
static FORCEINLINE HRESULT ICifComponent_GetDependency(ICifComponent* This,UINT index,char *id,DWORD buf,char *type,DWORD *ver,DWORD *build) {
    return This->lpVtbl->GetDependency(This,index,id,buf,type,ver,build);
}
static FORCEINLINE DWORD ICifComponent_GetPlatform(ICifComponent* This) {
    return This->lpVtbl->GetPlatform(This);
}
static FORCEINLINE HRESULT ICifComponent_GetMode(ICifComponent* This,UINT index,char *mode,DWORD size) {
    return This->lpVtbl->GetMode(This,index,mode,size);
}
static FORCEINLINE HRESULT ICifComponent_GetGroup(ICifComponent* This,char *id,DWORD size) {
    return This->lpVtbl->GetGroup(This,id,size);
}
static FORCEINLINE HRESULT ICifComponent_IsUIVisible(ICifComponent* This) {
    return This->lpVtbl->IsUIVisible(This);
}
static FORCEINLINE HRESULT ICifComponent_GetPatchID(ICifComponent* This,char *id,DWORD size) {
    return This->lpVtbl->GetPatchID(This,id,size);
}
static FORCEINLINE HRESULT ICifComponent_GetDetVersion(ICifComponent* This,char *dll,DWORD dll_size,char *entry,DWORD entry_size) {
    return This->lpVtbl->GetDetVersion(This,dll,dll_size,entry,entry_size);
}
static FORCEINLINE HRESULT ICifComponent_GetTreatAsOneComponents(ICifComponent* This,UINT index,char *id,DWORD buf) {
    return This->lpVtbl->GetTreatAsOneComponents(This,index,id,buf);
}
static FORCEINLINE HRESULT ICifComponent_GetCustomData(ICifComponent* This,char *key,char *data,DWORD size) {
    return This->lpVtbl->GetCustomData(This,key,data,size);
}
static FORCEINLINE DWORD ICifComponent_IsComponentInstalled(ICifComponent* This) {
    return This->lpVtbl->IsComponentInstalled(This);
}
static FORCEINLINE HRESULT ICifComponent_IsComponentDownloaded(ICifComponent* This) {
    return This->lpVtbl->IsComponentDownloaded(This);
}
static FORCEINLINE DWORD ICifComponent_IsThisVersionInstalled(ICifComponent* This,DWORD version,DWORD build,DWORD *ret_version,DWORD *ret_build) {
    return This->lpVtbl->IsThisVersionInstalled(This,version,build,ret_version,ret_build);
}
static FORCEINLINE DWORD ICifComponent_GetInstallQueueState(ICifComponent* This) {
    return This->lpVtbl->GetInstallQueueState(This);
}
static FORCEINLINE HRESULT ICifComponent_SetInstallQueueState(ICifComponent* This,DWORD state) {
    return This->lpVtbl->SetInstallQueueState(This,state);
}
static FORCEINLINE DWORD ICifComponent_GetActualDownloadSize(ICifComponent* This) {
    return This->lpVtbl->GetActualDownloadSize(This);
}
static FORCEINLINE DWORD ICifComponent_GetCurrentPriority(ICifComponent* This) {
    return This->lpVtbl->GetCurrentPriority(This);
}
static FORCEINLINE HRESULT ICifComponent_SetCurrentPriority(ICifComponent* This,DWORD priority) {
    return This->lpVtbl->SetCurrentPriority(This,priority);
}
#endif
#endif

#endif


#endif  /* __ICifComponent_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICifRWComponent interface
 */
#ifndef __ICifRWComponent_INTERFACE_DEFINED__
#define __ICifRWComponent_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifRWComponent : public ICifComponent
{
    virtual HRESULT STDMETHODCALLTYPE SetGUID(
        const char *guid) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDescription(
        const char *desc) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUrl(
        UINT index,
        const char *url,
        DWORD url_flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCommand(
        UINT index,
        const char *cmd,
        const char *switches,
        DWORD type) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVersion(
        const char *version) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUninstallKey(
        const char *key) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInstalledSize(
        DWORD win,
        DWORD app) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDownloadSize(
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetExtractSize(
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteDependency(
        const char *id,
        char type) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddDependency(
        const char *id,
        char type) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUIVisible(
        BOOL visible) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGroup(
        const char *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPlatform(
        DWORD platform) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPriority(
        DWORD priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetReboot(
        BOOL reboot) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteFromModes(
        const char *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddToMode(
        const char *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetModes(
        const char *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyComponent(
        const char *ciffile) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddToTreatAsOne(
        const char *compid) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDetails(
        const char *desc) = 0;

};
#else
typedef struct ICifRWComponentVtbl {
    BEGIN_INTERFACE

    /*** ICifComponent methods ***/
    HRESULT (STDMETHODCALLTYPE *GetID)(
        ICifRWComponent *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        ICifRWComponent *This,
        char *guid,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifRWComponent *This,
        char *desc,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetails)(
        ICifRWComponent *This,
        char *details,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetUrl)(
        ICifRWComponent *This,
        UINT index,
        char *url,
        DWORD size,
        DWORD *flags);

    HRESULT (STDMETHODCALLTYPE *GetFileExtractList)(
        ICifRWComponent *This,
        UINT index,
        char *extract,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetUrlCheckRange)(
        ICifRWComponent *This,
        UINT index,
        DWORD *min,
        DWORD *max);

    HRESULT (STDMETHODCALLTYPE *GetCommand)(
        ICifRWComponent *This,
        UINT index,
        char *cmd,
        DWORD cmd_size,
        char *switches,
        DWORD switch_size,
        DWORD *type);

    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        ICifRWComponent *This,
        DWORD *version,
        DWORD *build);

    HRESULT (STDMETHODCALLTYPE *GetLocale)(
        ICifRWComponent *This,
        char *pszLocale,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetUninstallKey)(
        ICifRWComponent *This,
        char *key,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetInstalledSize)(
        ICifRWComponent *This,
        DWORD *win,
        DWORD *app);

    DWORD (STDMETHODCALLTYPE *GetDownloadSize)(
        ICifRWComponent *This);

    DWORD (STDMETHODCALLTYPE *GetExtractSize)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetSuccessKey)(
        ICifRWComponent *This,
        char *key,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetProgressKeys)(
        ICifRWComponent *This,
        char *progress,
        DWORD progress_size,
        char *cancel,
        DWORD cancel_size);

    HRESULT (STDMETHODCALLTYPE *IsActiveSetupAware)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *IsRebootRequired)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *RequiresAdminRights)(
        ICifRWComponent *This);

    DWORD (STDMETHODCALLTYPE *GetPriority)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetDependency)(
        ICifRWComponent *This,
        UINT index,
        char *id,
        DWORD buf,
        char *type,
        DWORD *ver,
        DWORD *build);

    DWORD (STDMETHODCALLTYPE *GetPlatform)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetMode)(
        ICifRWComponent *This,
        UINT index,
        char *mode,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetGroup)(
        ICifRWComponent *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *IsUIVisible)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *GetPatchID)(
        ICifRWComponent *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetVersion)(
        ICifRWComponent *This,
        char *dll,
        DWORD dll_size,
        char *entry,
        DWORD entry_size);

    HRESULT (STDMETHODCALLTYPE *GetTreatAsOneComponents)(
        ICifRWComponent *This,
        UINT index,
        char *id,
        DWORD buf);

    HRESULT (STDMETHODCALLTYPE *GetCustomData)(
        ICifRWComponent *This,
        char *key,
        char *data,
        DWORD size);

    DWORD (STDMETHODCALLTYPE *IsComponentInstalled)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *IsComponentDownloaded)(
        ICifRWComponent *This);

    DWORD (STDMETHODCALLTYPE *IsThisVersionInstalled)(
        ICifRWComponent *This,
        DWORD version,
        DWORD build,
        DWORD *ret_version,
        DWORD *ret_build);

    DWORD (STDMETHODCALLTYPE *GetInstallQueueState)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *SetInstallQueueState)(
        ICifRWComponent *This,
        DWORD state);

    DWORD (STDMETHODCALLTYPE *GetActualDownloadSize)(
        ICifRWComponent *This);

    DWORD (STDMETHODCALLTYPE *GetCurrentPriority)(
        ICifRWComponent *This);

    HRESULT (STDMETHODCALLTYPE *SetCurrentPriority)(
        ICifRWComponent *This,
        DWORD priority);

    /*** ICifRWComponent methods ***/
    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        ICifRWComponent *This,
        const char *guid);

    HRESULT (STDMETHODCALLTYPE *SetDescription)(
        ICifRWComponent *This,
        const char *desc);

    HRESULT (STDMETHODCALLTYPE *SetUrl)(
        ICifRWComponent *This,
        UINT index,
        const char *url,
        DWORD url_flags);

    HRESULT (STDMETHODCALLTYPE *SetCommand)(
        ICifRWComponent *This,
        UINT index,
        const char *cmd,
        const char *switches,
        DWORD type);

    HRESULT (STDMETHODCALLTYPE *SetVersion)(
        ICifRWComponent *This,
        const char *version);

    HRESULT (STDMETHODCALLTYPE *SetUninstallKey)(
        ICifRWComponent *This,
        const char *key);

    HRESULT (STDMETHODCALLTYPE *SetInstalledSize)(
        ICifRWComponent *This,
        DWORD win,
        DWORD app);

    HRESULT (STDMETHODCALLTYPE *SetDownloadSize)(
        ICifRWComponent *This,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *SetExtractSize)(
        ICifRWComponent *This,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *DeleteDependency)(
        ICifRWComponent *This,
        const char *id,
        char type);

    HRESULT (STDMETHODCALLTYPE *AddDependency)(
        ICifRWComponent *This,
        const char *id,
        char type);

    HRESULT (STDMETHODCALLTYPE *SetUIVisible)(
        ICifRWComponent *This,
        BOOL visible);

    HRESULT (STDMETHODCALLTYPE *SetGroup)(
        ICifRWComponent *This,
        const char *id);

    HRESULT (STDMETHODCALLTYPE *SetPlatform)(
        ICifRWComponent *This,
        DWORD platform);

    HRESULT (STDMETHODCALLTYPE *SetPriority)(
        ICifRWComponent *This,
        DWORD priority);

    HRESULT (STDMETHODCALLTYPE *SetReboot)(
        ICifRWComponent *This,
        BOOL reboot);

    HRESULT (STDMETHODCALLTYPE *DeleteFromModes)(
        ICifRWComponent *This,
        const char *mode);

    HRESULT (STDMETHODCALLTYPE *AddToMode)(
        ICifRWComponent *This,
        const char *mode);

    HRESULT (STDMETHODCALLTYPE *SetModes)(
        ICifRWComponent *This,
        const char *mode);

    HRESULT (STDMETHODCALLTYPE *CopyComponent)(
        ICifRWComponent *This,
        const char *ciffile);

    HRESULT (STDMETHODCALLTYPE *AddToTreatAsOne)(
        ICifRWComponent *This,
        const char *compid);

    HRESULT (STDMETHODCALLTYPE *SetDetails)(
        ICifRWComponent *This,
        const char *desc);

    END_INTERFACE
} ICifRWComponentVtbl;

interface ICifRWComponent {
    CONST_VTBL ICifRWComponentVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** ICifComponent methods ***/
#define ICifRWComponent_GetID(This,id,size) (This)->lpVtbl->GetID(This,id,size)
#define ICifRWComponent_GetGUID(This,guid,size) (This)->lpVtbl->GetGUID(This,guid,size)
#define ICifRWComponent_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifRWComponent_GetDetails(This,details,size) (This)->lpVtbl->GetDetails(This,details,size)
#define ICifRWComponent_GetUrl(This,index,url,size,flags) (This)->lpVtbl->GetUrl(This,index,url,size,flags)
#define ICifRWComponent_GetFileExtractList(This,index,extract,size) (This)->lpVtbl->GetFileExtractList(This,index,extract,size)
#define ICifRWComponent_GetUrlCheckRange(This,index,min,max) (This)->lpVtbl->GetUrlCheckRange(This,index,min,max)
#define ICifRWComponent_GetCommand(This,index,cmd,cmd_size,switches,switch_size,type) (This)->lpVtbl->GetCommand(This,index,cmd,cmd_size,switches,switch_size,type)
#define ICifRWComponent_GetVersion(This,version,build) (This)->lpVtbl->GetVersion(This,version,build)
#define ICifRWComponent_GetLocale(This,pszLocale,size) (This)->lpVtbl->GetLocale(This,pszLocale,size)
#define ICifRWComponent_GetUninstallKey(This,key,size) (This)->lpVtbl->GetUninstallKey(This,key,size)
#define ICifRWComponent_GetInstalledSize(This,win,app) (This)->lpVtbl->GetInstalledSize(This,win,app)
#define ICifRWComponent_GetDownloadSize(This) (This)->lpVtbl->GetDownloadSize(This)
#define ICifRWComponent_GetExtractSize(This) (This)->lpVtbl->GetExtractSize(This)
#define ICifRWComponent_GetSuccessKey(This,key,size) (This)->lpVtbl->GetSuccessKey(This,key,size)
#define ICifRWComponent_GetProgressKeys(This,progress,progress_size,cancel,cancel_size) (This)->lpVtbl->GetProgressKeys(This,progress,progress_size,cancel,cancel_size)
#define ICifRWComponent_IsActiveSetupAware(This) (This)->lpVtbl->IsActiveSetupAware(This)
#define ICifRWComponent_IsRebootRequired(This) (This)->lpVtbl->IsRebootRequired(This)
#define ICifRWComponent_RequiresAdminRights(This) (This)->lpVtbl->RequiresAdminRights(This)
#define ICifRWComponent_GetPriority(This) (This)->lpVtbl->GetPriority(This)
#define ICifRWComponent_GetDependency(This,index,id,buf,type,ver,build) (This)->lpVtbl->GetDependency(This,index,id,buf,type,ver,build)
#define ICifRWComponent_GetPlatform(This) (This)->lpVtbl->GetPlatform(This)
#define ICifRWComponent_GetMode(This,index,mode,size) (This)->lpVtbl->GetMode(This,index,mode,size)
#define ICifRWComponent_GetGroup(This,id,size) (This)->lpVtbl->GetGroup(This,id,size)
#define ICifRWComponent_IsUIVisible(This) (This)->lpVtbl->IsUIVisible(This)
#define ICifRWComponent_GetPatchID(This,id,size) (This)->lpVtbl->GetPatchID(This,id,size)
#define ICifRWComponent_GetDetVersion(This,dll,dll_size,entry,entry_size) (This)->lpVtbl->GetDetVersion(This,dll,dll_size,entry,entry_size)
#define ICifRWComponent_GetTreatAsOneComponents(This,index,id,buf) (This)->lpVtbl->GetTreatAsOneComponents(This,index,id,buf)
#define ICifRWComponent_GetCustomData(This,key,data,size) (This)->lpVtbl->GetCustomData(This,key,data,size)
#define ICifRWComponent_IsComponentInstalled(This) (This)->lpVtbl->IsComponentInstalled(This)
#define ICifRWComponent_IsComponentDownloaded(This) (This)->lpVtbl->IsComponentDownloaded(This)
#define ICifRWComponent_IsThisVersionInstalled(This,version,build,ret_version,ret_build) (This)->lpVtbl->IsThisVersionInstalled(This,version,build,ret_version,ret_build)
#define ICifRWComponent_GetInstallQueueState(This) (This)->lpVtbl->GetInstallQueueState(This)
#define ICifRWComponent_SetInstallQueueState(This,state) (This)->lpVtbl->SetInstallQueueState(This,state)
#define ICifRWComponent_GetActualDownloadSize(This) (This)->lpVtbl->GetActualDownloadSize(This)
#define ICifRWComponent_GetCurrentPriority(This) (This)->lpVtbl->GetCurrentPriority(This)
#define ICifRWComponent_SetCurrentPriority(This,priority) (This)->lpVtbl->SetCurrentPriority(This,priority)
/*** ICifRWComponent methods ***/
#define ICifRWComponent_SetGUID(This,guid) (This)->lpVtbl->SetGUID(This,guid)
#define ICifRWComponent_SetDescription(This,desc) (This)->lpVtbl->SetDescription(This,desc)
#define ICifRWComponent_SetUrl(This,index,url,url_flags) (This)->lpVtbl->SetUrl(This,index,url,url_flags)
#define ICifRWComponent_SetCommand(This,index,cmd,switches,type) (This)->lpVtbl->SetCommand(This,index,cmd,switches,type)
#define ICifRWComponent_SetVersion(This,version) (This)->lpVtbl->SetVersion(This,version)
#define ICifRWComponent_SetUninstallKey(This,key) (This)->lpVtbl->SetUninstallKey(This,key)
#define ICifRWComponent_SetInstalledSize(This,win,app) (This)->lpVtbl->SetInstalledSize(This,win,app)
#define ICifRWComponent_SetDownloadSize(This,size) (This)->lpVtbl->SetDownloadSize(This,size)
#define ICifRWComponent_SetExtractSize(This,size) (This)->lpVtbl->SetExtractSize(This,size)
#define ICifRWComponent_DeleteDependency(This,id,type) (This)->lpVtbl->DeleteDependency(This,id,type)
#define ICifRWComponent_AddDependency(This,id,type) (This)->lpVtbl->AddDependency(This,id,type)
#define ICifRWComponent_SetUIVisible(This,visible) (This)->lpVtbl->SetUIVisible(This,visible)
#define ICifRWComponent_SetGroup(This,id) (This)->lpVtbl->SetGroup(This,id)
#define ICifRWComponent_SetPlatform(This,platform) (This)->lpVtbl->SetPlatform(This,platform)
#define ICifRWComponent_SetPriority(This,priority) (This)->lpVtbl->SetPriority(This,priority)
#define ICifRWComponent_SetReboot(This,reboot) (This)->lpVtbl->SetReboot(This,reboot)
#define ICifRWComponent_DeleteFromModes(This,mode) (This)->lpVtbl->DeleteFromModes(This,mode)
#define ICifRWComponent_AddToMode(This,mode) (This)->lpVtbl->AddToMode(This,mode)
#define ICifRWComponent_SetModes(This,mode) (This)->lpVtbl->SetModes(This,mode)
#define ICifRWComponent_CopyComponent(This,ciffile) (This)->lpVtbl->CopyComponent(This,ciffile)
#define ICifRWComponent_AddToTreatAsOne(This,compid) (This)->lpVtbl->AddToTreatAsOne(This,compid)
#define ICifRWComponent_SetDetails(This,desc) (This)->lpVtbl->SetDetails(This,desc)
#else
/*** ICifComponent methods ***/
static FORCEINLINE HRESULT ICifRWComponent_GetID(ICifRWComponent* This,char *id,DWORD size) {
    return This->lpVtbl->GetID(This,id,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetGUID(ICifRWComponent* This,char *guid,DWORD size) {
    return This->lpVtbl->GetGUID(This,guid,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetDescription(ICifRWComponent* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetDetails(ICifRWComponent* This,char *details,DWORD size) {
    return This->lpVtbl->GetDetails(This,details,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetUrl(ICifRWComponent* This,UINT index,char *url,DWORD size,DWORD *flags) {
    return This->lpVtbl->GetUrl(This,index,url,size,flags);
}
static FORCEINLINE HRESULT ICifRWComponent_GetFileExtractList(ICifRWComponent* This,UINT index,char *extract,DWORD size) {
    return This->lpVtbl->GetFileExtractList(This,index,extract,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetUrlCheckRange(ICifRWComponent* This,UINT index,DWORD *min,DWORD *max) {
    return This->lpVtbl->GetUrlCheckRange(This,index,min,max);
}
static FORCEINLINE HRESULT ICifRWComponent_GetCommand(ICifRWComponent* This,UINT index,char *cmd,DWORD cmd_size,char *switches,DWORD switch_size,DWORD *type) {
    return This->lpVtbl->GetCommand(This,index,cmd,cmd_size,switches,switch_size,type);
}
static FORCEINLINE HRESULT ICifRWComponent_GetVersion(ICifRWComponent* This,DWORD *version,DWORD *build) {
    return This->lpVtbl->GetVersion(This,version,build);
}
static FORCEINLINE HRESULT ICifRWComponent_GetLocale(ICifRWComponent* This,char *pszLocale,DWORD size) {
    return This->lpVtbl->GetLocale(This,pszLocale,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetUninstallKey(ICifRWComponent* This,char *key,DWORD size) {
    return This->lpVtbl->GetUninstallKey(This,key,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetInstalledSize(ICifRWComponent* This,DWORD *win,DWORD *app) {
    return This->lpVtbl->GetInstalledSize(This,win,app);
}
static FORCEINLINE DWORD ICifRWComponent_GetDownloadSize(ICifRWComponent* This) {
    return This->lpVtbl->GetDownloadSize(This);
}
static FORCEINLINE DWORD ICifRWComponent_GetExtractSize(ICifRWComponent* This) {
    return This->lpVtbl->GetExtractSize(This);
}
static FORCEINLINE HRESULT ICifRWComponent_GetSuccessKey(ICifRWComponent* This,char *key,DWORD size) {
    return This->lpVtbl->GetSuccessKey(This,key,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetProgressKeys(ICifRWComponent* This,char *progress,DWORD progress_size,char *cancel,DWORD cancel_size) {
    return This->lpVtbl->GetProgressKeys(This,progress,progress_size,cancel,cancel_size);
}
static FORCEINLINE HRESULT ICifRWComponent_IsActiveSetupAware(ICifRWComponent* This) {
    return This->lpVtbl->IsActiveSetupAware(This);
}
static FORCEINLINE HRESULT ICifRWComponent_IsRebootRequired(ICifRWComponent* This) {
    return This->lpVtbl->IsRebootRequired(This);
}
static FORCEINLINE HRESULT ICifRWComponent_RequiresAdminRights(ICifRWComponent* This) {
    return This->lpVtbl->RequiresAdminRights(This);
}
static FORCEINLINE DWORD ICifRWComponent_GetPriority(ICifRWComponent* This) {
    return This->lpVtbl->GetPriority(This);
}
static FORCEINLINE HRESULT ICifRWComponent_GetDependency(ICifRWComponent* This,UINT index,char *id,DWORD buf,char *type,DWORD *ver,DWORD *build) {
    return This->lpVtbl->GetDependency(This,index,id,buf,type,ver,build);
}
static FORCEINLINE DWORD ICifRWComponent_GetPlatform(ICifRWComponent* This) {
    return This->lpVtbl->GetPlatform(This);
}
static FORCEINLINE HRESULT ICifRWComponent_GetMode(ICifRWComponent* This,UINT index,char *mode,DWORD size) {
    return This->lpVtbl->GetMode(This,index,mode,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetGroup(ICifRWComponent* This,char *id,DWORD size) {
    return This->lpVtbl->GetGroup(This,id,size);
}
static FORCEINLINE HRESULT ICifRWComponent_IsUIVisible(ICifRWComponent* This) {
    return This->lpVtbl->IsUIVisible(This);
}
static FORCEINLINE HRESULT ICifRWComponent_GetPatchID(ICifRWComponent* This,char *id,DWORD size) {
    return This->lpVtbl->GetPatchID(This,id,size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetDetVersion(ICifRWComponent* This,char *dll,DWORD dll_size,char *entry,DWORD entry_size) {
    return This->lpVtbl->GetDetVersion(This,dll,dll_size,entry,entry_size);
}
static FORCEINLINE HRESULT ICifRWComponent_GetTreatAsOneComponents(ICifRWComponent* This,UINT index,char *id,DWORD buf) {
    return This->lpVtbl->GetTreatAsOneComponents(This,index,id,buf);
}
static FORCEINLINE HRESULT ICifRWComponent_GetCustomData(ICifRWComponent* This,char *key,char *data,DWORD size) {
    return This->lpVtbl->GetCustomData(This,key,data,size);
}
static FORCEINLINE DWORD ICifRWComponent_IsComponentInstalled(ICifRWComponent* This) {
    return This->lpVtbl->IsComponentInstalled(This);
}
static FORCEINLINE HRESULT ICifRWComponent_IsComponentDownloaded(ICifRWComponent* This) {
    return This->lpVtbl->IsComponentDownloaded(This);
}
static FORCEINLINE DWORD ICifRWComponent_IsThisVersionInstalled(ICifRWComponent* This,DWORD version,DWORD build,DWORD *ret_version,DWORD *ret_build) {
    return This->lpVtbl->IsThisVersionInstalled(This,version,build,ret_version,ret_build);
}
static FORCEINLINE DWORD ICifRWComponent_GetInstallQueueState(ICifRWComponent* This) {
    return This->lpVtbl->GetInstallQueueState(This);
}
static FORCEINLINE HRESULT ICifRWComponent_SetInstallQueueState(ICifRWComponent* This,DWORD state) {
    return This->lpVtbl->SetInstallQueueState(This,state);
}
static FORCEINLINE DWORD ICifRWComponent_GetActualDownloadSize(ICifRWComponent* This) {
    return This->lpVtbl->GetActualDownloadSize(This);
}
static FORCEINLINE DWORD ICifRWComponent_GetCurrentPriority(ICifRWComponent* This) {
    return This->lpVtbl->GetCurrentPriority(This);
}
static FORCEINLINE HRESULT ICifRWComponent_SetCurrentPriority(ICifRWComponent* This,DWORD priority) {
    return This->lpVtbl->SetCurrentPriority(This,priority);
}
/*** ICifRWComponent methods ***/
static FORCEINLINE HRESULT ICifRWComponent_SetGUID(ICifRWComponent* This,const char *guid) {
    return This->lpVtbl->SetGUID(This,guid);
}
static FORCEINLINE HRESULT ICifRWComponent_SetDescription(ICifRWComponent* This,const char *desc) {
    return This->lpVtbl->SetDescription(This,desc);
}
static FORCEINLINE HRESULT ICifRWComponent_SetUrl(ICifRWComponent* This,UINT index,const char *url,DWORD url_flags) {
    return This->lpVtbl->SetUrl(This,index,url,url_flags);
}
static FORCEINLINE HRESULT ICifRWComponent_SetCommand(ICifRWComponent* This,UINT index,const char *cmd,const char *switches,DWORD type) {
    return This->lpVtbl->SetCommand(This,index,cmd,switches,type);
}
static FORCEINLINE HRESULT ICifRWComponent_SetVersion(ICifRWComponent* This,const char *version) {
    return This->lpVtbl->SetVersion(This,version);
}
static FORCEINLINE HRESULT ICifRWComponent_SetUninstallKey(ICifRWComponent* This,const char *key) {
    return This->lpVtbl->SetUninstallKey(This,key);
}
static FORCEINLINE HRESULT ICifRWComponent_SetInstalledSize(ICifRWComponent* This,DWORD win,DWORD app) {
    return This->lpVtbl->SetInstalledSize(This,win,app);
}
static FORCEINLINE HRESULT ICifRWComponent_SetDownloadSize(ICifRWComponent* This,DWORD size) {
    return This->lpVtbl->SetDownloadSize(This,size);
}
static FORCEINLINE HRESULT ICifRWComponent_SetExtractSize(ICifRWComponent* This,DWORD size) {
    return This->lpVtbl->SetExtractSize(This,size);
}
static FORCEINLINE HRESULT ICifRWComponent_DeleteDependency(ICifRWComponent* This,const char *id,char type) {
    return This->lpVtbl->DeleteDependency(This,id,type);
}
static FORCEINLINE HRESULT ICifRWComponent_AddDependency(ICifRWComponent* This,const char *id,char type) {
    return This->lpVtbl->AddDependency(This,id,type);
}
static FORCEINLINE HRESULT ICifRWComponent_SetUIVisible(ICifRWComponent* This,BOOL visible) {
    return This->lpVtbl->SetUIVisible(This,visible);
}
static FORCEINLINE HRESULT ICifRWComponent_SetGroup(ICifRWComponent* This,const char *id) {
    return This->lpVtbl->SetGroup(This,id);
}
static FORCEINLINE HRESULT ICifRWComponent_SetPlatform(ICifRWComponent* This,DWORD platform) {
    return This->lpVtbl->SetPlatform(This,platform);
}
static FORCEINLINE HRESULT ICifRWComponent_SetPriority(ICifRWComponent* This,DWORD priority) {
    return This->lpVtbl->SetPriority(This,priority);
}
static FORCEINLINE HRESULT ICifRWComponent_SetReboot(ICifRWComponent* This,BOOL reboot) {
    return This->lpVtbl->SetReboot(This,reboot);
}
static FORCEINLINE HRESULT ICifRWComponent_DeleteFromModes(ICifRWComponent* This,const char *mode) {
    return This->lpVtbl->DeleteFromModes(This,mode);
}
static FORCEINLINE HRESULT ICifRWComponent_AddToMode(ICifRWComponent* This,const char *mode) {
    return This->lpVtbl->AddToMode(This,mode);
}
static FORCEINLINE HRESULT ICifRWComponent_SetModes(ICifRWComponent* This,const char *mode) {
    return This->lpVtbl->SetModes(This,mode);
}
static FORCEINLINE HRESULT ICifRWComponent_CopyComponent(ICifRWComponent* This,const char *ciffile) {
    return This->lpVtbl->CopyComponent(This,ciffile);
}
static FORCEINLINE HRESULT ICifRWComponent_AddToTreatAsOne(ICifRWComponent* This,const char *compid) {
    return This->lpVtbl->AddToTreatAsOne(This,compid);
}
static FORCEINLINE HRESULT ICifRWComponent_SetDetails(ICifRWComponent* This,const char *desc) {
    return This->lpVtbl->SetDetails(This,desc);
}
#endif
#endif

#endif


#endif  /* __ICifRWComponent_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEnumCifComponents interface
 */
#ifndef __IEnumCifComponents_INTERFACE_DEFINED__
#define __IEnumCifComponents_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface IEnumCifComponents : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ICifComponent **a) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

};
#else
typedef struct IEnumCifComponentsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumCifComponents *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumCifComponents *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumCifComponents *This);

    /*** IEnumCifComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumCifComponents *This,
        ICifComponent **a);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumCifComponents *This);

    END_INTERFACE
} IEnumCifComponentsVtbl;

interface IEnumCifComponents {
    CONST_VTBL IEnumCifComponentsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumCifComponents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumCifComponents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumCifComponents_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumCifComponents methods ***/
#define IEnumCifComponents_Next(This,a) (This)->lpVtbl->Next(This,a)
#define IEnumCifComponents_Reset(This) (This)->lpVtbl->Reset(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumCifComponents_QueryInterface(IEnumCifComponents* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumCifComponents_AddRef(IEnumCifComponents* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumCifComponents_Release(IEnumCifComponents* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumCifComponents methods ***/
static FORCEINLINE HRESULT IEnumCifComponents_Next(IEnumCifComponents* This,ICifComponent **a) {
    return This->lpVtbl->Next(This,a);
}
static FORCEINLINE HRESULT IEnumCifComponents_Reset(IEnumCifComponents* This) {
    return This->lpVtbl->Reset(This);
}
#endif
#endif

#endif


#endif  /* __IEnumCifComponents_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICifGroup interface
 */
#ifndef __ICifGroup_INTERFACE_DEFINED__
#define __ICifGroup_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifGroup
{

    BEGIN_INTERFACE

    virtual HRESULT STDMETHODCALLTYPE GetID(
        char *id,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDescription(
        char *desc,
        DWORD size) = 0;

    virtual DWORD STDMETHODCALLTYPE GetPriority(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumComponents(
        IEnumCifComponents **a,
        DWORD filter,
        void *pv) = 0;

    virtual DWORD STDMETHODCALLTYPE GetCurrentPriority(
        ) = 0;

    END_INTERFACE

};
#else
typedef struct ICifGroupVtbl {
    BEGIN_INTERFACE

    /*** ICifGroup methods ***/
    HRESULT (STDMETHODCALLTYPE *GetID)(
        ICifGroup *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifGroup *This,
        char *desc,
        DWORD size);

    DWORD (STDMETHODCALLTYPE *GetPriority)(
        ICifGroup *This);

    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
        ICifGroup *This,
        IEnumCifComponents **a,
        DWORD filter,
        void *pv);

    DWORD (STDMETHODCALLTYPE *GetCurrentPriority)(
        ICifGroup *This);

    END_INTERFACE
} ICifGroupVtbl;

interface ICifGroup {
    CONST_VTBL ICifGroupVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** ICifGroup methods ***/
#define ICifGroup_GetID(This,id,size) (This)->lpVtbl->GetID(This,id,size)
#define ICifGroup_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifGroup_GetPriority(This) (This)->lpVtbl->GetPriority(This)
#define ICifGroup_EnumComponents(This,a,filter,pv) (This)->lpVtbl->EnumComponents(This,a,filter,pv)
#define ICifGroup_GetCurrentPriority(This) (This)->lpVtbl->GetCurrentPriority(This)
#else
/*** ICifGroup methods ***/
static FORCEINLINE HRESULT ICifGroup_GetID(ICifGroup* This,char *id,DWORD size) {
    return This->lpVtbl->GetID(This,id,size);
}
static FORCEINLINE HRESULT ICifGroup_GetDescription(ICifGroup* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE DWORD ICifGroup_GetPriority(ICifGroup* This) {
    return This->lpVtbl->GetPriority(This);
}
static FORCEINLINE HRESULT ICifGroup_EnumComponents(ICifGroup* This,IEnumCifComponents **a,DWORD filter,void *pv) {
    return This->lpVtbl->EnumComponents(This,a,filter,pv);
}
static FORCEINLINE DWORD ICifGroup_GetCurrentPriority(ICifGroup* This) {
    return This->lpVtbl->GetCurrentPriority(This);
}
#endif
#endif

#endif


#endif  /* __ICifGroup_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICifRWGroup interface
 */
#ifndef __ICifRWGroup_INTERFACE_DEFINED__
#define __ICifRWGroup_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifRWGroup : public ICifGroup
{
    virtual HRESULT STDMETHODCALLTYPE SetDescription(
        const char *desc) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPriority(
        DWORD priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDetails(
        const char *details) = 0;

};
#else
typedef struct ICifRWGroupVtbl {
    BEGIN_INTERFACE

    /*** ICifGroup methods ***/
    HRESULT (STDMETHODCALLTYPE *GetID)(
        ICifRWGroup *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifRWGroup *This,
        char *desc,
        DWORD size);

    DWORD (STDMETHODCALLTYPE *GetPriority)(
        ICifRWGroup *This);

    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
        ICifRWGroup *This,
        IEnumCifComponents **a,
        DWORD filter,
        void *pv);

    DWORD (STDMETHODCALLTYPE *GetCurrentPriority)(
        ICifRWGroup *This);

    /*** ICifRWGroup methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDescription)(
        ICifRWGroup *This,
        const char *desc);

    HRESULT (STDMETHODCALLTYPE *SetPriority)(
        ICifRWGroup *This,
        DWORD priority);

    HRESULT (STDMETHODCALLTYPE *SetDetails)(
        ICifRWGroup *This,
        const char *details);

    END_INTERFACE
} ICifRWGroupVtbl;

interface ICifRWGroup {
    CONST_VTBL ICifRWGroupVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** ICifGroup methods ***/
#define ICifRWGroup_GetID(This,id,size) (This)->lpVtbl->GetID(This,id,size)
#define ICifRWGroup_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifRWGroup_GetPriority(This) (This)->lpVtbl->GetPriority(This)
#define ICifRWGroup_EnumComponents(This,a,filter,pv) (This)->lpVtbl->EnumComponents(This,a,filter,pv)
#define ICifRWGroup_GetCurrentPriority(This) (This)->lpVtbl->GetCurrentPriority(This)
/*** ICifRWGroup methods ***/
#define ICifRWGroup_SetDescription(This,desc) (This)->lpVtbl->SetDescription(This,desc)
#define ICifRWGroup_SetPriority(This,priority) (This)->lpVtbl->SetPriority(This,priority)
#define ICifRWGroup_SetDetails(This,details) (This)->lpVtbl->SetDetails(This,details)
#else
/*** ICifGroup methods ***/
static FORCEINLINE HRESULT ICifRWGroup_GetID(ICifRWGroup* This,char *id,DWORD size) {
    return This->lpVtbl->GetID(This,id,size);
}
static FORCEINLINE HRESULT ICifRWGroup_GetDescription(ICifRWGroup* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE DWORD ICifRWGroup_GetPriority(ICifRWGroup* This) {
    return This->lpVtbl->GetPriority(This);
}
static FORCEINLINE HRESULT ICifRWGroup_EnumComponents(ICifRWGroup* This,IEnumCifComponents **a,DWORD filter,void *pv) {
    return This->lpVtbl->EnumComponents(This,a,filter,pv);
}
static FORCEINLINE DWORD ICifRWGroup_GetCurrentPriority(ICifRWGroup* This) {
    return This->lpVtbl->GetCurrentPriority(This);
}
/*** ICifRWGroup methods ***/
static FORCEINLINE HRESULT ICifRWGroup_SetDescription(ICifRWGroup* This,const char *desc) {
    return This->lpVtbl->SetDescription(This,desc);
}
static FORCEINLINE HRESULT ICifRWGroup_SetPriority(ICifRWGroup* This,DWORD priority) {
    return This->lpVtbl->SetPriority(This,priority);
}
static FORCEINLINE HRESULT ICifRWGroup_SetDetails(ICifRWGroup* This,const char *details) {
    return This->lpVtbl->SetDetails(This,details);
}
#endif
#endif

#endif


#endif  /* __ICifRWGroup_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEnumCifGroups interface
 */
#ifndef __IEnumCifGroups_INTERFACE_DEFINED__
#define __IEnumCifGroups_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface IEnumCifGroups : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ICifGroup **a) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

};
#else
typedef struct IEnumCifGroupsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumCifGroups *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumCifGroups *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumCifGroups *This);

    /*** IEnumCifGroups methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumCifGroups *This,
        ICifGroup **a);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumCifGroups *This);

    END_INTERFACE
} IEnumCifGroupsVtbl;

interface IEnumCifGroups {
    CONST_VTBL IEnumCifGroupsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumCifGroups_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumCifGroups_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumCifGroups_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumCifGroups methods ***/
#define IEnumCifGroups_Next(This,a) (This)->lpVtbl->Next(This,a)
#define IEnumCifGroups_Reset(This) (This)->lpVtbl->Reset(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumCifGroups_QueryInterface(IEnumCifGroups* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumCifGroups_AddRef(IEnumCifGroups* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumCifGroups_Release(IEnumCifGroups* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumCifGroups methods ***/
static FORCEINLINE HRESULT IEnumCifGroups_Next(IEnumCifGroups* This,ICifGroup **a) {
    return This->lpVtbl->Next(This,a);
}
static FORCEINLINE HRESULT IEnumCifGroups_Reset(IEnumCifGroups* This) {
    return This->lpVtbl->Reset(This);
}
#endif
#endif

#endif


#endif  /* __IEnumCifGroups_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICifMode interface
 */
#ifndef __ICifMode_INTERFACE_DEFINED__
#define __ICifMode_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifMode
{

    BEGIN_INTERFACE

    virtual HRESULT STDMETHODCALLTYPE GetID(
        char *id,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDescription(
        char *desc,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDetails(
        char *details,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumComponents(
        IEnumCifComponents **a,
        DWORD filter,
        void *pv) = 0;

    END_INTERFACE

};
#else
typedef struct ICifModeVtbl {
    BEGIN_INTERFACE

    /*** ICifMode methods ***/
    HRESULT (STDMETHODCALLTYPE *GetID)(
        ICifMode *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifMode *This,
        char *desc,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetails)(
        ICifMode *This,
        char *details,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
        ICifMode *This,
        IEnumCifComponents **a,
        DWORD filter,
        void *pv);

    END_INTERFACE
} ICifModeVtbl;

interface ICifMode {
    CONST_VTBL ICifModeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** ICifMode methods ***/
#define ICifMode_GetID(This,id,size) (This)->lpVtbl->GetID(This,id,size)
#define ICifMode_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifMode_GetDetails(This,details,size) (This)->lpVtbl->GetDetails(This,details,size)
#define ICifMode_EnumComponents(This,a,filter,pv) (This)->lpVtbl->EnumComponents(This,a,filter,pv)
#else
/*** ICifMode methods ***/
static FORCEINLINE HRESULT ICifMode_GetID(ICifMode* This,char *id,DWORD size) {
    return This->lpVtbl->GetID(This,id,size);
}
static FORCEINLINE HRESULT ICifMode_GetDescription(ICifMode* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE HRESULT ICifMode_GetDetails(ICifMode* This,char *details,DWORD size) {
    return This->lpVtbl->GetDetails(This,details,size);
}
static FORCEINLINE HRESULT ICifMode_EnumComponents(ICifMode* This,IEnumCifComponents **a,DWORD filter,void *pv) {
    return This->lpVtbl->EnumComponents(This,a,filter,pv);
}
#endif
#endif

#endif


#endif  /* __ICifMode_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICifRWMode interface
 */
#ifndef __ICifRWMode_INTERFACE_DEFINED__
#define __ICifRWMode_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifRWMode : public ICifMode
{
    virtual HRESULT STDMETHODCALLTYPE SetDescription(
        const char *desc) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDetails(
        const char *details) = 0;

};
#else
typedef struct ICifRWModeVtbl {
    BEGIN_INTERFACE

    /*** ICifMode methods ***/
    HRESULT (STDMETHODCALLTYPE *GetID)(
        ICifRWMode *This,
        char *id,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifRWMode *This,
        char *desc,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetails)(
        ICifRWMode *This,
        char *details,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
        ICifRWMode *This,
        IEnumCifComponents **a,
        DWORD filter,
        void *pv);

    /*** ICifRWMode methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDescription)(
        ICifRWMode *This,
        const char *desc);

    HRESULT (STDMETHODCALLTYPE *SetDetails)(
        ICifRWMode *This,
        const char *details);

    END_INTERFACE
} ICifRWModeVtbl;

interface ICifRWMode {
    CONST_VTBL ICifRWModeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** ICifMode methods ***/
#define ICifRWMode_GetID(This,id,size) (This)->lpVtbl->GetID(This,id,size)
#define ICifRWMode_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifRWMode_GetDetails(This,details,size) (This)->lpVtbl->GetDetails(This,details,size)
#define ICifRWMode_EnumComponents(This,a,filter,pv) (This)->lpVtbl->EnumComponents(This,a,filter,pv)
/*** ICifRWMode methods ***/
#define ICifRWMode_SetDescription(This,desc) (This)->lpVtbl->SetDescription(This,desc)
#define ICifRWMode_SetDetails(This,details) (This)->lpVtbl->SetDetails(This,details)
#else
/*** ICifMode methods ***/
static FORCEINLINE HRESULT ICifRWMode_GetID(ICifRWMode* This,char *id,DWORD size) {
    return This->lpVtbl->GetID(This,id,size);
}
static FORCEINLINE HRESULT ICifRWMode_GetDescription(ICifRWMode* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE HRESULT ICifRWMode_GetDetails(ICifRWMode* This,char *details,DWORD size) {
    return This->lpVtbl->GetDetails(This,details,size);
}
static FORCEINLINE HRESULT ICifRWMode_EnumComponents(ICifRWMode* This,IEnumCifComponents **a,DWORD filter,void *pv) {
    return This->lpVtbl->EnumComponents(This,a,filter,pv);
}
/*** ICifRWMode methods ***/
static FORCEINLINE HRESULT ICifRWMode_SetDescription(ICifRWMode* This,const char *desc) {
    return This->lpVtbl->SetDescription(This,desc);
}
static FORCEINLINE HRESULT ICifRWMode_SetDetails(ICifRWMode* This,const char *details) {
    return This->lpVtbl->SetDetails(This,details);
}
#endif
#endif

#endif


#endif  /* __ICifRWMode_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEnumCifModes interface
 */
#ifndef __IEnumCifModes_INTERFACE_DEFINED__
#define __IEnumCifModes_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface IEnumCifModes : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ICifMode **a) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

};
#else
typedef struct IEnumCifModesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumCifModes *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumCifModes *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumCifModes *This);

    /*** IEnumCifModes methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumCifModes *This,
        ICifMode **a);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumCifModes *This);

    END_INTERFACE
} IEnumCifModesVtbl;

interface IEnumCifModes {
    CONST_VTBL IEnumCifModesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumCifModes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumCifModes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumCifModes_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumCifModes methods ***/
#define IEnumCifModes_Next(This,a) (This)->lpVtbl->Next(This,a)
#define IEnumCifModes_Reset(This) (This)->lpVtbl->Reset(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumCifModes_QueryInterface(IEnumCifModes* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumCifModes_AddRef(IEnumCifModes* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumCifModes_Release(IEnumCifModes* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumCifModes methods ***/
static FORCEINLINE HRESULT IEnumCifModes_Next(IEnumCifModes* This,ICifMode **a) {
    return This->lpVtbl->Next(This,a);
}
static FORCEINLINE HRESULT IEnumCifModes_Reset(IEnumCifModes* This) {
    return This->lpVtbl->Reset(This);
}
#endif
#endif

#endif


#endif  /* __IEnumCifModes_INTERFACE_DEFINED__ */

typedef struct __WIDL_inseng_generated_name_00000002 {
    DWORD cbSize;
    DWORD dwInstallSize;
    DWORD dwWinDriveSize;
    DWORD dwDownloadSize;
    DWORD dwDependancySize;
    DWORD dwInstallDriveReq;
    DWORD dwWinDriveReq;
    DWORD dwDownloadDriveReq;
    char chWinDrive;
    char chInstallDrive;
    char chDownloadDrive;
    DWORD dwTotalDownloadSize;
} COMPONENT_SIZES;
typedef struct __WIDL_inseng_generated_name_00000003 {
    DWORD cbSize;
    DWORD dwDownloadKBRemaining;
    DWORD dwInstallKBRemaining;
    DWORD dwDownloadSecsRemaining;
    DWORD dwInstallSecsRemaining;
} INSTALLPROGRESS;
/*****************************************************************************
 * ICifFile interface
 */
#ifndef __ICifFile_INTERFACE_DEFINED__
#define __ICifFile_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICifFile, 0x6e449688, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6e449688-c509-11cf-aafa-00aa00b6015c")
ICifFile : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE EnumComponents(
        IEnumCifComponents **enum_components,
        DWORD filter,
        void *pv) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindComponent(
        const char *id,
        ICifComponent **p) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumGroups(
        IEnumCifGroups **enum_groups,
        DWORD filter,
        void *pv) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindGroup(
        const char *id,
        ICifGroup **p) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumModes(
        IEnumCifModes **cuf_modes,
        DWORD filter,
        void *pv) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindMode(
        const char *id,
        ICifMode **p) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDescription(
        char *desc,
        DWORD size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDetDlls(
        char *dlls,
        DWORD size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICifFile, 0x6e449688, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#else
typedef struct ICifFileVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICifFile *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICifFile *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICifFile *This);

    /*** ICifFile methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
        ICifFile *This,
        IEnumCifComponents **enum_components,
        DWORD filter,
        void *pv);

    HRESULT (STDMETHODCALLTYPE *FindComponent)(
        ICifFile *This,
        const char *id,
        ICifComponent **p);

    HRESULT (STDMETHODCALLTYPE *EnumGroups)(
        ICifFile *This,
        IEnumCifGroups **enum_groups,
        DWORD filter,
        void *pv);

    HRESULT (STDMETHODCALLTYPE *FindGroup)(
        ICifFile *This,
        const char *id,
        ICifGroup **p);

    HRESULT (STDMETHODCALLTYPE *EnumModes)(
        ICifFile *This,
        IEnumCifModes **cuf_modes,
        DWORD filter,
        void *pv);

    HRESULT (STDMETHODCALLTYPE *FindMode)(
        ICifFile *This,
        const char *id,
        ICifMode **p);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifFile *This,
        char *desc,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetDlls)(
        ICifFile *This,
        char *dlls,
        DWORD size);

    END_INTERFACE
} ICifFileVtbl;

interface ICifFile {
    CONST_VTBL ICifFileVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICifFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICifFile_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICifFile_Release(This) (This)->lpVtbl->Release(This)
/*** ICifFile methods ***/
#define ICifFile_EnumComponents(This,enum_components,filter,pv) (This)->lpVtbl->EnumComponents(This,enum_components,filter,pv)
#define ICifFile_FindComponent(This,id,p) (This)->lpVtbl->FindComponent(This,id,p)
#define ICifFile_EnumGroups(This,enum_groups,filter,pv) (This)->lpVtbl->EnumGroups(This,enum_groups,filter,pv)
#define ICifFile_FindGroup(This,id,p) (This)->lpVtbl->FindGroup(This,id,p)
#define ICifFile_EnumModes(This,cuf_modes,filter,pv) (This)->lpVtbl->EnumModes(This,cuf_modes,filter,pv)
#define ICifFile_FindMode(This,id,p) (This)->lpVtbl->FindMode(This,id,p)
#define ICifFile_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifFile_GetDetDlls(This,dlls,size) (This)->lpVtbl->GetDetDlls(This,dlls,size)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ICifFile_QueryInterface(ICifFile* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ICifFile_AddRef(ICifFile* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ICifFile_Release(ICifFile* This) {
    return This->lpVtbl->Release(This);
}
/*** ICifFile methods ***/
static FORCEINLINE HRESULT ICifFile_EnumComponents(ICifFile* This,IEnumCifComponents **enum_components,DWORD filter,void *pv) {
    return This->lpVtbl->EnumComponents(This,enum_components,filter,pv);
}
static FORCEINLINE HRESULT ICifFile_FindComponent(ICifFile* This,const char *id,ICifComponent **p) {
    return This->lpVtbl->FindComponent(This,id,p);
}
static FORCEINLINE HRESULT ICifFile_EnumGroups(ICifFile* This,IEnumCifGroups **enum_groups,DWORD filter,void *pv) {
    return This->lpVtbl->EnumGroups(This,enum_groups,filter,pv);
}
static FORCEINLINE HRESULT ICifFile_FindGroup(ICifFile* This,const char *id,ICifGroup **p) {
    return This->lpVtbl->FindGroup(This,id,p);
}
static FORCEINLINE HRESULT ICifFile_EnumModes(ICifFile* This,IEnumCifModes **cuf_modes,DWORD filter,void *pv) {
    return This->lpVtbl->EnumModes(This,cuf_modes,filter,pv);
}
static FORCEINLINE HRESULT ICifFile_FindMode(ICifFile* This,const char *id,ICifMode **p) {
    return This->lpVtbl->FindMode(This,id,p);
}
static FORCEINLINE HRESULT ICifFile_GetDescription(ICifFile* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE HRESULT ICifFile_GetDetDlls(ICifFile* This,char *dlls,DWORD size) {
    return This->lpVtbl->GetDetDlls(This,dlls,size);
}
#endif
#endif

#endif


#endif  /* __ICifFile_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICifRWFile interface
 */
#ifndef __ICifRWFile_INTERFACE_DEFINED__
#define __ICifRWFile_INTERFACE_DEFINED__

#if defined(__cplusplus) && !defined(CINTERFACE)
interface ICifRWFile : public ICifFile
{
    virtual HRESULT STDMETHODCALLTYPE SetDescription(
        const char *desc) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateComponent(
        const char *id,
        ICifRWComponent **p) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGroup(
        const char *id,
        ICifRWGroup **p) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateMode(
        const char *id,
        ICifRWMode **p) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteComponent(
        const char *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteGroup(
        const char *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteMode(
        const char *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

};
#else
typedef struct ICifRWFileVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICifRWFile *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICifRWFile *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICifRWFile *This);

    /*** ICifFile methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
        ICifRWFile *This,
        IEnumCifComponents **enum_components,
        DWORD filter,
        void *pv);

    HRESULT (STDMETHODCALLTYPE *FindComponent)(
        ICifRWFile *This,
        const char *id,
        ICifComponent **p);

    HRESULT (STDMETHODCALLTYPE *EnumGroups)(
        ICifRWFile *This,
        IEnumCifGroups **enum_groups,
        DWORD filter,
        void *pv);

    HRESULT (STDMETHODCALLTYPE *FindGroup)(
        ICifRWFile *This,
        const char *id,
        ICifGroup **p);

    HRESULT (STDMETHODCALLTYPE *EnumModes)(
        ICifRWFile *This,
        IEnumCifModes **cuf_modes,
        DWORD filter,
        void *pv);

    HRESULT (STDMETHODCALLTYPE *FindMode)(
        ICifRWFile *This,
        const char *id,
        ICifMode **p);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ICifRWFile *This,
        char *desc,
        DWORD size);

    HRESULT (STDMETHODCALLTYPE *GetDetDlls)(
        ICifRWFile *This,
        char *dlls,
        DWORD size);

    /*** ICifRWFile methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDescription)(
        ICifRWFile *This,
        const char *desc);

    HRESULT (STDMETHODCALLTYPE *CreateComponent)(
        ICifRWFile *This,
        const char *id,
        ICifRWComponent **p);

    HRESULT (STDMETHODCALLTYPE *CreateGroup)(
        ICifRWFile *This,
        const char *id,
        ICifRWGroup **p);

    HRESULT (STDMETHODCALLTYPE *CreateMode)(
        ICifRWFile *This,
        const char *id,
        ICifRWMode **p);

    HRESULT (STDMETHODCALLTYPE *DeleteComponent)(
        ICifRWFile *This,
        const char *id);

    HRESULT (STDMETHODCALLTYPE *DeleteGroup)(
        ICifRWFile *This,
        const char *id);

    HRESULT (STDMETHODCALLTYPE *DeleteMode)(
        ICifRWFile *This,
        const char *id);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ICifRWFile *This);

    END_INTERFACE
} ICifRWFileVtbl;

interface ICifRWFile {
    CONST_VTBL ICifRWFileVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICifRWFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICifRWFile_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICifRWFile_Release(This) (This)->lpVtbl->Release(This)
/*** ICifFile methods ***/
#define ICifRWFile_EnumComponents(This,enum_components,filter,pv) (This)->lpVtbl->EnumComponents(This,enum_components,filter,pv)
#define ICifRWFile_FindComponent(This,id,p) (This)->lpVtbl->FindComponent(This,id,p)
#define ICifRWFile_EnumGroups(This,enum_groups,filter,pv) (This)->lpVtbl->EnumGroups(This,enum_groups,filter,pv)
#define ICifRWFile_FindGroup(This,id,p) (This)->lpVtbl->FindGroup(This,id,p)
#define ICifRWFile_EnumModes(This,cuf_modes,filter,pv) (This)->lpVtbl->EnumModes(This,cuf_modes,filter,pv)
#define ICifRWFile_FindMode(This,id,p) (This)->lpVtbl->FindMode(This,id,p)
#define ICifRWFile_GetDescription(This,desc,size) (This)->lpVtbl->GetDescription(This,desc,size)
#define ICifRWFile_GetDetDlls(This,dlls,size) (This)->lpVtbl->GetDetDlls(This,dlls,size)
/*** ICifRWFile methods ***/
#define ICifRWFile_SetDescription(This,desc) (This)->lpVtbl->SetDescription(This,desc)
#define ICifRWFile_CreateComponent(This,id,p) (This)->lpVtbl->CreateComponent(This,id,p)
#define ICifRWFile_CreateGroup(This,id,p) (This)->lpVtbl->CreateGroup(This,id,p)
#define ICifRWFile_CreateMode(This,id,p) (This)->lpVtbl->CreateMode(This,id,p)
#define ICifRWFile_DeleteComponent(This,id) (This)->lpVtbl->DeleteComponent(This,id)
#define ICifRWFile_DeleteGroup(This,id) (This)->lpVtbl->DeleteGroup(This,id)
#define ICifRWFile_DeleteMode(This,id) (This)->lpVtbl->DeleteMode(This,id)
#define ICifRWFile_Flush(This) (This)->lpVtbl->Flush(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ICifRWFile_QueryInterface(ICifRWFile* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ICifRWFile_AddRef(ICifRWFile* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ICifRWFile_Release(ICifRWFile* This) {
    return This->lpVtbl->Release(This);
}
/*** ICifFile methods ***/
static FORCEINLINE HRESULT ICifRWFile_EnumComponents(ICifRWFile* This,IEnumCifComponents **enum_components,DWORD filter,void *pv) {
    return This->lpVtbl->EnumComponents(This,enum_components,filter,pv);
}
static FORCEINLINE HRESULT ICifRWFile_FindComponent(ICifRWFile* This,const char *id,ICifComponent **p) {
    return This->lpVtbl->FindComponent(This,id,p);
}
static FORCEINLINE HRESULT ICifRWFile_EnumGroups(ICifRWFile* This,IEnumCifGroups **enum_groups,DWORD filter,void *pv) {
    return This->lpVtbl->EnumGroups(This,enum_groups,filter,pv);
}
static FORCEINLINE HRESULT ICifRWFile_FindGroup(ICifRWFile* This,const char *id,ICifGroup **p) {
    return This->lpVtbl->FindGroup(This,id,p);
}
static FORCEINLINE HRESULT ICifRWFile_EnumModes(ICifRWFile* This,IEnumCifModes **cuf_modes,DWORD filter,void *pv) {
    return This->lpVtbl->EnumModes(This,cuf_modes,filter,pv);
}
static FORCEINLINE HRESULT ICifRWFile_FindMode(ICifRWFile* This,const char *id,ICifMode **p) {
    return This->lpVtbl->FindMode(This,id,p);
}
static FORCEINLINE HRESULT ICifRWFile_GetDescription(ICifRWFile* This,char *desc,DWORD size) {
    return This->lpVtbl->GetDescription(This,desc,size);
}
static FORCEINLINE HRESULT ICifRWFile_GetDetDlls(ICifRWFile* This,char *dlls,DWORD size) {
    return This->lpVtbl->GetDetDlls(This,dlls,size);
}
/*** ICifRWFile methods ***/
static FORCEINLINE HRESULT ICifRWFile_SetDescription(ICifRWFile* This,const char *desc) {
    return This->lpVtbl->SetDescription(This,desc);
}
static FORCEINLINE HRESULT ICifRWFile_CreateComponent(ICifRWFile* This,const char *id,ICifRWComponent **p) {
    return This->lpVtbl->CreateComponent(This,id,p);
}
static FORCEINLINE HRESULT ICifRWFile_CreateGroup(ICifRWFile* This,const char *id,ICifRWGroup **p) {
    return This->lpVtbl->CreateGroup(This,id,p);
}
static FORCEINLINE HRESULT ICifRWFile_CreateMode(ICifRWFile* This,const char *id,ICifRWMode **p) {
    return This->lpVtbl->CreateMode(This,id,p);
}
static FORCEINLINE HRESULT ICifRWFile_DeleteComponent(ICifRWFile* This,const char *id) {
    return This->lpVtbl->DeleteComponent(This,id);
}
static FORCEINLINE HRESULT ICifRWFile_DeleteGroup(ICifRWFile* This,const char *id) {
    return This->lpVtbl->DeleteGroup(This,id);
}
static FORCEINLINE HRESULT ICifRWFile_DeleteMode(ICifRWFile* This,const char *id) {
    return This->lpVtbl->DeleteMode(This,id);
}
static FORCEINLINE HRESULT ICifRWFile_Flush(ICifRWFile* This) {
    return This->lpVtbl->Flush(This);
}
#endif
#endif

#endif


#endif  /* __ICifRWFile_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInstallEngineCallback interface
 */
#ifndef __IInstallEngineCallback_INTERFACE_DEFINED__
#define __IInstallEngineCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInstallEngineCallback, 0x6e449685, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6e449685-c509-11cf-aafa-00aa00b6015c")
IInstallEngineCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnEngineStatusChange(
        DWORD status,
        DWORD substatus) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnStartInstall(
        DWORD dl_size,
        DWORD install_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnStartComponent(
        const char *id,
        DWORD dl_size,
        DWORD install_size,
        const char *string) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnComponentProgress(
        const char *id,
        DWORD phrase,
        const char *string,
        const char *msg_string,
        ULONG progress,
        ULONG max) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnStopComponent(
        const char *id,
        HRESULT error,
        DWORD phrase,
        const char *string,
        DWORD status) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnStopInstall(
        HRESULT error,
        const char *error_string,
        DWORD status) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnEngineProblem(
        DWORD problem,
        DWORD *action) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IInstallEngineCallback, 0x6e449685, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#else
typedef struct IInstallEngineCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IInstallEngineCallback *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IInstallEngineCallback *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IInstallEngineCallback *This);

    /*** IInstallEngineCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnEngineStatusChange)(
        IInstallEngineCallback *This,
        DWORD status,
        DWORD substatus);

    HRESULT (STDMETHODCALLTYPE *OnStartInstall)(
        IInstallEngineCallback *This,
        DWORD dl_size,
        DWORD install_size);

    HRESULT (STDMETHODCALLTYPE *OnStartComponent)(
        IInstallEngineCallback *This,
        const char *id,
        DWORD dl_size,
        DWORD install_size,
        const char *string);

    HRESULT (STDMETHODCALLTYPE *OnComponentProgress)(
        IInstallEngineCallback *This,
        const char *id,
        DWORD phrase,
        const char *string,
        const char *msg_string,
        ULONG progress,
        ULONG max);

    HRESULT (STDMETHODCALLTYPE *OnStopComponent)(
        IInstallEngineCallback *This,
        const char *id,
        HRESULT error,
        DWORD phrase,
        const char *string,
        DWORD status);

    HRESULT (STDMETHODCALLTYPE *OnStopInstall)(
        IInstallEngineCallback *This,
        HRESULT error,
        const char *error_string,
        DWORD status);

    HRESULT (STDMETHODCALLTYPE *OnEngineProblem)(
        IInstallEngineCallback *This,
        DWORD problem,
        DWORD *action);

    END_INTERFACE
} IInstallEngineCallbackVtbl;

interface IInstallEngineCallback {
    CONST_VTBL IInstallEngineCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IInstallEngineCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInstallEngineCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInstallEngineCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IInstallEngineCallback methods ***/
#define IInstallEngineCallback_OnEngineStatusChange(This,status,substatus) (This)->lpVtbl->OnEngineStatusChange(This,status,substatus)
#define IInstallEngineCallback_OnStartInstall(This,dl_size,install_size) (This)->lpVtbl->OnStartInstall(This,dl_size,install_size)
#define IInstallEngineCallback_OnStartComponent(This,id,dl_size,install_size,string) (This)->lpVtbl->OnStartComponent(This,id,dl_size,install_size,string)
#define IInstallEngineCallback_OnComponentProgress(This,id,phrase,string,msg_string,progress,max) (This)->lpVtbl->OnComponentProgress(This,id,phrase,string,msg_string,progress,max)
#define IInstallEngineCallback_OnStopComponent(This,id,error,phrase,string,status) (This)->lpVtbl->OnStopComponent(This,id,error,phrase,string,status)
#define IInstallEngineCallback_OnStopInstall(This,error,error_string,status) (This)->lpVtbl->OnStopInstall(This,error,error_string,status)
#define IInstallEngineCallback_OnEngineProblem(This,problem,action) (This)->lpVtbl->OnEngineProblem(This,problem,action)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IInstallEngineCallback_QueryInterface(IInstallEngineCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IInstallEngineCallback_AddRef(IInstallEngineCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IInstallEngineCallback_Release(IInstallEngineCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IInstallEngineCallback methods ***/
static FORCEINLINE HRESULT IInstallEngineCallback_OnEngineStatusChange(IInstallEngineCallback* This,DWORD status,DWORD substatus) {
    return This->lpVtbl->OnEngineStatusChange(This,status,substatus);
}
static FORCEINLINE HRESULT IInstallEngineCallback_OnStartInstall(IInstallEngineCallback* This,DWORD dl_size,DWORD install_size) {
    return This->lpVtbl->OnStartInstall(This,dl_size,install_size);
}
static FORCEINLINE HRESULT IInstallEngineCallback_OnStartComponent(IInstallEngineCallback* This,const char *id,DWORD dl_size,DWORD install_size,const char *string) {
    return This->lpVtbl->OnStartComponent(This,id,dl_size,install_size,string);
}
static FORCEINLINE HRESULT IInstallEngineCallback_OnComponentProgress(IInstallEngineCallback* This,const char *id,DWORD phrase,const char *string,const char *msg_string,ULONG progress,ULONG max) {
    return This->lpVtbl->OnComponentProgress(This,id,phrase,string,msg_string,progress,max);
}
static FORCEINLINE HRESULT IInstallEngineCallback_OnStopComponent(IInstallEngineCallback* This,const char *id,HRESULT error,DWORD phrase,const char *string,DWORD status) {
    return This->lpVtbl->OnStopComponent(This,id,error,phrase,string,status);
}
static FORCEINLINE HRESULT IInstallEngineCallback_OnStopInstall(IInstallEngineCallback* This,HRESULT error,const char *error_string,DWORD status) {
    return This->lpVtbl->OnStopInstall(This,error,error_string,status);
}
static FORCEINLINE HRESULT IInstallEngineCallback_OnEngineProblem(IInstallEngineCallback* This,DWORD problem,DWORD *action) {
    return This->lpVtbl->OnEngineProblem(This,problem,action);
}
#endif
#endif

#endif


#endif  /* __IInstallEngineCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInstallEngine interface
 */
#ifndef __IInstallEngine_INTERFACE_DEFINED__
#define __IInstallEngine_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInstallEngine, 0x6e449684, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6e449684-c509-11cf-aafa-00aa00b6015c")
IInstallEngine : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetEngineStatus(
        DWORD *status) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCifFile(
        const char *cab_name,
        const char *cif_name) = 0;

    virtual HRESULT STDMETHODCALLTYPE DownloadComponents(
        DWORD flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE InstallComponents(
        DWORD flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumInstallIDs(
        UINT index,
        char **id) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumDownloadIDs(
        UINT index,
        char **id) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsComponentInstalled(
        const char *id,
        DWORD *status) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterInstallEngineCallback(
        IInstallEngineCallback *callback) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterInstallEngineCallback(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAction(
        const char *id,
        DWORD action,
        DWORD priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSizes(
        const char *id,
        COMPONENT_SIZES *sizes) = 0;

    virtual HRESULT STDMETHODCALLTYPE LaunchExtraCommand(
        const char *inf_name,
        const char *section) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
        const char *id,
        const char *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBaseUrl(
        const char *base_name) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDownloadDir(
        const char *download_dir) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInstallDrive(
        char drive) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInstallOptions(
        DWORD flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetHWND(
        HWND hwnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetIStream(
        IStream *stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE Abort(
        DWORD flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Suspend(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IInstallEngine, 0x6e449684, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#else
typedef struct IInstallEngineVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IInstallEngine *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IInstallEngine *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IInstallEngine *This);

    /*** IInstallEngine methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEngineStatus)(
        IInstallEngine *This,
        DWORD *status);

    HRESULT (STDMETHODCALLTYPE *SetCifFile)(
        IInstallEngine *This,
        const char *cab_name,
        const char *cif_name);

    HRESULT (STDMETHODCALLTYPE *DownloadComponents)(
        IInstallEngine *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *InstallComponents)(
        IInstallEngine *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *EnumInstallIDs)(
        IInstallEngine *This,
        UINT index,
        char **id);

    HRESULT (STDMETHODCALLTYPE *EnumDownloadIDs)(
        IInstallEngine *This,
        UINT index,
        char **id);

    HRESULT (STDMETHODCALLTYPE *IsComponentInstalled)(
        IInstallEngine *This,
        const char *id,
        DWORD *status);

    HRESULT (STDMETHODCALLTYPE *RegisterInstallEngineCallback)(
        IInstallEngine *This,
        IInstallEngineCallback *callback);

    HRESULT (STDMETHODCALLTYPE *UnregisterInstallEngineCallback)(
        IInstallEngine *This);

    HRESULT (STDMETHODCALLTYPE *SetAction)(
        IInstallEngine *This,
        const char *id,
        DWORD action,
        DWORD priority);

    HRESULT (STDMETHODCALLTYPE *GetSizes)(
        IInstallEngine *This,
        const char *id,
        COMPONENT_SIZES *sizes);

    HRESULT (STDMETHODCALLTYPE *LaunchExtraCommand)(
        IInstallEngine *This,
        const char *inf_name,
        const char *section);

    HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
        IInstallEngine *This,
        const char *id,
        const char *name);

    HRESULT (STDMETHODCALLTYPE *SetBaseUrl)(
        IInstallEngine *This,
        const char *base_name);

    HRESULT (STDMETHODCALLTYPE *SetDownloadDir)(
        IInstallEngine *This,
        const char *download_dir);

    HRESULT (STDMETHODCALLTYPE *SetInstallDrive)(
        IInstallEngine *This,
        char drive);

    HRESULT (STDMETHODCALLTYPE *SetInstallOptions)(
        IInstallEngine *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *SetHWND)(
        IInstallEngine *This,
        HWND hwnd);

    HRESULT (STDMETHODCALLTYPE *SetIStream)(
        IInstallEngine *This,
        IStream *stream);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IInstallEngine *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *Suspend)(
        IInstallEngine *This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IInstallEngine *This);

    END_INTERFACE
} IInstallEngineVtbl;

interface IInstallEngine {
    CONST_VTBL IInstallEngineVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IInstallEngine_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInstallEngine_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInstallEngine_Release(This) (This)->lpVtbl->Release(This)
/*** IInstallEngine methods ***/
#define IInstallEngine_GetEngineStatus(This,status) (This)->lpVtbl->GetEngineStatus(This,status)
#define IInstallEngine_SetCifFile(This,cab_name,cif_name) (This)->lpVtbl->SetCifFile(This,cab_name,cif_name)
#define IInstallEngine_DownloadComponents(This,flags) (This)->lpVtbl->DownloadComponents(This,flags)
#define IInstallEngine_InstallComponents(This,flags) (This)->lpVtbl->InstallComponents(This,flags)
#define IInstallEngine_EnumInstallIDs(This,index,id) (This)->lpVtbl->EnumInstallIDs(This,index,id)
#define IInstallEngine_EnumDownloadIDs(This,index,id) (This)->lpVtbl->EnumDownloadIDs(This,index,id)
#define IInstallEngine_IsComponentInstalled(This,id,status) (This)->lpVtbl->IsComponentInstalled(This,id,status)
#define IInstallEngine_RegisterInstallEngineCallback(This,callback) (This)->lpVtbl->RegisterInstallEngineCallback(This,callback)
#define IInstallEngine_UnregisterInstallEngineCallback(This) (This)->lpVtbl->UnregisterInstallEngineCallback(This)
#define IInstallEngine_SetAction(This,id,action,priority) (This)->lpVtbl->SetAction(This,id,action,priority)
#define IInstallEngine_GetSizes(This,id,sizes) (This)->lpVtbl->GetSizes(This,id,sizes)
#define IInstallEngine_LaunchExtraCommand(This,inf_name,section) (This)->lpVtbl->LaunchExtraCommand(This,inf_name,section)
#define IInstallEngine_GetDisplayName(This,id,name) (This)->lpVtbl->GetDisplayName(This,id,name)
#define IInstallEngine_SetBaseUrl(This,base_name) (This)->lpVtbl->SetBaseUrl(This,base_name)
#define IInstallEngine_SetDownloadDir(This,download_dir) (This)->lpVtbl->SetDownloadDir(This,download_dir)
#define IInstallEngine_SetInstallDrive(This,drive) (This)->lpVtbl->SetInstallDrive(This,drive)
#define IInstallEngine_SetInstallOptions(This,flags) (This)->lpVtbl->SetInstallOptions(This,flags)
#define IInstallEngine_SetHWND(This,hwnd) (This)->lpVtbl->SetHWND(This,hwnd)
#define IInstallEngine_SetIStream(This,stream) (This)->lpVtbl->SetIStream(This,stream)
#define IInstallEngine_Abort(This,flags) (This)->lpVtbl->Abort(This,flags)
#define IInstallEngine_Suspend(This) (This)->lpVtbl->Suspend(This)
#define IInstallEngine_Resume(This) (This)->lpVtbl->Resume(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IInstallEngine_QueryInterface(IInstallEngine* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IInstallEngine_AddRef(IInstallEngine* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IInstallEngine_Release(IInstallEngine* This) {
    return This->lpVtbl->Release(This);
}
/*** IInstallEngine methods ***/
static FORCEINLINE HRESULT IInstallEngine_GetEngineStatus(IInstallEngine* This,DWORD *status) {
    return This->lpVtbl->GetEngineStatus(This,status);
}
static FORCEINLINE HRESULT IInstallEngine_SetCifFile(IInstallEngine* This,const char *cab_name,const char *cif_name) {
    return This->lpVtbl->SetCifFile(This,cab_name,cif_name);
}
static FORCEINLINE HRESULT IInstallEngine_DownloadComponents(IInstallEngine* This,DWORD flags) {
    return This->lpVtbl->DownloadComponents(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine_InstallComponents(IInstallEngine* This,DWORD flags) {
    return This->lpVtbl->InstallComponents(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine_EnumInstallIDs(IInstallEngine* This,UINT index,char **id) {
    return This->lpVtbl->EnumInstallIDs(This,index,id);
}
static FORCEINLINE HRESULT IInstallEngine_EnumDownloadIDs(IInstallEngine* This,UINT index,char **id) {
    return This->lpVtbl->EnumDownloadIDs(This,index,id);
}
static FORCEINLINE HRESULT IInstallEngine_IsComponentInstalled(IInstallEngine* This,const char *id,DWORD *status) {
    return This->lpVtbl->IsComponentInstalled(This,id,status);
}
static FORCEINLINE HRESULT IInstallEngine_RegisterInstallEngineCallback(IInstallEngine* This,IInstallEngineCallback *callback) {
    return This->lpVtbl->RegisterInstallEngineCallback(This,callback);
}
static FORCEINLINE HRESULT IInstallEngine_UnregisterInstallEngineCallback(IInstallEngine* This) {
    return This->lpVtbl->UnregisterInstallEngineCallback(This);
}
static FORCEINLINE HRESULT IInstallEngine_SetAction(IInstallEngine* This,const char *id,DWORD action,DWORD priority) {
    return This->lpVtbl->SetAction(This,id,action,priority);
}
static FORCEINLINE HRESULT IInstallEngine_GetSizes(IInstallEngine* This,const char *id,COMPONENT_SIZES *sizes) {
    return This->lpVtbl->GetSizes(This,id,sizes);
}
static FORCEINLINE HRESULT IInstallEngine_LaunchExtraCommand(IInstallEngine* This,const char *inf_name,const char *section) {
    return This->lpVtbl->LaunchExtraCommand(This,inf_name,section);
}
static FORCEINLINE HRESULT IInstallEngine_GetDisplayName(IInstallEngine* This,const char *id,const char *name) {
    return This->lpVtbl->GetDisplayName(This,id,name);
}
static FORCEINLINE HRESULT IInstallEngine_SetBaseUrl(IInstallEngine* This,const char *base_name) {
    return This->lpVtbl->SetBaseUrl(This,base_name);
}
static FORCEINLINE HRESULT IInstallEngine_SetDownloadDir(IInstallEngine* This,const char *download_dir) {
    return This->lpVtbl->SetDownloadDir(This,download_dir);
}
static FORCEINLINE HRESULT IInstallEngine_SetInstallDrive(IInstallEngine* This,char drive) {
    return This->lpVtbl->SetInstallDrive(This,drive);
}
static FORCEINLINE HRESULT IInstallEngine_SetInstallOptions(IInstallEngine* This,DWORD flags) {
    return This->lpVtbl->SetInstallOptions(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine_SetHWND(IInstallEngine* This,HWND hwnd) {
    return This->lpVtbl->SetHWND(This,hwnd);
}
static FORCEINLINE HRESULT IInstallEngine_SetIStream(IInstallEngine* This,IStream *stream) {
    return This->lpVtbl->SetIStream(This,stream);
}
static FORCEINLINE HRESULT IInstallEngine_Abort(IInstallEngine* This,DWORD flags) {
    return This->lpVtbl->Abort(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine_Suspend(IInstallEngine* This) {
    return This->lpVtbl->Suspend(This);
}
static FORCEINLINE HRESULT IInstallEngine_Resume(IInstallEngine* This) {
    return This->lpVtbl->Resume(This);
}
#endif
#endif

#endif


#endif  /* __IInstallEngine_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInstallEngine2 interface
 */
#ifndef __IInstallEngine2_INTERFACE_DEFINED__
#define __IInstallEngine2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInstallEngine2, 0x6e449689, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6e449689-c509-11cf-aafa-00aa00b6015c")
IInstallEngine2 : public IInstallEngine
{
    virtual HRESULT STDMETHODCALLTYPE SetLocalCif(
        const char *cif) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetICifFile(
        ICifFile **cif_file) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IInstallEngine2, 0x6e449689, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#else
typedef struct IInstallEngine2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IInstallEngine2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IInstallEngine2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IInstallEngine2 *This);

    /*** IInstallEngine methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEngineStatus)(
        IInstallEngine2 *This,
        DWORD *status);

    HRESULT (STDMETHODCALLTYPE *SetCifFile)(
        IInstallEngine2 *This,
        const char *cab_name,
        const char *cif_name);

    HRESULT (STDMETHODCALLTYPE *DownloadComponents)(
        IInstallEngine2 *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *InstallComponents)(
        IInstallEngine2 *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *EnumInstallIDs)(
        IInstallEngine2 *This,
        UINT index,
        char **id);

    HRESULT (STDMETHODCALLTYPE *EnumDownloadIDs)(
        IInstallEngine2 *This,
        UINT index,
        char **id);

    HRESULT (STDMETHODCALLTYPE *IsComponentInstalled)(
        IInstallEngine2 *This,
        const char *id,
        DWORD *status);

    HRESULT (STDMETHODCALLTYPE *RegisterInstallEngineCallback)(
        IInstallEngine2 *This,
        IInstallEngineCallback *callback);

    HRESULT (STDMETHODCALLTYPE *UnregisterInstallEngineCallback)(
        IInstallEngine2 *This);

    HRESULT (STDMETHODCALLTYPE *SetAction)(
        IInstallEngine2 *This,
        const char *id,
        DWORD action,
        DWORD priority);

    HRESULT (STDMETHODCALLTYPE *GetSizes)(
        IInstallEngine2 *This,
        const char *id,
        COMPONENT_SIZES *sizes);

    HRESULT (STDMETHODCALLTYPE *LaunchExtraCommand)(
        IInstallEngine2 *This,
        const char *inf_name,
        const char *section);

    HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
        IInstallEngine2 *This,
        const char *id,
        const char *name);

    HRESULT (STDMETHODCALLTYPE *SetBaseUrl)(
        IInstallEngine2 *This,
        const char *base_name);

    HRESULT (STDMETHODCALLTYPE *SetDownloadDir)(
        IInstallEngine2 *This,
        const char *download_dir);

    HRESULT (STDMETHODCALLTYPE *SetInstallDrive)(
        IInstallEngine2 *This,
        char drive);

    HRESULT (STDMETHODCALLTYPE *SetInstallOptions)(
        IInstallEngine2 *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *SetHWND)(
        IInstallEngine2 *This,
        HWND hwnd);

    HRESULT (STDMETHODCALLTYPE *SetIStream)(
        IInstallEngine2 *This,
        IStream *stream);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IInstallEngine2 *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *Suspend)(
        IInstallEngine2 *This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IInstallEngine2 *This);

    /*** IInstallEngine2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetLocalCif)(
        IInstallEngine2 *This,
        const char *cif);

    HRESULT (STDMETHODCALLTYPE *GetICifFile)(
        IInstallEngine2 *This,
        ICifFile **cif_file);

    END_INTERFACE
} IInstallEngine2Vtbl;

interface IInstallEngine2 {
    CONST_VTBL IInstallEngine2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IInstallEngine2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInstallEngine2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInstallEngine2_Release(This) (This)->lpVtbl->Release(This)
/*** IInstallEngine methods ***/
#define IInstallEngine2_GetEngineStatus(This,status) (This)->lpVtbl->GetEngineStatus(This,status)
#define IInstallEngine2_SetCifFile(This,cab_name,cif_name) (This)->lpVtbl->SetCifFile(This,cab_name,cif_name)
#define IInstallEngine2_DownloadComponents(This,flags) (This)->lpVtbl->DownloadComponents(This,flags)
#define IInstallEngine2_InstallComponents(This,flags) (This)->lpVtbl->InstallComponents(This,flags)
#define IInstallEngine2_EnumInstallIDs(This,index,id) (This)->lpVtbl->EnumInstallIDs(This,index,id)
#define IInstallEngine2_EnumDownloadIDs(This,index,id) (This)->lpVtbl->EnumDownloadIDs(This,index,id)
#define IInstallEngine2_IsComponentInstalled(This,id,status) (This)->lpVtbl->IsComponentInstalled(This,id,status)
#define IInstallEngine2_RegisterInstallEngineCallback(This,callback) (This)->lpVtbl->RegisterInstallEngineCallback(This,callback)
#define IInstallEngine2_UnregisterInstallEngineCallback(This) (This)->lpVtbl->UnregisterInstallEngineCallback(This)
#define IInstallEngine2_SetAction(This,id,action,priority) (This)->lpVtbl->SetAction(This,id,action,priority)
#define IInstallEngine2_GetSizes(This,id,sizes) (This)->lpVtbl->GetSizes(This,id,sizes)
#define IInstallEngine2_LaunchExtraCommand(This,inf_name,section) (This)->lpVtbl->LaunchExtraCommand(This,inf_name,section)
#define IInstallEngine2_GetDisplayName(This,id,name) (This)->lpVtbl->GetDisplayName(This,id,name)
#define IInstallEngine2_SetBaseUrl(This,base_name) (This)->lpVtbl->SetBaseUrl(This,base_name)
#define IInstallEngine2_SetDownloadDir(This,download_dir) (This)->lpVtbl->SetDownloadDir(This,download_dir)
#define IInstallEngine2_SetInstallDrive(This,drive) (This)->lpVtbl->SetInstallDrive(This,drive)
#define IInstallEngine2_SetInstallOptions(This,flags) (This)->lpVtbl->SetInstallOptions(This,flags)
#define IInstallEngine2_SetHWND(This,hwnd) (This)->lpVtbl->SetHWND(This,hwnd)
#define IInstallEngine2_SetIStream(This,stream) (This)->lpVtbl->SetIStream(This,stream)
#define IInstallEngine2_Abort(This,flags) (This)->lpVtbl->Abort(This,flags)
#define IInstallEngine2_Suspend(This) (This)->lpVtbl->Suspend(This)
#define IInstallEngine2_Resume(This) (This)->lpVtbl->Resume(This)
/*** IInstallEngine2 methods ***/
#define IInstallEngine2_SetLocalCif(This,cif) (This)->lpVtbl->SetLocalCif(This,cif)
#define IInstallEngine2_GetICifFile(This,cif_file) (This)->lpVtbl->GetICifFile(This,cif_file)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IInstallEngine2_QueryInterface(IInstallEngine2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IInstallEngine2_AddRef(IInstallEngine2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IInstallEngine2_Release(IInstallEngine2* This) {
    return This->lpVtbl->Release(This);
}
/*** IInstallEngine methods ***/
static FORCEINLINE HRESULT IInstallEngine2_GetEngineStatus(IInstallEngine2* This,DWORD *status) {
    return This->lpVtbl->GetEngineStatus(This,status);
}
static FORCEINLINE HRESULT IInstallEngine2_SetCifFile(IInstallEngine2* This,const char *cab_name,const char *cif_name) {
    return This->lpVtbl->SetCifFile(This,cab_name,cif_name);
}
static FORCEINLINE HRESULT IInstallEngine2_DownloadComponents(IInstallEngine2* This,DWORD flags) {
    return This->lpVtbl->DownloadComponents(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine2_InstallComponents(IInstallEngine2* This,DWORD flags) {
    return This->lpVtbl->InstallComponents(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine2_EnumInstallIDs(IInstallEngine2* This,UINT index,char **id) {
    return This->lpVtbl->EnumInstallIDs(This,index,id);
}
static FORCEINLINE HRESULT IInstallEngine2_EnumDownloadIDs(IInstallEngine2* This,UINT index,char **id) {
    return This->lpVtbl->EnumDownloadIDs(This,index,id);
}
static FORCEINLINE HRESULT IInstallEngine2_IsComponentInstalled(IInstallEngine2* This,const char *id,DWORD *status) {
    return This->lpVtbl->IsComponentInstalled(This,id,status);
}
static FORCEINLINE HRESULT IInstallEngine2_RegisterInstallEngineCallback(IInstallEngine2* This,IInstallEngineCallback *callback) {
    return This->lpVtbl->RegisterInstallEngineCallback(This,callback);
}
static FORCEINLINE HRESULT IInstallEngine2_UnregisterInstallEngineCallback(IInstallEngine2* This) {
    return This->lpVtbl->UnregisterInstallEngineCallback(This);
}
static FORCEINLINE HRESULT IInstallEngine2_SetAction(IInstallEngine2* This,const char *id,DWORD action,DWORD priority) {
    return This->lpVtbl->SetAction(This,id,action,priority);
}
static FORCEINLINE HRESULT IInstallEngine2_GetSizes(IInstallEngine2* This,const char *id,COMPONENT_SIZES *sizes) {
    return This->lpVtbl->GetSizes(This,id,sizes);
}
static FORCEINLINE HRESULT IInstallEngine2_LaunchExtraCommand(IInstallEngine2* This,const char *inf_name,const char *section) {
    return This->lpVtbl->LaunchExtraCommand(This,inf_name,section);
}
static FORCEINLINE HRESULT IInstallEngine2_GetDisplayName(IInstallEngine2* This,const char *id,const char *name) {
    return This->lpVtbl->GetDisplayName(This,id,name);
}
static FORCEINLINE HRESULT IInstallEngine2_SetBaseUrl(IInstallEngine2* This,const char *base_name) {
    return This->lpVtbl->SetBaseUrl(This,base_name);
}
static FORCEINLINE HRESULT IInstallEngine2_SetDownloadDir(IInstallEngine2* This,const char *download_dir) {
    return This->lpVtbl->SetDownloadDir(This,download_dir);
}
static FORCEINLINE HRESULT IInstallEngine2_SetInstallDrive(IInstallEngine2* This,char drive) {
    return This->lpVtbl->SetInstallDrive(This,drive);
}
static FORCEINLINE HRESULT IInstallEngine2_SetInstallOptions(IInstallEngine2* This,DWORD flags) {
    return This->lpVtbl->SetInstallOptions(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine2_SetHWND(IInstallEngine2* This,HWND hwnd) {
    return This->lpVtbl->SetHWND(This,hwnd);
}
static FORCEINLINE HRESULT IInstallEngine2_SetIStream(IInstallEngine2* This,IStream *stream) {
    return This->lpVtbl->SetIStream(This,stream);
}
static FORCEINLINE HRESULT IInstallEngine2_Abort(IInstallEngine2* This,DWORD flags) {
    return This->lpVtbl->Abort(This,flags);
}
static FORCEINLINE HRESULT IInstallEngine2_Suspend(IInstallEngine2* This) {
    return This->lpVtbl->Suspend(This);
}
static FORCEINLINE HRESULT IInstallEngine2_Resume(IInstallEngine2* This) {
    return This->lpVtbl->Resume(This);
}
/*** IInstallEngine2 methods ***/
static FORCEINLINE HRESULT IInstallEngine2_SetLocalCif(IInstallEngine2* This,const char *cif) {
    return This->lpVtbl->SetLocalCif(This,cif);
}
static FORCEINLINE HRESULT IInstallEngine2_GetICifFile(IInstallEngine2* This,ICifFile **cif_file) {
    return This->lpVtbl->GetICifFile(This,cif_file);
}
#endif
#endif

#endif


#endif  /* __IInstallEngine2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInstallEngineTiming interface
 */
#ifndef __IInstallEngineTiming_INTERFACE_DEFINED__
#define __IInstallEngineTiming_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInstallEngineTiming, 0x6e449687, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6e449687-c509-11cf-aafa-00aa00b6015c")
IInstallEngineTiming : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetRates(
        DWORD *download,
        DWORD *install) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInstallProgress(
        INSTALLPROGRESS *progress) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IInstallEngineTiming, 0x6e449687, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#else
typedef struct IInstallEngineTimingVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IInstallEngineTiming *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IInstallEngineTiming *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IInstallEngineTiming *This);

    /*** IInstallEngineTiming methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRates)(
        IInstallEngineTiming *This,
        DWORD *download,
        DWORD *install);

    HRESULT (STDMETHODCALLTYPE *GetInstallProgress)(
        IInstallEngineTiming *This,
        INSTALLPROGRESS *progress);

    END_INTERFACE
} IInstallEngineTimingVtbl;

interface IInstallEngineTiming {
    CONST_VTBL IInstallEngineTimingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IInstallEngineTiming_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInstallEngineTiming_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInstallEngineTiming_Release(This) (This)->lpVtbl->Release(This)
/*** IInstallEngineTiming methods ***/
#define IInstallEngineTiming_GetRates(This,download,install) (This)->lpVtbl->GetRates(This,download,install)
#define IInstallEngineTiming_GetInstallProgress(This,progress) (This)->lpVtbl->GetInstallProgress(This,progress)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IInstallEngineTiming_QueryInterface(IInstallEngineTiming* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IInstallEngineTiming_AddRef(IInstallEngineTiming* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IInstallEngineTiming_Release(IInstallEngineTiming* This) {
    return This->lpVtbl->Release(This);
}
/*** IInstallEngineTiming methods ***/
static FORCEINLINE HRESULT IInstallEngineTiming_GetRates(IInstallEngineTiming* This,DWORD *download,DWORD *install) {
    return This->lpVtbl->GetRates(This,download,install);
}
static FORCEINLINE HRESULT IInstallEngineTiming_GetInstallProgress(IInstallEngineTiming* This,INSTALLPROGRESS *progress) {
    return This->lpVtbl->GetInstallProgress(This,progress);
}
#endif
#endif

#endif


#endif  /* __IInstallEngineTiming_INTERFACE_DEFINED__ */

/*****************************************************************************
 * InstallEngine coclass
 */

DEFINE_GUID(CLSID_InstallEngine, 0x6e449686, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c);

#ifdef __cplusplus
class DECLSPEC_UUID("6e449686-c509-11cf-aafa-00aa00b6015c") InstallEngine;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(InstallEngine, 0x6e449686, 0xc509, 0x11cf, 0xaa,0xfa, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#endif

/*****************************************************************************
 * DownloadSiteMgr coclass
 */

DEFINE_GUID(CLSID_DownloadSiteMgr, 0xbfc880f1, 0x7484, 0x11d0, 0x83,0x09, 0x00,0xaa,0x00,0xb6,0x01,0x5c);

#ifdef __cplusplus
class DECLSPEC_UUID("bfc880f1-7484-11d0-8309-00aa00b6015c") DownloadSiteMgr;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(DownloadSiteMgr, 0xbfc880f1, 0x7484, 0x11d0, 0x83,0x09, 0x00,0xaa,0x00,0xb6,0x01,0x5c)
#endif
#endif

HRESULT WINAPI GetICifFileFromFile(ICifFile **, const char *);
HRESULT WINAPI GetICifRWFileFromFile(ICifRWFile **, const char *);
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __inseng_h__ */
