Leaked source code of windows server 2003
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

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