windows-nt/Source/XPSP1/NT/base/win32/fusion/sxs/policystatement.h
2020-09-26 16:20:57 +08:00

78 lines
1.9 KiB
C++

#if !defined(_FUSION_DLL_WHISTLER_POLICYSTATEMENT_H_INCLUDED_)
#define _FUSION_DLL_WHISTLER_POLICYSTATEMENT_H_INCLUDED_
#pragma once
#include "stdinc.h"
#include "fusionbuffer.h"
#include "fusiondequelinkage.h"
#include "fusiondeque.h"
#include <sxsapi.h>
class CPolicyStatementRedirect
{
public:
inline CPolicyStatementRedirect() { }
inline ~CPolicyStatementRedirect() { }
BOOL Initialize(
const CBaseStringBuffer &rbuffFromVersionRange,
const CBaseStringBuffer &rbuffToVersion,
bool &rfValid
);
BOOL TryMap(
const ASSEMBLY_VERSION &rav,
SIZE_T cchBuffer,
PWSTR pBuffer,
SIZE_T &rcchWritten,
bool &rfMapped
);
BOOL CheckForOverlap(
const CPolicyStatementRedirect &rRedirect,
bool &rfOverlaps
);
CDequeLinkage m_leLinks;
ASSEMBLY_VERSION m_avFromMin;
ASSEMBLY_VERSION m_avFromMax;
SIZE_T m_cchNewVersion;
WCHAR m_rgwchNewVersion[(4 * 5) + (3 * 1) + 1];
private:
CPolicyStatementRedirect(const CPolicyStatementRedirect &r);
void operator =(const CPolicyStatementRedirect &r);
};
class CPolicyStatement
{
public:
inline CPolicyStatement() { }
inline ~CPolicyStatement() { m_Redirects.Clear<CPolicyStatement>(this, &CPolicyStatement::ClearDequeEntry); }
BOOL Initialize();
BOOL AddRedirect(
const CBaseStringBuffer &rbuffFromVersion,
const CBaseStringBuffer &rbuffToVersion,
bool &rfValid
);
BOOL ApplyPolicy(
PASSEMBLY_IDENTITY AssemblyIdentity,
bool &rfPolicyApplied
);
VOID ClearDequeEntry(CPolicyStatementRedirect *p) const { FUSION_DELETE_SINGLETON(p); }
CDeque<CPolicyStatementRedirect, FIELD_OFFSET(CPolicyStatementRedirect, m_leLinks)> m_Redirects;
private:
CPolicyStatement(const CPolicyStatement &r);
void operator =(const CPolicyStatement &r);
};
#endif // !defined(_FUSION_DLL_WHISTLER_POLICYSTATEMENT_H_INCLUDED_)