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.
214 lines
6.5 KiB
214 lines
6.5 KiB
#ifndef _SOFTDIST_H_
|
|
#define _SOFTDIST_H_
|
|
|
|
#ifdef __cplusplus
|
|
|
|
typedef struct tagDISTUNITINST {
|
|
|
|
DWORD dwInstalledVersionMS;
|
|
DWORD dwInstalledVersionLS;
|
|
|
|
} DISTUNITINST, *LPDISTUNITINST;
|
|
|
|
|
|
typedef struct tagDISTUNITADVT {
|
|
|
|
DWORD dwVersionMS;
|
|
DWORD dwVersionLS;
|
|
|
|
LPCSTR pszTitle;
|
|
LPCSTR pszAbstract;
|
|
LPCSTR pszHREF;
|
|
|
|
} DISTUNITADVT, *LPDISTUNITADVT;
|
|
|
|
/*
|
|
STDAPI
|
|
GetDistributionUnitAdvertisement(
|
|
LPCWSTR szDistUnit,
|
|
LPDISTUNITINST *ppdunitinst,
|
|
LPDISTUNITADVT *ppdunitadvt,
|
|
LPVOID pvReserved, // Must be NULL
|
|
DWORD flags);
|
|
*/
|
|
|
|
// SoftDist tag handler for CDF
|
|
|
|
#define CBH_FLAGS_DOWNLOADED 0x1
|
|
#define CBH_FLAGS_MAIN_CODEBASE 0x2
|
|
|
|
class CCodeBaseHold {
|
|
public:
|
|
CCodeBaseHold() {
|
|
wszCodeBase = NULL;
|
|
dwSize = 0;
|
|
bHREF = FALSE;
|
|
wszDLGroup = NULL;
|
|
dwFlags = 0;
|
|
}
|
|
|
|
~CCodeBaseHold() {
|
|
if (wszCodeBase) {
|
|
delete wszCodeBase;
|
|
}
|
|
if (wszDLGroup) {
|
|
delete wszDLGroup;
|
|
}
|
|
}
|
|
|
|
LPWSTR wszCodeBase;
|
|
DWORD dwSize;
|
|
BOOL bHREF;
|
|
LPWSTR wszDLGroup;
|
|
DWORD dwFlags;
|
|
};
|
|
|
|
// Helper prototypes
|
|
BOOL AreAllLanguagesPresent(LPCSTR lpszLang1, LPCSTR lpszLang2);
|
|
HRESULT GetStyleFromString(LPSTR szStyle, LPDWORD lpdwStyle);
|
|
HRESULT CheckLanguage(LCID localeID, LPTSTR szLanguages);
|
|
|
|
class CSoftDist : public ISoftDistExt {
|
|
|
|
public:
|
|
CSoftDist();
|
|
~CSoftDist();
|
|
|
|
// IUnknown methods
|
|
STDMETHODIMP QueryInterface(REFIID riid,void ** ppv);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
// ISoftDistExt methods
|
|
STDMETHODIMP ProcessSoftDist(LPCWSTR szCDFURL, IXMLElement *pSoftDistElement, LPSOFTDISTINFO);
|
|
STDMETHODIMP GetFirstCodeBase(LPWSTR *szCodeBase, DWORD *dwMaxSize);
|
|
STDMETHODIMP GetNextCodeBase(LPWSTR *szCodeBase, DWORD *dwMaxSize);
|
|
STDMETHODIMP AsyncInstallDistributionUnit(IBindCtx *pbc, LPVOID pvReserved, DWORD flags, LPCODEBASEHOLD lpcbh);
|
|
|
|
// helper methods for GetSoftwareUpdateInfo
|
|
HRESULT GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi );
|
|
HRESULT SetSoftwareUpdateAdvertisementState( LPCWSTR szDistUnit,
|
|
DWORD dwAdState,
|
|
DWORD dwAdvertisedVersionMS,
|
|
DWORD dwAdvertisedVersionLS );
|
|
// Other functions
|
|
STDMETHODIMP Logo3Download(LPWSTR szCodeBase);
|
|
STDMETHODIMP Logo3DownloadNext();
|
|
STDMETHODIMP Logo3DownloadRedundant();
|
|
|
|
private:
|
|
|
|
HRESULT IsLocallyInstalled(LPCWSTR szDistUnit, DWORD dwVersionMS, DWORD dwVersionLS, LPCSTR szLanguages, DWORD style);
|
|
HRESULT IsICDLocallyInstalled(LPCWSTR szDistUnit, DWORD dwVersionMS, DWORD dwVersionLS, LPCSTR szLanguages);
|
|
HRESULT IsActSetupLocallyInstalled(LPCWSTR szDistUnit, DWORD dwVersionMS, DWORD dwVersionLS, LPCSTR szLanguages);
|
|
HRESULT IsLogo3LocallyInstalled(LPCWSTR szDistUnit, DWORD dwVersionMS, DWORD dwVersionLS, LPCSTR szLanguages);
|
|
|
|
HRESULT IsLogo3Advertised(LPBOOL lpfIsPrecached, LPBOOL lpfIsAuthorizedCDF);
|
|
HRESULT IsICDAdvertised(LPBOOL lpfIsPrecached, LPBOOL lpfIsAuthorizedCDF);
|
|
HRESULT IsActSetupAdvertised(LPBOOL lpfIsPrecached, LPBOOL lpfIsAuthorizedCDF);
|
|
HRESULT IsAdvertised(LPBOOL lpfIsPrecached, LPBOOL lpfIsAuthorizedCDF);
|
|
|
|
HRESULT Advertise(BOOL bFullAdvt);
|
|
HRESULT ICDAdvertise(BOOL bFullAdvt);
|
|
HRESULT ActSetupAdvertise(BOOL bFullAdvt);
|
|
HRESULT Logo3Advertise(BOOL bFullAdvt);
|
|
|
|
HRESULT CheckDependency(IXMLElement *pSoftDist);
|
|
HRESULT CheckConfig(IXMLElement *pSoftDist);
|
|
|
|
BOOL IsCDFNewerVersion(DWORD dwCurMS, DWORD dwCurLS);
|
|
BOOL IsAuthorizedCDF(HKEY hkRootDU, BOOL bOptional=FALSE);
|
|
|
|
BOOL IsAnyInstalled() {
|
|
|
|
return (m_distunitinst.dwInstalledVersionMS | m_distunitinst.dwInstalledVersionLS);
|
|
}
|
|
|
|
LPCWSTR GetMainDistUnit() const { return m_szDistUnit;}
|
|
LPCSTR GetCDF() const { return m_szCDFURL;}
|
|
|
|
HRESULT PrepSoftwareUpdate( LPCWSTR szDistUnit, DWORD *pdwStyle );
|
|
|
|
#ifdef WX86
|
|
CMultiArch * GetMultiArch() { return &m_MultiArch; }
|
|
#endif
|
|
|
|
DWORD m_cRef;
|
|
|
|
LPWSTR m_szDistUnit;
|
|
|
|
DWORD m_dwVersionMS;
|
|
DWORD m_dwVersionLS;
|
|
|
|
DWORD m_dwVersionAdvertisedMS;
|
|
DWORD m_dwVersionAdvertisedLS;
|
|
DWORD m_dwAdState;
|
|
|
|
DWORD m_Style;
|
|
|
|
LPSTR m_szCDFURL;
|
|
LPSTR m_szTitle;
|
|
LPSTR m_szLanguages;
|
|
|
|
LPSTR m_szAbstract;
|
|
LPSTR m_szHREF;
|
|
|
|
CList<CCodeBaseHold*,CCodeBaseHold*> m_cbh;
|
|
POSITION m_curPos;
|
|
|
|
ISoftDistExt *m_sdMSInstall; // Darwin interface
|
|
|
|
DISTUNITINST m_distunitinst;
|
|
IBindStatusCallback *m_pClientBSC;
|
|
LPWSTR m_szBaseURL;
|
|
#ifdef WX86
|
|
CMultiArch m_MultiArch;
|
|
#endif
|
|
|
|
};
|
|
|
|
class CActiveSetupBinding : IBinding
|
|
{
|
|
friend DWORD StartActiveSetup(void *dwArg);
|
|
|
|
public:
|
|
CActiveSetupBinding(IBindCtx *pbc, IBindStatusCallback *pbsc, LPWSTR szCodeBase,
|
|
LPWSTR szDistUnit, HRESULT *hr);
|
|
~CActiveSetupBinding();
|
|
|
|
// IUnknown methods
|
|
STDMETHODIMP QueryInterface(REFIID riid,void ** ppv);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
// IBinding methods
|
|
STDMETHOD(Abort)( void);
|
|
STDMETHOD(Suspend)( void);
|
|
STDMETHOD(Resume)( void);
|
|
STDMETHOD(SetPriority)(LONG nPriority);
|
|
STDMETHOD(GetPriority)(LONG *pnPriority);
|
|
STDMETHOD(GetBindResult)(CLSID *pclsidProtocol, DWORD *pdwResult, LPWSTR *pszResult,DWORD *pdwReserved);
|
|
|
|
private:
|
|
void StartActiveSetup(void);
|
|
void DoCleanUp(DWORD dwExitCode);
|
|
BSTR GetErrorMessage(HRESULT hr);
|
|
HRESULT SaveHresult(HRESULT hr);
|
|
HRESULT SetDefaultDownloadSite(LPSTR szSite);
|
|
|
|
IBindStatusCallback *m_pbsc;
|
|
IBindCtx *m_pbc;
|
|
LPSTR m_szCodeBase;
|
|
CHAR m_szActSetupPath[MAX_PATH+1];
|
|
LPSTR m_szDistUnit;
|
|
|
|
HANDLE m_hWaitThread;
|
|
PROCESS_INFORMATION m_piChild;
|
|
|
|
DWORD dwThreadID;
|
|
DWORD m_dwRef;
|
|
BOOL fSilent;
|
|
};
|
|
|
|
#endif
|
|
#endif // _SOFTDIST_H_
|