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.
118 lines
2.3 KiB
118 lines
2.3 KiB
/*
|
|
Copyright (c) Microsoft Corporation
|
|
*/
|
|
#include "stdinc.h"
|
|
#include "componentpolicytable.h"
|
|
|
|
BOOL
|
|
CComponentPolicyTableHelper::HashKey(
|
|
PCASSEMBLY_IDENTITY AssemblyIdentity,
|
|
ULONG &rulPseudoKey
|
|
)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
FN_TRACE_WIN32(fSuccess);
|
|
|
|
PARAMETER_CHECK(AssemblyIdentity != NULL);
|
|
|
|
IFW32FALSE_EXIT(::SxsHashAssemblyIdentity(0, AssemblyIdentity, &rulPseudoKey));
|
|
|
|
fSuccess = TRUE;
|
|
Exit:
|
|
return fSuccess;
|
|
}
|
|
|
|
BOOL
|
|
CComponentPolicyTableHelper::CompareKey(
|
|
PCASSEMBLY_IDENTITY keyin,
|
|
const PCASSEMBLY_IDENTITY &rkeystored,
|
|
bool &rfMatch
|
|
)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
FN_TRACE_WIN32(fSuccess);
|
|
BOOL fEqual = FALSE;
|
|
|
|
rfMatch = false;
|
|
|
|
PARAMETER_CHECK(keyin != NULL);
|
|
PARAMETER_CHECK(rkeystored != NULL);
|
|
|
|
IFW32FALSE_EXIT(::SxsAreAssemblyIdentitiesEqual(0, keyin, rkeystored, &fEqual));
|
|
|
|
if (fEqual)
|
|
rfMatch = true;
|
|
|
|
fSuccess = TRUE;
|
|
Exit:
|
|
return fSuccess;
|
|
}
|
|
|
|
BOOL
|
|
CComponentPolicyTableHelper::InitializeKey(
|
|
PCASSEMBLY_IDENTITY keyin,
|
|
PCASSEMBLY_IDENTITY &rkeystored
|
|
)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
FN_TRACE_WIN32(fSuccess);
|
|
PASSEMBLY_IDENTITY AssemblyIdentity = NULL;
|
|
|
|
rkeystored = NULL;
|
|
|
|
PARAMETER_CHECK(keyin != NULL);
|
|
|
|
IFW32FALSE_EXIT(
|
|
::SxsDuplicateAssemblyIdentity(
|
|
SXS_DUPLICATE_ASSEMBLY_IDENTITY_FLAG_FREEZE,
|
|
keyin,
|
|
&AssemblyIdentity));
|
|
|
|
rkeystored = AssemblyIdentity;
|
|
AssemblyIdentity = NULL;
|
|
|
|
fSuccess = TRUE;
|
|
Exit:
|
|
if (AssemblyIdentity != NULL)
|
|
::SxsDestroyAssemblyIdentity(AssemblyIdentity);
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
BOOL
|
|
CComponentPolicyTableHelper::InitializeValue(
|
|
CPolicyStatement *vin,
|
|
CPolicyStatement *&rvstored
|
|
)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
FN_TRACE_WIN32(fSuccess);
|
|
|
|
PARAMETER_CHECK(vin != NULL);
|
|
INTERNAL_ERROR_CHECK(rvstored == NULL);
|
|
|
|
rvstored = vin;
|
|
|
|
fSuccess = TRUE;
|
|
Exit:
|
|
return fSuccess;
|
|
}
|
|
|
|
BOOL
|
|
CComponentPolicyTableHelper::UpdateValue(
|
|
CPolicyStatement *vin,
|
|
CPolicyStatement *&rvstored
|
|
)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
FN_TRACE_WIN32(fSuccess);
|
|
|
|
if (rvstored != NULL)
|
|
FUSION_DELETE_SINGLETON(rvstored);
|
|
|
|
rvstored = vin;
|
|
|
|
fSuccess = TRUE;
|
|
return fSuccess;
|
|
}
|
|
|