CmpFreezeHive

INT64 __fastcall CmpFreezeHive(INT64 a1, VOID *a2){
  CMHIVE *v2; 
  NTSTATUS v5; 

  v2 = *(CMHIVE **)(a1 + 32);
  CmpReferenceKeyControlBlockUnsafe((volatile INT64 *)a1);
  if( a2 && (v5 = CmpRecordUnloadEventForHive(v2, (KEVENT *)a2), v5 < 0) )
  {
    CmpDereferenceKeyControlBlockUnsafe((volatile INT64 *)a1);
  }
  else
  {
    CmpSearchForOpenSubKeys((_QWORD *)a1, 2, 0i64);
    *(_WORD *)(a1 + 8) |= 0x20u;
    v5 = 0;
    v2->Frozen = 1;
    v2->RootKcb = (_CM_KEY_CONTROL_BLOCK *)a1;
  }
  return(unsigned int)v5;
}

Referenced by:

CmpPerformUnloadKey