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.
116 lines
3.0 KiB
116 lines
3.0 KiB
#pragma once
|
|
|
|
|
|
class CCabinetData
|
|
{
|
|
PRIVATIZE_COPY_CONSTRUCTORS(CCabinetData);
|
|
bool m_fDoExtraction;
|
|
CStringBuffer m_sbBaseExpansionPath;
|
|
BOOL m_fReplaceExisting;
|
|
|
|
public:
|
|
CCabinetData() { Initialize(); }
|
|
~CCabinetData() { }
|
|
|
|
bool IsExtracting() { return m_fDoExtraction; }
|
|
|
|
//
|
|
// Array of assemblies extracted
|
|
//
|
|
CFusionArray<CStringBuffer> m_AssembliesExtracted;
|
|
const CBaseStringBuffer& BasePath() const { return m_sbBaseExpansionPath; }
|
|
|
|
void SetReplaceExisting(BOOL fReplaceExisting)
|
|
{
|
|
this->m_fReplaceExisting = fReplaceExisting;
|
|
}
|
|
|
|
BOOL GetReplaceExisting() const
|
|
{
|
|
return this->m_fReplaceExisting;
|
|
}
|
|
|
|
void Initialize()
|
|
{
|
|
this->m_fReplaceExisting = FALSE;
|
|
this->m_pfnShouldExtractThisFileFromCabCallback = NULL;
|
|
this->m_pvShouldExtractThisFileFromCabCallbackContext = NULL;
|
|
this->m_fDoExtraction = false;
|
|
this->m_sbBaseExpansionPath.Clear();
|
|
this->sxs_FdiExtractionNotify_fdintCOPY_FILE.Clear();
|
|
}
|
|
|
|
BOOL Initialize(const CBaseStringBuffer& strBasePath, bool fActuallyExtract = false)
|
|
{
|
|
FN_PROLOG_WIN32
|
|
IFW32FALSE_EXIT(m_AssembliesExtracted.Win32Reset(CFusionArray<CStringBuffer>::eResetModeZeroSize));
|
|
IFW32FALSE_EXIT(m_sbBaseExpansionPath.Win32Assign(strBasePath));
|
|
m_fDoExtraction = fActuallyExtract;
|
|
FN_EPILOG
|
|
}
|
|
|
|
struct _CopyFileLocalsStruct
|
|
{
|
|
void Clear()
|
|
{
|
|
TempBuffer.Clear();
|
|
TempBuffer2.Clear();
|
|
}
|
|
|
|
CStringBuffer TempBuffer;
|
|
CStringBuffer TempBuffer2;
|
|
} sxs_FdiExtractionNotify_fdintCOPY_FILE;
|
|
|
|
void Clear()
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
typedef
|
|
BOOL (*SXSP_PFN_SHOULD_EXTRACT_THIS_FILE_FROM_CAB_CALLBACK)(
|
|
const CBaseStringBuffer &PathInCab,
|
|
bool &rfShouldExtract,
|
|
PVOID Context
|
|
);
|
|
|
|
SXSP_PFN_SHOULD_EXTRACT_THIS_FILE_FROM_CAB_CALLBACK m_pfnShouldExtractThisFileFromCabCallback;
|
|
PVOID m_pvShouldExtractThisFileFromCabCallbackContext;
|
|
};
|
|
|
|
|
|
BOOL
|
|
SxspRecoverAssemblyFromCabinet(
|
|
const CBaseStringBuffer &CabinetPath,
|
|
const CBaseStringBuffer &AssemblyIdentity,
|
|
PSXS_INSTALLW pInstall);
|
|
|
|
|
|
BOOL
|
|
SxspExpandCabinetIntoTemp(
|
|
DWORD dwFlags,
|
|
const CBaseStringBuffer& CabinetPath,
|
|
CImpersonationData& ImpersonateData,
|
|
CCabinetData* pCabinetData = NULL
|
|
);
|
|
|
|
|
|
class CAssemblyInstall;
|
|
|
|
BOOL
|
|
SxspInstallAsmsDotCabEtAl(
|
|
DWORD dwFlags,
|
|
CAssemblyInstall &AssemblyContext,
|
|
const CBaseStringBuffer &CabinetBasePath,
|
|
CFusionArray<CStringBuffer> *pAssembliesToInstall
|
|
);
|
|
|
|
class CSxspInstallAsmsDotCabEtAlLocals;
|
|
|
|
BOOL
|
|
SxspInstallAsmsDotCabEtAl(
|
|
DWORD dwFlags,
|
|
CAssemblyInstall &AssemblyContext,
|
|
const CBaseStringBuffer &CabinetBasePath,
|
|
CFusionArray<CStringBuffer> *pAssembliesToInstall,
|
|
CSxspInstallAsmsDotCabEtAlLocals & Locals
|
|
);
|