CmpUpdateHiveRootCellFlags
INT64 __stdcall CmpUpdateHiveRootCellFlags(CMHIVE *Hive, UINT64 RootCellIndex){
_EX_PUSH_LOCK *p_FlusherLock;
unsigned int v3;
_CELL_DATA *v5;
_CELL_DATA *v6;
unsigned int v7;
__int64 v9;
p_FlusherLock = (_EX_PUSH_LOCK *)&Hive->Hive.FlusherLock;
v3 = RootCellIndex;
v9 = 0xFFFFFFFFi64;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&Hive->Hive.FlusherLock, 0i64);
v5 = Hive->Hive.GetCellRoutine(Hive, v3, &v9);
v6 = v5;
if( v5 )
{
if( (v5->u.KeyValue.NameLength & 0xC) != 12 )
{
if( !HvpMarkCellDirty(Hive, (PVOID)v3, 0, CmHiveDirtyNormal) )
{
v7 = -1073741670;
goto LABEL_6;
}
v6->u.KeyNode.Flags |= 0xCu;
}
v7 = 0;
LABEL_6:
Hive->Hive.ReleaseCellRoutine((_HHIVE *)Hive, (_HV_GET_CELL_CONTEXT *)&v9);
goto LABEL_7;
}
v7 = -1073741670;
LABEL_7:
if( _InterlockedCompareExchange64(&p_FlusherLock->_bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(p_FlusherLock);
KeAbPostRelease(p_FlusherLock);
return v7;
}Referenced by:
CmpDoParseKey