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.
 
 
 
 
 
 

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;
}