/*** Autogenerated by WIDL 1.8-rc3 from ../../wine/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 __ICifFile_FWD_DEFINED__
#define __ICifFile_FWD_DEFINED__
typedef interface ICifFile ICifFile;
#ifdef __cplusplus
interface ICifFile;
#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 __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

#ifndef __ICifComponent_FWD_DEFINED__
#define __ICifComponent_FWD_DEFINED__
typedef interface ICifComponent ICifComponent;
#ifdef __cplusplus
interface ICifComponent;
#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 __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 __IEnumCifModes_FWD_DEFINED__
#define __IEnumCifModes_FWD_DEFINED__
typedef interface IEnumCifModes IEnumCifModes;
#ifdef __cplusplus
interface IEnumCifModes;
#endif /* __cplusplus */
#endif

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

HRESULT STDMETHODCALLTYPE ICifFile_EnumComponents_Proxy(
    ICifFile* This,
    IEnumCifComponents **enum_components,
    DWORD filter,
    void *pv);
void __RPC_STUB ICifFile_EnumComponents_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_FindComponent_Proxy(
    ICifFile* This,
    const char *id,
    ICifComponent **p);
void __RPC_STUB ICifFile_FindComponent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_EnumGroups_Proxy(
    ICifFile* This,
    IEnumCifGroups **enum_groups,
    DWORD filter,
    void *pv);
void __RPC_STUB ICifFile_EnumGroups_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_FindGroup_Proxy(
    ICifFile* This,
    const char *id,
    ICifGroup **p);
void __RPC_STUB ICifFile_FindGroup_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_EnumModes_Proxy(
    ICifFile* This,
    IEnumCifModes **cuf_modes,
    DWORD filter,
    void *pv);
void __RPC_STUB ICifFile_EnumModes_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_FindMode_Proxy(
    ICifFile* This,
    const char *id,
    ICifMode **p);
void __RPC_STUB ICifFile_FindMode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_GetDescription_Proxy(
    ICifFile* This,
    char *desc,
    DWORD size);
void __RPC_STUB ICifFile_GetDescription_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ICifFile_GetDetDlls_Proxy(
    ICifFile* This,
    char **dlls,
    DWORD size);
void __RPC_STUB ICifFile_GetDetDlls_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICifFile_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,
        LPDWORD 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,
        LPDWORD 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,LPDWORD action) {
    return This->lpVtbl->OnEngineProblem(This,problem,action);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnEngineStatusChange_Proxy(
    IInstallEngineCallback* This,
    DWORD status,
    DWORD substatus);
void __RPC_STUB IInstallEngineCallback_OnEngineStatusChange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnStartInstall_Proxy(
    IInstallEngineCallback* This,
    DWORD dl_size,
    DWORD install_size);
void __RPC_STUB IInstallEngineCallback_OnStartInstall_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnStartComponent_Proxy(
    IInstallEngineCallback* This,
    const char *id,
    DWORD dl_size,
    DWORD install_size,
    const char *string);
void __RPC_STUB IInstallEngineCallback_OnStartComponent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnComponentProgress_Proxy(
    IInstallEngineCallback* This,
    const char *id,
    DWORD phrase,
    const char *string,
    const char *msg_string,
    ULONG progress,
    ULONG max);
void __RPC_STUB IInstallEngineCallback_OnComponentProgress_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnStopComponent_Proxy(
    IInstallEngineCallback* This,
    const char *id,
    HRESULT error,
    DWORD phrase,
    const char *string,
    DWORD status);
void __RPC_STUB IInstallEngineCallback_OnStopComponent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnStopInstall_Proxy(
    IInstallEngineCallback* This,
    HRESULT error,
    const char *error_string,
    DWORD status);
void __RPC_STUB IInstallEngineCallback_OnStopInstall_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngineCallback_OnEngineProblem_Proxy(
    IInstallEngineCallback* This,
    DWORD problem,
    LPDWORD action);
void __RPC_STUB IInstallEngineCallback_OnEngineProblem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#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

HRESULT STDMETHODCALLTYPE IInstallEngine_GetEngineStatus_Proxy(
    IInstallEngine* This,
    DWORD *status);
void __RPC_STUB IInstallEngine_GetEngineStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetCifFile_Proxy(
    IInstallEngine* This,
    const char *cab_name,
    const char *cif_name);
void __RPC_STUB IInstallEngine_SetCifFile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_DownloadComponents_Proxy(
    IInstallEngine* This,
    DWORD flags);
void __RPC_STUB IInstallEngine_DownloadComponents_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_InstallComponents_Proxy(
    IInstallEngine* This,
    DWORD flags);
void __RPC_STUB IInstallEngine_InstallComponents_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_EnumInstallIDs_Proxy(
    IInstallEngine* This,
    UINT index,
    char **id);
void __RPC_STUB IInstallEngine_EnumInstallIDs_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_EnumDownloadIDs_Proxy(
    IInstallEngine* This,
    UINT index,
    char **id);
void __RPC_STUB IInstallEngine_EnumDownloadIDs_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_IsComponentInstalled_Proxy(
    IInstallEngine* This,
    const char *id,
    DWORD *status);
void __RPC_STUB IInstallEngine_IsComponentInstalled_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_RegisterInstallEngineCallback_Proxy(
    IInstallEngine* This,
    IInstallEngineCallback *callback);
void __RPC_STUB IInstallEngine_RegisterInstallEngineCallback_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_UnregisterInstallEngineCallback_Proxy(
    IInstallEngine* This);
void __RPC_STUB IInstallEngine_UnregisterInstallEngineCallback_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetAction_Proxy(
    IInstallEngine* This,
    const char *id,
    DWORD action,
    DWORD priority);
void __RPC_STUB IInstallEngine_SetAction_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_GetSizes_Proxy(
    IInstallEngine* This,
    const char *id,
    COMPONENT_SIZES *sizes);
void __RPC_STUB IInstallEngine_GetSizes_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_LaunchExtraCommand_Proxy(
    IInstallEngine* This,
    const char *inf_name,
    const char *section);
void __RPC_STUB IInstallEngine_LaunchExtraCommand_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_GetDisplayName_Proxy(
    IInstallEngine* This,
    const char *id,
    const char *name);
void __RPC_STUB IInstallEngine_GetDisplayName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetBaseUrl_Proxy(
    IInstallEngine* This,
    const char *base_name);
void __RPC_STUB IInstallEngine_SetBaseUrl_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetDownloadDir_Proxy(
    IInstallEngine* This,
    const char *download_dir);
void __RPC_STUB IInstallEngine_SetDownloadDir_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetInstallDrive_Proxy(
    IInstallEngine* This,
    char drive);
void __RPC_STUB IInstallEngine_SetInstallDrive_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetInstallOptions_Proxy(
    IInstallEngine* This,
    DWORD flags);
void __RPC_STUB IInstallEngine_SetInstallOptions_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetHWND_Proxy(
    IInstallEngine* This,
    HWND hwnd);
void __RPC_STUB IInstallEngine_SetHWND_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_SetIStream_Proxy(
    IInstallEngine* This,
    IStream *stream);
void __RPC_STUB IInstallEngine_SetIStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_Abort_Proxy(
    IInstallEngine* This,
    DWORD flags);
void __RPC_STUB IInstallEngine_Abort_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_Suspend_Proxy(
    IInstallEngine* This);
void __RPC_STUB IInstallEngine_Suspend_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine_Resume_Proxy(
    IInstallEngine* This);
void __RPC_STUB IInstallEngine_Resume_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#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

HRESULT STDMETHODCALLTYPE IInstallEngine2_SetLocalCif_Proxy(
    IInstallEngine2* This,
    const char *cif);
void __RPC_STUB IInstallEngine2_SetLocalCif_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInstallEngine2_GetICifFile_Proxy(
    IInstallEngine2* This,
    ICifFile **cif_file);
void __RPC_STUB IInstallEngine2_GetICifFile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInstallEngine2_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

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __inseng_h__ */
