Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

536 lines
19 KiB

//=--------------------------------------------------------------------------=
// inseng.h
//=--------------------------------------------------------------------------=
// Copyright 1995-1998 Microsoft Corporation. All Rights Reserved.
//
//
// interface declaration for the InstallEngine control.
//
#ifndef _INSENG_H_
#ifdef __cplusplus
extern "C"{
#endif
#define MAX_ID_LENGTH 48
#define MAX_DISPLAYNAME_LENGTH 128
#define ICI_NOTINSTALLED 0
#define ICI_INSTALLED 1
#define ICI_NEWVERSIONAVAILABLE 2
#define ICI_UNKNOWN 3
#define ICI_OLDVERSIONAVAILABLE 4
#define ICI_NOTINITIALIZED 0xffffffff
#define ABORTINSTALL_NORMAL 0
#define ABORTINSTALL_IMMEADIATE 1
#define ENGINESTATUS_NOTREADY 0
#define ENGINESTATUS_LOADING 1
#define ENGINESTATUS_INSTALLING 2
#define ENGINESTATUS_READY 3
#define CDINSTALL 1
#define WEBINSTALL 2
#define WEBINSTALL_DIFFERENTMACHINE 3
#define NETWORKINSTALL 4
#define LOCALINSTALL 5
#define DEP_NEVER_INSTALL 'N'
#define DEP_INSTALL 'I'
#define SETACTION_NONE 0x00000000
#define SETACTION_INSTALL 0x00000001
#define INSTALLOPTIONS_NOCACHE 0x00000001
#define INSTALLOPTIONS_DOWNLOAD 0x00000002
#define INSTALLOPTIONS_INSTALL 0x00000004
#define INSTALLOPTIONS_DONTALLOWXPLATFORM 0x00000008
#define INSTALLOPTIONS_FORCEDEPENDENCIES 0x00000010
#define EXECUTEJOB_SILENT 0x00000001
#define EXECUTEJOB_DELETE_JOB 0x00000002
#define EXECUTEJOB_VERIFYFILES 0x00000008
#define EXECUTEJOB_IGNORETRUST 0x00000010
#define EXECUTEJOB_IGNOREDOWNLOADERROR 0x00000020
#define EXECUTEJOB_DONTALLOWCANCEL 0x00000040
#define E_FILESMISSING _HRESULT_TYPEDEF_(0x80100003L)
HRESULT WINAPI CheckTrust(LPCSTR pszFilename, HWND hwndForUI, BOOL bShowBadUI);
HRESULT WINAPI CheckTrustEx(LPCSTR szURL, LPCSTR szFilename, HWND hwndForUI, BOOL bShowBadUI, DWORD dwReserved);
HRESULT WINAPI PurgeDownloadDir(LPCSTR pszDir);
HRESULT WINAPI CheckForVersionConflict();
typedef struct
{
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
{
DWORD cbSize;
DWORD dwDownloadKBRemaining;
DWORD dwInstallKBRemaining;
DWORD dwDownloadSecsRemaining;
DWORD dwInstallSecsRemaining;
} INSTALLPROGRESS;
enum InstallStatus
{
INSTALLSTATUS_INITIALIZING,
INSTALLSTATUS_DEPENDENCY,
INSTALLSTATUS_DOWNLOADING,
INSTALLSTATUS_COPYING,
INSTALLSTATUS_RETRYING,
INSTALLSTATUS_CHECKINGTRUST,
INSTALLSTATUS_EXTRACTING,
INSTALLSTATUS_RUNNING,
INSTALLSTATUS_FINISHED,
INSTALLSTATUS_DOWNLOADFINISHED
};
// defines for engine problems (OnEngineProblem)
#define ENGINEPROBLEM_DOWNLOADFAIL 0x00000001
// Actions particular to ENGINEPROBLEM_DOWNLOAD
#define DOWNLOADFAIL_RETRY 0x00000001
#define STOPINSTALL_REBOOTNEEDED 0x00000001
#define STOPINSTALL_REBOOTREFUSED 0x00000002
DEFINE_GUID(IID_IInstallEngineCallback,0x6E449685L,0xC509,0x11CF,0xAA,0xFA,0x00,0xAA,0x00,0xB6,0x01,0x5C);
#undef INTERFACE
#define INTERFACE IInstallEngineCallback
DECLARE_INTERFACE_(IInstallEngineCallback, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(OnEngineStatusChange)(THIS_ DWORD dwEngineStatus, DWORD substatus) PURE;
STDMETHOD(OnStartInstall)(THIS_ DWORD dwDLSize, DWORD dwInstallSize) PURE;
STDMETHOD(OnStartComponent)(THIS_ LPCSTR pszID, DWORD dwDLSize, DWORD dwInstallSize, LPCSTR pszString) PURE;
STDMETHOD(OnComponentProgress)(THIS_ LPCSTR pszID, DWORD dwPhase, LPCSTR pszString, LPCSTR pszMsgString, ULONG progress, ULONG themax) PURE;
STDMETHOD(OnStopComponent)(THIS_ LPCSTR pszID, HRESULT hError, DWORD dwPhase, LPCSTR pszString, DWORD dwStatus) PURE;
STDMETHOD(OnStopInstall)(THIS_ HRESULT hrError, LPCSTR szError, DWORD dwStatus) PURE;
STDMETHOD(OnEngineProblem)(THIS_ DWORD dwEngineProblem, LPDWORD dwAction) PURE;
};
DEFINE_GUID(IID_IInstallEngine,0x6E449684L,0xC509,0x11CF,0xAA,0xFA,0x00,0xAA,0x00,0xB6,0x01,0x5C);
#undef INTERFACE
#define INTERFACE IInstallEngine
DECLARE_INTERFACE_(IInstallEngine , IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// Methods to set engine up for install
STDMETHOD(GetEngineStatus)(THIS_ DWORD *theenginestatus) PURE;
STDMETHOD(SetCifFile)(THIS_ LPCSTR pszCabName, LPCSTR pszCifName) PURE;
STDMETHOD(DownloadComponents)(THIS_ DWORD dwFlags) PURE;
STDMETHOD(InstallComponents)(THIS_ DWORD dwFlags) PURE;
STDMETHOD(EnumInstallIDs)(THIS_ UINT uIndex, LPSTR *ppszID) PURE;
STDMETHOD(EnumDownloadIDs)(THIS_ UINT uIndex, LPSTR *ppszID) PURE;
STDMETHOD(IsComponentInstalled)(THIS_ LPCSTR pszID, DWORD *pdwStatus) PURE;
STDMETHOD(RegisterInstallEngineCallback)(THIS_ IInstallEngineCallback *pcb) PURE;
STDMETHOD(UnregisterInstallEngineCallback)(THIS) PURE;
STDMETHOD(SetAction)(THIS_ LPCSTR pszID, DWORD dwAction, DWORD dwPriority) PURE;
STDMETHOD(GetSizes)(THIS_ LPCSTR pszID, COMPONENT_SIZES *pSizes) PURE;
STDMETHOD(LaunchExtraCommand)(THIS_ LPCSTR pszInfName, LPCSTR pszSection) PURE;
STDMETHOD(GetDisplayName)(THIS_ LPCSTR pszID, LPSTR *ppszName) PURE;
// Info about the install (should be structure to fill in
// like GetBindInfo (GetInstallInfo)
STDMETHOD(SetBaseUrl)(THIS_ LPCSTR pszBaseName) PURE;
STDMETHOD(SetDownloadDir)(THIS_ LPCSTR pszDownloadDir) PURE;
STDMETHOD(SetInstallDrive)(THIS_ CHAR chDrive) PURE;
STDMETHOD(SetInstallOptions)(THIS_ DWORD dwInsFlag) PURE;
STDMETHOD(SetHWND)(THIS_ HWND hForUI) PURE;
STDMETHOD(SetIStream)(THIS_ IStream *pstm) PURE;
// Engine control during installation (seperate interface?)
STDMETHOD(Abort)(THIS_ DWORD dwFlags) PURE;
STDMETHOD(Suspend)(THIS) PURE;
STDMETHOD(Resume)(THIS) PURE;
};
DEFINE_GUID(IID_IInstallEngineTiming,0x6E449687L,0xC509,0x11CF,0xAA,0xFA,0x00,0xAA,0x00,0xB6,0x01,0x5C);
#undef INTERFACE
#define INTERFACE IInstallEngineTiming
DECLARE_INTERFACE_(IInstallEngineTiming , IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(GetRates)(THIS_ DWORD *pdwDownload, DWORD *pdwInstall) PURE;
STDMETHOD(GetInstallProgress)(THIS_ INSTALLPROGRESS *pinsprog) PURE;
};
DEFINE_GUID(CLSID_InstallEngine,0x6E449686L,0xC509,0x11CF,0xAA,0xFA,0x00,0xAA,0x00,0xB6,0x01,0x5C);
// The site manager interface
typedef struct
{
UINT cbSize;
LPSTR pszLang;
LPSTR pszRegion;
} SITEQUERYPARAMS;
typedef struct
{
UINT cbSize;
LPSTR pszUrl;
LPSTR pszFriendlyName;
LPSTR pszLang;
LPSTR pszRegion;
} DOWNLOADSITE;
// {BFC880F3-7484-11d0-8309-00AA00B6015C}
DEFINE_GUID(IID_IDownloadSite,
0xbfc880f3, 0x7484, 0x11d0, 0x83, 0x9, 0x0, 0xaa, 0x0, 0xb6, 0x1, 0x5c);
#undef INTERFACE
#define INTERFACE IDownloadSite
DECLARE_INTERFACE_(IDownloadSite , IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(GetData)(THIS_ DOWNLOADSITE **pds) PURE;
};
// {BFC880F0-7484-11d0-8309-00AA00B6015C}
DEFINE_GUID(IID_IDownloadSiteMgr,
0xbfc880f0, 0x7484, 0x11d0, 0x83, 0x9, 0x0, 0xaa, 0x0, 0xb6, 0x1, 0x5c);
#undef INTERFACE
#define INTERFACE IDownloadSiteMgr
DECLARE_INTERFACE_(IDownloadSiteMgr , IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(Initialize)(THIS_ LPCSTR pszUrl, SITEQUERYPARAMS *pqp) PURE;
STDMETHOD(EnumSites)(THIS_ DWORD dwIndex, IDownloadSite **pds) PURE;
};
// {BFC880F1-7484-11d0-8309-00AA00B6015C}
DEFINE_GUID(CLSID_DownloadSiteMgr,
0xbfc880f1, 0x7484, 0x11d0, 0x83, 0x9, 0x0, 0xaa, 0x0, 0xb6, 0x1, 0x5c);
// defines for dwUrlFlags
#define URLF_DEFAULT 0x00000000
#define URLF_EXTRACT 0x00000001
#define URLF_RELATIVEURL 0x00000002
#define URLF_DELETE_AFTER_EXTRACT 0x00000004
// types of dependancies
#define DEP_NEVER_INSTALL 'N'
#define DEP_INSTALL 'I'
// platform defines
#define PLATFORM_WIN95 0x00000001
#define PLATFORM_WIN98 0x00000002
#define PLATFORM_NT4 0x00000004
#define PLATFORM_NT5 0x00000008
#define PLATFORM_NT4ALPHA 0x00000010
#define PLATFORM_NT5ALPHA 0x00000020
#define PLATFORM_MILLEN 0x00000040
#define PLATFORM_ALL PLATFORM_WIN95 | PLATFORM_WIN98 | PLATFORM_NT4 | PLATFORM_NT5 | PLATFORM_NT4ALPHA | PLATFORM_NT5ALPHA | PLATFORM_MILLEN
// The action to be taken on this component ((Get)SetInstallQueueStatus, SetAction
enum ComponentAction { ActionNone, ActionInstall, ActionUninstall };
// Type for commands
// 0 1 2 3 4
enum CommandType { InfCommand, WExtractExe, Win32Exe, InfExCommand, HRESULTWin32Exe };
#undef INTERFACE
#define INTERFACE ICifComponent
DECLARE_INTERFACE(ICifComponent)
{
// for properties
STDMETHOD(GetID)(THIS_ LPSTR pszID, DWORD dwSize)PURE;
STDMETHOD(GetGUID)(THIS_ LPSTR pszGUID, DWORD dwSize)PURE;
STDMETHOD(GetDescription)(THIS_ LPSTR pszDesc, DWORD dwSize)PURE;
STDMETHOD(GetDetails)(THIS_ LPSTR pszDetails, DWORD dwSize) PURE;
STDMETHOD(GetUrl)(THIS_ UINT uUrlNum, LPSTR pszUrl, DWORD dwSize, LPDWORD pdwUrlFlags) PURE;
STDMETHOD(GetFileExtractList)(THIS_ UINT uUrlNum, LPSTR pszExtract, DWORD dwSize) PURE;
STDMETHOD(GetUrlCheckRange)(THIS_ UINT uUrlNum, LPDWORD pdwMin, LPDWORD pdwMax) PURE;
STDMETHOD(GetCommand)(THIS_ UINT uCmdNum, LPSTR pszCmd, DWORD dwCmdSize, LPSTR pszSwitches,
DWORD dwSwitchSize, LPDWORD pdwType) PURE;
STDMETHOD(GetVersion)(THIS_ LPDWORD pdwVersion, LPDWORD pdwBuild) PURE;
STDMETHOD(GetLocale)(THIS_ LPSTR pszLocale, DWORD dwSize) PURE;
STDMETHOD(GetUninstallKey)(THIS_ LPSTR pszKey, DWORD dwSize) PURE;
STDMETHOD(GetInstalledSize)(THIS_ LPDWORD pdwWin, LPDWORD pdwApp) PURE;
STDMETHOD_(DWORD, GetDownloadSize)(THIS) PURE;
STDMETHOD_(DWORD, GetExtractSize)(THIS) PURE;
STDMETHOD(GetSuccessKey)(THIS_ LPSTR pszKey, DWORD dwSize) PURE;
STDMETHOD(GetProgressKeys)(THIS_ LPSTR pszProgress, DWORD dwProgSize,
LPSTR pszCancel, DWORD dwCancelSize) PURE;
STDMETHOD(IsActiveSetupAware)(THIS) PURE;
STDMETHOD(IsRebootRequired)(THIS) PURE;
STDMETHOD(RequiresAdminRights)(THIS) PURE;
STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
STDMETHOD(GetDependency)(THIS_ UINT uDepNum, LPSTR pszID, DWORD dwBuf, char *pchType, LPDWORD pdwVer, LPDWORD pdwBuild) PURE;
STDMETHOD_(DWORD, GetPlatform)(THIS) PURE;
STDMETHOD(GetMode)(THIS_ UINT uModeNum, LPSTR pszMode, DWORD dwSize) PURE;
STDMETHOD(GetGroup)(THIS_ LPSTR pszID, DWORD dwSize) PURE;
STDMETHOD(IsUIVisible)(THIS) PURE;
STDMETHOD(GetPatchID)(THIS_ LPSTR pszID, DWORD dwSize) PURE;
STDMETHOD(GetDetVersion)(THIS_ LPSTR pszDLL, DWORD dwdllSize, LPSTR pszEntry, DWORD dwentSize) PURE;
STDMETHOD(GetTreatAsOneComponents)(THIS_ UINT uNum, LPSTR pszID, DWORD dwBuf) PURE;
STDMETHOD(GetCustomData)(LPSTR pszKey, LPSTR pszData, DWORD dwSize) PURE;
// access to state
STDMETHOD_(DWORD, IsComponentInstalled)(THIS) PURE;
STDMETHOD(IsComponentDownloaded)(THIS) PURE;
STDMETHOD_(DWORD, IsThisVersionInstalled)(THIS_ DWORD dwAskVer, DWORD dwAskBld, LPDWORD pdwVersion, LPDWORD pdwBuild) PURE;
STDMETHOD_(DWORD, GetInstallQueueState)(THIS) PURE;
STDMETHOD(SetInstallQueueState)(THIS_ DWORD dwState) PURE;
STDMETHOD_(DWORD, GetActualDownloadSize)(THIS) PURE;
STDMETHOD_(DWORD, GetCurrentPriority)(THIS) PURE;
STDMETHOD(SetCurrentPriority)(THIS_ DWORD dwPriority) PURE;
};
DECLARE_INTERFACE_(ICifRWComponent, ICifComponent)
{
STDMETHOD(SetGUID)(THIS_ LPCSTR pszGUID)PURE;
STDMETHOD(SetDescription)(THIS_ LPCSTR pszDesc)PURE;
STDMETHOD(SetUrl)(THIS_ UINT uUrlNum, LPCSTR pszUrl, DWORD dwUrlFlags) PURE;
STDMETHOD(SetCommand)(THIS_ UINT uCmdNum, LPCSTR pszCmd, LPCSTR pszSwitches, DWORD dwType) PURE;
STDMETHOD(SetVersion)(THIS_ LPCSTR pszVersion) PURE;
STDMETHOD(SetUninstallKey)(THIS_ LPCSTR pszKey) PURE;
STDMETHOD(SetInstalledSize)(THIS_ DWORD dwWin, DWORD dwApp) PURE;
STDMETHOD(SetDownloadSize)(THIS_ DWORD) PURE;
STDMETHOD(SetExtractSize)(THIS_ DWORD) PURE;
STDMETHOD(DeleteDependency)(THIS_ LPCSTR pszID, char chType) PURE;
STDMETHOD(AddDependency)(THIS_ LPCSTR pszID, char chType) PURE;
STDMETHOD(SetUIVisible)(THIS_ BOOL) PURE;
STDMETHOD(SetGroup)(THIS_ LPCSTR pszID) PURE;
STDMETHOD(SetPlatform)(THIS_ DWORD) PURE;
STDMETHOD(SetPriority)(THIS_ DWORD) PURE;
STDMETHOD(SetReboot)(THIS_ BOOL) PURE;
STDMETHOD(DeleteFromModes)(THIS_ LPCSTR pszMode) PURE;
STDMETHOD(AddToMode)(THIS_ LPCSTR pszMode) PURE;
STDMETHOD(SetModes)(THIS_ LPCSTR pszMode) PURE;
STDMETHOD(CopyComponent)(THIS_ LPCSTR pszCifFile) PURE;
STDMETHOD(AddToTreatAsOne)(THIS_ LPCSTR pszCompID) PURE;
STDMETHOD(SetDetails)(THIS_ LPCSTR pszDesc) PURE;
};
DECLARE_INTERFACE_(IEnumCifComponents, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// enum methods
STDMETHOD(Next)(THIS_ ICifComponent **) PURE;
STDMETHOD(Reset)(THIS) PURE;
};
DECLARE_INTERFACE(ICifGroup)
{
// for properties
STDMETHOD(GetID)(THIS_ LPSTR pszID, DWORD dwSize) PURE;
STDMETHOD(GetDescription)(THIS_ LPSTR pszDesc, DWORD dwSize) PURE;
STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
STDMETHOD(EnumComponents)(THIS_ IEnumCifComponents **, DWORD dwFilter, LPVOID pv) PURE;
STDMETHOD_(DWORD, GetCurrentPriority)(THIS) PURE;
};
DECLARE_INTERFACE_(ICifRWGroup, ICifGroup)
{
STDMETHOD(SetDescription)(THIS_ LPCSTR pszDesc) PURE;
STDMETHOD(SetPriority)(THIS_ DWORD) PURE;
STDMETHOD(SetDetails)(THIS_ LPCSTR pszDetails) PURE;
};
DECLARE_INTERFACE_(IEnumCifGroups, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// enum methods
STDMETHOD(Next)(THIS_ ICifGroup **) PURE;
STDMETHOD(Reset)(THIS) PURE;
};
DECLARE_INTERFACE(ICifMode)
{
// for properties
STDMETHOD(GetID)(THIS_ LPSTR pszID, DWORD dwSize) PURE;
STDMETHOD(GetDescription)(THIS_ LPSTR pszDesc, DWORD dwSize) PURE;
STDMETHOD(GetDetails)(THIS_ LPSTR pszDetails, DWORD dwSize) PURE;
STDMETHOD(EnumComponents)(THIS_ IEnumCifComponents **, DWORD dwFilter, LPVOID pv) PURE;
};
DECLARE_INTERFACE_(ICifRWMode, ICifMode)
{
STDMETHOD(SetDescription)(THIS_ LPCSTR pszDesc) PURE;
STDMETHOD(SetDetails)(THIS_ LPCSTR pszDetails) PURE;
};
DECLARE_INTERFACE_(IEnumCifModes, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// enum methods
STDMETHOD(Next)(THIS_ ICifMode **) PURE;
STDMETHOD(Reset)(THIS) PURE;
};
DEFINE_GUID(IID_ICifFile,0x6E449688L,0xC509,0x11CF,0xAA,0xFA,0x00,0xAA,0x00,0xB6,0x01,0x5C);
DECLARE_INTERFACE_(ICifFile, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(EnumComponents)(THIS_ IEnumCifComponents **, DWORD dwFilter, LPVOID pv) PURE;
STDMETHOD(FindComponent)(THIS_ LPCSTR pszID, ICifComponent **p) PURE;
STDMETHOD(EnumGroups)(THIS_ IEnumCifGroups **, DWORD dwFilter, LPVOID pv) PURE;
STDMETHOD(FindGroup)(THIS_ LPCSTR pszID, ICifGroup **p) PURE;
STDMETHOD(EnumModes)(THIS_ IEnumCifModes **, DWORD dwFilter, LPVOID pv) PURE;
STDMETHOD(FindMode)(THIS_ LPCSTR pszID, ICifMode **p) PURE;
STDMETHOD(GetDescription)(THIS_ LPSTR pszDesc, DWORD dwSize) PURE;
STDMETHOD(GetDetDlls)(THIS_ LPSTR pszDlls, DWORD dwSize) PURE;
};
DECLARE_INTERFACE_(ICifRWFile, ICifFile)
{
STDMETHOD(SetDescription)(THIS_ LPCSTR pszDesc) PURE;
STDMETHOD(CreateComponent)(THIS_ LPCSTR pszID, ICifRWComponent **p) PURE;
STDMETHOD(CreateGroup)(THIS_ LPCSTR pszID, ICifRWGroup **p) PURE;
STDMETHOD(CreateMode)(THIS_ LPCSTR pszID, ICifRWMode **p) PURE;
STDMETHOD(DeleteComponent)(THIS_ LPCSTR pszID) PURE;
STDMETHOD(DeleteGroup)(THIS_ LPCSTR pszID) PURE;
STDMETHOD(DeleteMode)(THIS_ LPCSTR pszID) PURE;
STDMETHOD(Flush)(THIS) PURE;
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Detection DLL
// Returns from DetectVersion
#define DET_NOTINSTALLED 0
#define DET_INSTALLED 1
#define DET_NEWVERSIONINSTALLED 2
#define DET_OLDVERSIONINSTALLED 3
// Function prototype
typedef struct
{
DWORD dwSize;
LPDWORD pdwInstalledVer;
LPDWORD pdwInstalledBuild;
LPSTR pszGUID;
LPSTR pszLocale;
DWORD dwAskVer;
DWORD dwAskBuild;
ICifFile *pCifFile;
ICifComponent *pCifComp;
} DETECTION_STRUCT;
typedef DWORD (WINAPI *DETECTVERSION)(DETECTION_STRUCT *pDetectionStruct);
///////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE_GUID(IID_IInstallEngine2,0x6E449689L,0xC509,0x11CF,0xAA,0xFA,0x00,0xAA,0x00,0xB6,0x01,0x5C);
#undef INTERFACE
#define INTERFACE IInstallEngine2
DECLARE_INTERFACE_(IInstallEngine2 , IInstallEngine)
{
STDMETHOD(SetLocalCif)(THIS_ LPCSTR pszCif) PURE;
STDMETHOD(GetICifFile)(THIS_ ICifFile **picif) PURE;
};
HRESULT WINAPI GetICifFileFromFile(ICifFile **, LPCSTR pszFile);
HRESULT WINAPI GetICifRWFileFromFile(ICifRWFile **, LPCSTR pszFile);
#ifdef __cplusplus
}
#endif
#define _INSENG_H_
#endif //