CmpRemoveFromSecurityCache
VOID __stdcall CmpRemoveFromSecurityCache(CMHIVE *CmHive, UINT64 SecurityCell){
int v3;
__int64 v4;
_CM_KEY_SECURITY_CACHE *CachedSecurity;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
UINT64 v8;
LODWORD(v8) = 0;
if( CmpFindSecurityCellCacheIndex(CmHive, SecurityCell, &v8) )
{
v3 = v8;
v4 = (unsigned int)v8;
CachedSecurity = CmHive->SecurityCache[v4].CachedSecurity;
Flink = CachedSecurity->List.Flink;
if( Flink->Blink != &CachedSecurity->List
|| (Blink = CachedSecurity->List.Blink, Blink->Flink != &CachedSecurity->List) )
{
__fastfail(3u);
}
Blink->Flink = Flink;
Flink->Blink = Blink;
CmHive->Hive.Free(CachedSecurity, CachedSecurity->DescriptorLength + 32);
memmove(&CmHive->SecurityCache[v4], &CmHive->SecurityCache[v3 + 1], 16 * (CmHive->SecurityCount - v3 - 1));
--CmHive->SecurityCount;
}
}Referenced by:
CmpRemoveSecurityCellList