windows-nt/Source/XPSP1/NT/base/win32/fusion/inc/adlmgr.h

145 lines
6.4 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#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<CHashNode *> 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<CHashNode *> 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