81 lines
2.1 KiB
C
81 lines
2.1 KiB
C
|
#pragma once
|
||
|
|
||
|
/*-----------------------------------------------------------------------------
|
||
|
Dynamic Link Library Redirection (contributor)
|
||
|
|
||
|
The dllredir contributor is unique in that it does most of the work
|
||
|
for installation.
|
||
|
-----------------------------------------------------------------------------*/
|
||
|
|
||
|
#include "FusionArray.h"
|
||
|
#include "FusionHandle.h"
|
||
|
|
||
|
class CDllRedir
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CDllRedir();
|
||
|
~CDllRedir();
|
||
|
|
||
|
VOID ContributorCallback(PACTCTXCTB_CALLBACK_DATA Data);
|
||
|
|
||
|
BOOL
|
||
|
BeginInstall(
|
||
|
PACTCTXCTB_CALLBACK_DATA Data
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InstallManifest(
|
||
|
DWORD dwManifestOperationFlags,
|
||
|
PCACTCTXCTB_ASSEMBLY_CONTEXT AssemblyContext
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InstallCatalog(
|
||
|
DWORD dwManifestOperationFlags,
|
||
|
const CBaseStringBuffer &SourceManifest,
|
||
|
const CBaseStringBuffer &DestinationManifest,
|
||
|
PCACTCTXCTB_ASSEMBLY_CONTEXT AssemblyContext
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InstallFile(
|
||
|
PACTCTXCTB_CALLBACK_DATA Data,
|
||
|
const CBaseStringBuffer &FileNameBuffer
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
AttemptInstallPolicies(
|
||
|
const CBaseStringBuffer &m_strTempRootSlash,
|
||
|
const CBaseStringBuffer &moveDestination,
|
||
|
const BOOL fReplaceExisting,
|
||
|
OUT BOOL &fFoundPolicesToInstall
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
EndInstall(
|
||
|
PACTCTXCTB_CALLBACK_DATA Data
|
||
|
);
|
||
|
|
||
|
PSTRING_SECTION_GENERATION_CONTEXT m_SSGenContext;
|
||
|
|
||
|
// these are files the callback said it would copy itself,
|
||
|
// we check that this happens before EndAssemblyInstall does the
|
||
|
// rest of its work
|
||
|
typedef CFusionArray<CFusionFilePathAndSize> CQueuedFileCopies;
|
||
|
CQueuedFileCopies m_queuedFileCopies;
|
||
|
|
||
|
// For partial atomicity, we install everything here, which is
|
||
|
// like \Winnt\SideBySide\{Guid} and then to commit we enumerate
|
||
|
// it and move all the directories in it up one level, and delete it
|
||
|
CStringBuffer m_strTempRootSlash;
|
||
|
|
||
|
// This must be seperately heap allocated.
|
||
|
// It should delete itself in Close or Cancel.
|
||
|
CRunOnceDeleteDirectory *m_pRunOnce;
|
||
|
|
||
|
private:
|
||
|
CDllRedir(const CDllRedir &);
|
||
|
void operator =(const CDllRedir &);
|
||
|
};
|