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.
91 lines
2.6 KiB
91 lines
2.6 KiB
#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() : m_SSGenContext(NULL), m_pRunOnce(NULL) { }
|
|
~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;
|
|
|
|
struct _ContributorCallbackLocalsStruct
|
|
{
|
|
CSmallStringBuffer DllUnderSystem32;
|
|
CSmallStringBuffer FileNameBuffer;
|
|
CSmallStringBuffer LoadFromBuffer;
|
|
CSmallStringBuffer HashValueBuffer;
|
|
#ifdef _WIN64
|
|
CSmallStringBuffer DllUnderSyswow64;
|
|
#endif
|
|
} ContributorCallbackLocals;
|
|
|
|
private:
|
|
CDllRedir(const CDllRedir &);
|
|
void operator =(const CDllRedir &);
|
|
};
|