INT64 __fastcall CmpFreezeHive(INT64 a1, VOID *a2){
__int64 v2;
int v5;
v2 = *(_QWORD *)(a1 + 32);
CmpReferenceKeyControlBlockUnsafe((volatile INT64 *)a1);
if( a2 && (v5 = CmpRecordUnloadEventForHive(v2, a2), v5 < 0) )
{
CmpDereferenceKeyControlBlockUnsafe((volatile INT64 *)a1);
}
else
{
CmpSearchForOpenSubKeys(a1, 2i64, 0i64);
*(_WORD *)(a1 + 8) |= 0x20u;
v5 = 0;
*(_BYTE *)(v2 + 2936) = 1;
*(_QWORD *)(v2 + 2928) = a1;
}
return(unsigned int)v5;
}