#pragma once #ifndef __ADLMGR_H_INCLUDED__ #define __ADLMGR_H_INCLUDED__ #include "dbglog.h" #define PREFIX_HTTP L"http://" #define BINPATH_LIST_DELIMITER L';' #define SHADOW_COPY_DIR_DELIMITER L';' extern const LPWSTR g_wzProbeExtension; class CDebugLog; class CHashNode; class CAsmDownloadMgr : public IDownloadMgr, public ICodebaseList { public: CAsmDownloadMgr(IAssemblyName *pNameRefSource, IApplicationContext *pAppCtx, ICodebaseList *pCodebaseList, CDebugLog *pdbglog, LONGLONG llFlags); virtual ~CAsmDownloadMgr(); static HRESULT Create(CAsmDownloadMgr **ppadm, IAssemblyName *pNameRefSource, IApplicationContext *pAppCtx, ICodebaseList *pCodebaseList, LPCWSTR wzBTOCodebase, CDebugLog *pdbglog, void *pvReserved, LONGLONG llFlags); // IUnknown methods STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IDownloadMgr methods STDMETHODIMP PreDownloadCheck(void **ppv); STDMETHODIMP PreDownloadCheck2(void **ppv); STDMETHODIMP DoSetup(LPCWSTR wzSourceUrl, LPCWSTR wzFilePath, IUnknown **ppUnk); STDMETHODIMP ProbeFailed(IUnknown **ppUnk); STDMETHODIMP ProbeFailed2(IUnknown **ppUnk); STDMETHODIMP IsDuplicate(IDownloadMgr *pIDLMgr); STDMETHODIMP_(BOOL) LogResult(); // ICodebaseList methods STDMETHODIMP AddCodebase(LPCWSTR wzCodebase); STDMETHODIMP RemoveCodebase(DWORD dwIndex); STDMETHODIMP GetCodebase(DWORD dwIndex, LPWSTR wzCodebase, DWORD *pcbCodebase); STDMETHODIMP GetCount(DWORD *pdwCount); STDMETHODIMP RemoveAll(); // Helpers STDMETHODIMP GetPolicyRef(IAssemblyName **ppName); private: HRESULT Init(LPCWSTR wzBTOCodebase, void *pvReserved); // Helpers HRESULT SetDefaultSID(FILETIME ftLastModified); HRESULT LookupFromGlobalCache(LPASSEMBLY *ppAsmOut); HRESULT DoSetupRFS(LPCWSTR wzFilePath, FILETIME *pftLastModified, LPCWSTR wzSourceUrl, BOOL bWhereRefBind); HRESULT DoSetupPushToCache(LPCWSTR wzFilePath, LPCWSTR wzSourceUrl, FILETIME *pftLastModified, BOOL bWhereRefBind, BOOL bCopyModules); #ifndef NEW_POLICY_CODE HRESULT GetCodebaseHint(LPWSTR wzCodebaseHint, DWORD *pdwSize); #endif HRESULT GetBinPathHint(BOOL bIsShared, LPWSTR *ppwzBinPathHint); HRESULT SetupCAB(LPCWSTR wzFilePath, LPCWSTR wzSourceUrl, BOOL bWhereRefBind); HRESULT ShadowCopyDirCheck(LPCWSTR wzSourceURL); HRESULT CheckRunFromSource(LPCWSTR wzSourceUrl, BOOL *pbRunFromSource); HRESULT CheckMSIInstallAvailable() const; HRESULT MSIInstallAssembly(LPCWSTR wzContext, LPCWSTR wzSourceUrl, IAssembly **ppAsm); HRESULT SetupMSI(LPCWSTR wzFilePath); // Probing URL generation HRESULT ConstructCodebaseList(LPCWSTR wzPolicyCodebase); HRESULT SetupDefaultProbeList(LPCWSTR wzAppBaseStr, LPCWSTR wzProbeFileName, ICodebaseList *pCodebaseList); HRESULT PrepBinPaths(BOOL bIsPartial, BOOL bIsShared, LPCWSTR wzNameProbe, LPWSTR *ppwzUserBinPathList); HRESULT PrepPrivateBinPath(LPCWSTR wzNameProbe, LPWSTR *ppwzPrivateBinPath); HRESULT PrepSharedBinPath(LPWSTR *ppwzSharedBinPath); HRESULT ConcatenateBinPaths(LPCWSTR pwzPath1, LPCWSTR pwzPath2, LPWSTR *ppwzOut); HRESULT ApplyHeuristics(const WCHAR *pwzHeuristics[], const unsigned int uiNumHeuristics, WCHAR *pwzValues[], LPCWSTR wzPrefix, LPCWSTR wzExtension, ICodebaseList *pCodebaseList, List aHashList[]); HRESULT ExtractSubstitutionVars(WCHAR *pwzValues[]); HRESULT ExpandVariables(LPCWSTR pwzHeuristic, WCHAR *pwzValues[], LPWSTR wzBuf, int iMaxLen); LPWSTR GetNextDelimitedString(LPWSTR *ppwzList, WCHAR wcDelimiter); HRESULT GenerateProbeUrls(LPCWSTR wzBinPathList, LPCWSTR wzAppBase, LPCWSTR wzExt, LPWSTR wzValues[], ICodebaseList *pCodebaseList, BOOL bIsShared); HRESULT CheckProbeUrlDupe(List paHashList[], LPCWSTR pwzSource) const; DWORD HashString(LPCWSTR pwzSource) const; HRESULT CreateAssembly2(LPCWSTR szPath, LPCWSTR pszURL, FILETIME *pftLastModTime, BOOL bRunFromSource, IAssembly **ppAsmOut); private: DWORD _dwSig; ULONG _cRef; BOOL _bDoGlobalCacheLookup; LONGLONG _llFlags; LPWSTR _wzBTOCodebase; LPWSTR _wzSharedPathHint; IAssemblyName *_pNameRefSource; IAssemblyName *_pNameRefPolicy; IApplicationContext *_pAppCtx; IAssembly *_pAsm; ICodebaseList *_pCodebaseList; CDebugLog *_pdbglog; }; HRESULT CreateAssembly(IApplicationContext *pAppCtx, IAssemblyName* pNameRef, IAssemblyName *pNameRefPolicy,LPCOLESTR szPath, LPCOLESTR pszURL, FILETIME *pftLastModTime, BOOL bRunFromSource, CDebugLog *pdbglog, IAssembly **ppAsmOut); HRESULT CheckValidAsmLocation(IAssemblyName *pNameDef, LPCWSTR wzSourceUrl, IApplicationContext *pAppCtx, CDebugLog *pdbglog); #endif