#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 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 &); };