Windows2003-3790/inetcore/setup/active/asctrls/asinsctl.h
2020-09-30 16:53:55 +02:00

246 lines
9.8 KiB
C++

#ifndef _ASINSCTL_H
#define _ASINSCTL_H
#include "ipserver.h"
#include "ctrlobj.h"
#include "internet.h"
#include "iasctrls.h"
#include "inseng.h"
#include "progdlg.h"
#define RESID_TOOLBOX_BITMAP 1
#define FINALIZE_DOREBOOT 0x00000001
#define FINALIZE_NOREBOOTPROMPT 0x00000002
#define PROCESSCOMPONENT_DELAYREBOOT 0x00000001
#define PROCESSCOMPONENT_NOPROGRESSUI 0x00000002
#define PROCESSCOMPONENT_NOSUMMARYUI 0x00000004
#define PROCESSCOMPONENT_NOINSTALLUI 0x00000080
#define MAX_URLS 5
#define ERROR_STRING_SIZE 2048
#define ERROR_STRING_INCREMENT 2048
//---------------------------------------------
// AUTORUN SETTINGS FOR WIN
//---------------------------------------------
#define WINDOWS_DEFAULT_AUTOPLAY_VALUE 0x095
#define WINDOWS_AUTOPLAY_OFF 0x0FF
typedef struct
{
DWORD dwSize;
DWORD dwStatus;
DWORD dwSubstatus;
DWORD dwPhase;
DWORD dwResult;
BSTR strID;
BSTR strName;
BSTR strString;
BSTR chWin;
BSTR chInstall;
BSTR chDL;
DWORD dwWin;
DWORD dwInstall;
DWORD dwDL;
} CALLBACK_PARAMS;
// Global needed in CInstallEngine for suppressing CD Auto Splash.
extern UINT g_uCDAutorunMsg;
extern unsigned long g_ulOldAutorunSetting;
unsigned long SetAutorunSetting(unsigned long ulNewSettting);
//=--------------------------------------------------------------------------=
// CInstallEngine
//=--------------------------------------------------------------------------=
// our control.
//
class CInstallEngineCtl : public COleControl, public IInstallEngineCtl, public IInstallEngineCallback, public ISupportErrorInfo
{
friend class CProgressDlg;
friend INT_PTR CALLBACK ProgressDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
friend DWORD WINAPI DoInstall(LPVOID pv);
friend INT_PTR CALLBACK LocationDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
friend INT_PTR CALLBACK DiskSpaceDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
public:
// IUnknown methods
//
DECLARE_STANDARD_UNKNOWN();
// IDispatch methods
//
DECLARE_STANDARD_DISPATCH();
// ISupportErrorInfo methods
//
DECLARE_STANDARD_SUPPORTERRORINFO();
// IInstallEngine methods
//
STDMETHOD(get_ReadyState)(THIS_ long FAR* thestate);
STDMETHOD(SetCifFile)(THIS_ BSTR strCabName, BSTR strCifName);
STDMETHOD(put_BaseUrl)(THIS_ BSTR strBaseUrl);
STDMETHOD(put_DownloadDir)(THIS_ BSTR strDownloadDir);
STDMETHOD(SetAction)(THIS_ BSTR ComponentID, long action, long *lResult);
STDMETHOD(IsComponentInstalled)(THIS_ BSTR ComponentID, long *lResult);
STDMETHOD(ProcessComponents)(THIS_ long lFlag);
STDMETHOD(get_Size)(THIS_ BSTR ComponentID, long FAR* thestate);
STDMETHOD(get_DisplayName)(THIS_ BSTR ComponentID, BSTR *name);
STDMETHOD(Abort)(THIS_ long lFlags);
STDMETHOD(get_TotalDownloadSize)(THIS_ long FAR* totalsize);
STDMETHOD(get_TotalDependencySize)(THIS_ long FAR* totaldepsize);
STDMETHOD(FinalizeInstall)(THIS_ long lFlag);
STDMETHOD(get_EngineStatus)(THIS_ long FAR* theenginestatus);
STDMETHOD(HandleEngineProblem)(THIS_ long lFlag);
STDMETHOD(CheckFreeSpace)(THIS_ long lPad, long FAR* lEnough);
STDMETHOD(SetLocalCif)(THIS_ BSTR strCif, long FAR* lResult);
STDMETHOD(SetSitesFile)(THIS_ BSTR strUrl, BSTR strRegion, BSTR strLocale, long FAR* lResult);
// Install engine callbacks
STDMETHOD(OnStartInstall)(DWORD dwDLSize, DWORD dwInstallSize);
STDMETHOD(OnStartComponent)(LPCSTR pszID, DWORD dwDLSize, DWORD dwInstallSize, LPCSTR pszName);
STDMETHOD(OnComponentProgress)(LPCSTR pszID, DWORD dwPhase, LPCSTR pszName, LPCSTR pszMsgString, ULONG progress, ULONG dwMax );
STDMETHOD(OnStopComponent)(LPCSTR pszID, HRESULT hrError, DWORD dwPhase, LPCSTR pszString, DWORD dwStatus);
STDMETHOD(OnStopInstall)(HRESULT hrError, LPCSTR szError, DWORD dwStatus);
STDMETHOD(OnEngineStatusChange)(DWORD dwStatus, DWORD substatus);
STDMETHOD(OnEngineProblem)(DWORD dwProblem, LPDWORD pdwAction);
// OLE Control stuff follows:
//
CInstallEngineCtl(IUnknown *pUnkOuter, BOOL *pbSuccess);
virtual ~CInstallEngineCtl();
// static creation function. all controls must have one of these!
//
static IUnknown *Create(IUnknown *);
// Helper functions to fire our events
void _FireOnStartInstallEvent(DWORD dwTotalSize);
void _FireOnStartComponentEvent(LPCSTR pszID, DWORD dwTotalSize, LPCSTR pszName);
void _FireOnStopComponentEvent(LPCSTR pszID, HRESULT hrError, DWORD dwPhase, LPCSTR pszString, DWORD dwStatus);
void _FireOnStopInstallEvent(HRESULT hrError, LPCSTR szError, DWORD dwStatus);
void _FireEngineStatusChange(DWORD dwEngineStatus, DWORD substatus);
void _FireOnEngineProblem(DWORD dwProblem);
void _FireOnComponentProgressEvent(LPCSTR pszID, DWORD dwPhase, LPCSTR pszString, LPCSTR pszMsgString, ULONG progress, ULONG themax);
void _FireOnComponentProgress(DWORD lPhase, DWORD lSoFar, DWORD lTotal);
void _FireOnStartInstallExEvent(DWORD dwDLSize, DWORD dwInsSize);
private:
// overridables that the control must implement.
//
STDMETHOD(LoadBinaryState)(IStream *pStream);
STDMETHOD(SaveBinaryState)(IStream *pStream);
STDMETHOD(LoadTextState)(IPropertyBag *pPropertyBag, IErrorLog *pErrorLog);
STDMETHOD(SaveTextState)(IPropertyBag *pPropertyBag, BOOL fWriteDefault);
STDMETHOD(OnDraw)(DWORD dvAspect, HDC hdcDraw, LPCRECTL prcBounds, LPCRECTL prcWBounds, HDC hicTargetDev, BOOL fOptimize);
STDMETHOD(FreezeEvents)(BOOL bFreeze);
// Window stuff
virtual LRESULT WindowProc(UINT msg, WPARAM wParam, LPARAM lParam);
virtual BOOL RegisterClassData(void);
// internal QI
virtual HRESULT InternalQueryInterface(REFIID, void **);
// before and after window is created
virtual void BeforeCreateWindow(void);
virtual BOOL AfterCreateWindow(void);
void _InitProgressDialog();
void _DoInstall();
HRESULT _CheckInstallPath(BOOL *pfNeedDownload);
BOOL _PathIsIEInstallPoint(LPCSTR pszPath);
HRESULT _PickWebSites(LPCSTR pszSites, LPCSTR pszLocale, LPCSTR pszRegion, BOOL bKeepExisting);
BOOL _IsEnoughSpace(LPSTR szSpace1, DWORD dwSize1, LPSTR szSpace2, DWORD dwSize2,
LPSTR szSpace3, DWORD dwSize3);
HRESULT _CheckForDiskSpace();
HRESULT _ShowDiskSpaceDialog();
void _FireCancel(DWORD dwCancel);
LONG _OpenJITKey(HKEY *hKey, REGSAM samAttr);
void _DeleteURLList();
void _WriteURLList();
void _WriteRegionToReg(LPSTR szRegion);
void _PickRegionAndFirstSite(IDownloadSite **ppISite, UINT uNumSites, LPSTR pszRegion, UINT *puFirstSite);
void _PickRandomSites(IDownloadSite **ppISite, BYTE *pPicks, UINT uNumSites, UINT uNumToPick, LPSTR pszRegion);
void MarkJITInstall();
BOOL _fInOnEngineProblem:1;
BOOL _fEventToFire:1;
BOOL _fNeedReboot:1;
BOOL _fLocalCifSet:1;
BOOL _fReconcileCif:1;
BOOL _fDoingIEInstall:1;
BOOL _fInstalling:1;
BOOL _fJITInstall:1;
DWORD _dwOldStatus;
DWORD _dwAction;
DWORD _dwInstallStatus;
UINT _uInstallMode;
UINT _uInstallPad;
HRESULT _hResult;
DWORD _dwSavedEngineStatus;
DWORD _dwSavedSubStatus;
DWORD _dwFreezeEvents;
DWORD _uAllowGrovel;
BSTR _strCurrentID;
BSTR _strCurrentName;
BSTR _strCurrentString;
DWORD m_readyState;
LPSTR _pszErrorString;
int _iErrorStringSize;
DWORD _dwProcessComponentsFlags;
HICON _hIcon;
DWORD _dwLastPhase;
CProgressDlg *_pProgDlg;
IInstallEngine2 *_pinseng;
DWORD _dwMSTrustKey;
HANDLE _hDone;
UINT _uCurrentUrl;
LPSTR _rpszUrlList[MAX_URLS];
char _szCifCab[MAX_PATH];
char _szCifFile[MAX_PATH];
char _szDownloadDir[MAX_PATH];
BOOL _bCancelPending;
BOOL _bDeleteURLList;
BOOL _bNewWebSites;
};
DWORD WINAPI DoInstall(LPVOID pv);
DEFINE_CONTROLOBJECT(InstallEngineCtl, // Name of object
&CLSID_InstallEngineCtl, // CLSID of object
"InstallEngineCtl", // ProgID
CInstallEngineCtl::Create, // Static create function
1, // Version
&IID_IInstallEngineCtl, // Primary dispatch
NULL, // name of help file
&DIID_DInstallEngineCtlEvents, // event interface
OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_RECOMPOSEONRESIZE|OLEMISC_CANTLINKINSIDE|OLEMISC_INSIDEOUT,
0, // Activation policy
RESID_TOOLBOX_BITMAP, // toolbox id
"InstallEngineCtlWndClass", // Window class
0, // number of pages
NULL, // array of property pages
0, // Number of verbs
NULL); // Array of verbs
#define OBJECT_INSTALLENGINECTL 0
#endif