CmpLockTwoKcbsShared

void __fastcall CmpLockTwoKcbsShared(_CM_KEY_CONTROL_BLOCK *Kcb1, _CM_KEY_CONTROL_BLOCK *Kcb2){
  _CM_KEY_CONTROL_BLOCK *v3; 
  _EX_PUSH_LOCK *p_KcbPushlock; 
  _CM_KEY_CONTROL_BLOCK *v5; 
  _CM_KEY_CONTROL_BLOCK *ProperFirstKcb; 
  _CM_KEY_CONTROL_BLOCK *ProperSecondKcb; 

  ProperFirstKcb = 0i64;
  ProperSecondKcb = 0i64;
  v3 = Kcb1;
  if( Kcb1 )
  {
    if( Kcb2 )
    {
      if( Kcb1 != Kcb2 )
      {
        CmpGetCorrectKcbLockOrder(Kcb1, Kcb2, &ProperFirstKcb, &ProperSecondKcb);
        v5 = ProperFirstKcb;
        ExAcquirePushLockSharedEx(&ProperFirstKcb->KcbPushlock, 0i64);
        _InterlockedIncrement((volatile signed __int32 *)&v5->56);
        v3 = ProperSecondKcb;
      }
      p_KcbPushlock = &v3->KcbPushlock;
    }
    else
    {
      p_KcbPushlock = &Kcb1->KcbPushlock;
    }
    ExAcquirePushLockSharedEx(p_KcbPushlock, 0i64);
    _InterlockedIncrement((volatile signed __int32 *)&v3->56);
  }
  else if( Kcb2 )
  {
    ExAcquirePushLockSharedEx(&Kcb2->KcbPushlock, 0i64);
    _InterlockedIncrement((volatile signed __int32 *)&Kcb2->56);
  }
}

Referenced by:

CmEnumerateKey
CmEnumerateValueKeyFromMergedView
CmQueryKey
CmQueryMultipleValueKey
CmSaveMergedKeys
CmpFindSubkeyInHashByChildCell
NtNotifyChangeMultipleKeys