CmpTryToLockKcbExclusive

INT64 __fastcall CmpTryToLockKcbExclusive(_CM_KEY_CONTROL_BLOCK *Kcb){
  _EX_PUSH_LOCK *p_KcbPushlock; 
  char v3; 
  INT64 result; 

  p_KcbPushlock = &Kcb->KcbPushlock;
  v3 = 1;
  result = (INT64)KeAbPreAcquire(&Kcb->KcbPushlock, 0i64, 1ui64);
  if( _interlockedbittestandset64((volatile signed __int32 *)p_KcbPushlock, 0i64) )
  {
    if( result )
      KeAbPostReleaseEx(p_KcbPushlock, (VOID *)result);
    v3 = 0;
  }
  else
  {
    if( result )
      *(_BYTE *)(result + 26) |= 1u;
    result = (INT64)KeGetCurrentThread();
    Kcb->Owner = (_ETHREAD *)result;
  }
  LOBYTE(result) = v3;
  return result;
}

Referenced by:

CmpCreateKeyControlBlock
CmpCreateRegistryRoot