CmpConstructAndCacheName

__int64 __fastcall CmpConstructAndCacheName(
        _CM_KEY_CONTROL_BLOCK *Kcb,
        _UNICODE_STRING **KeyPath,
        unsigned __int8 *Stale){
  unsigned __int64 FullKCBName; 
  int v6; 
  bool v8; 
  _UNICODE_STRING *KeyPatha; 

  KeyPatha = 0i64;
  FullKCBName = (unsigned __int64)Kcb->FullKCBName;
  if( (FullKCBName & 1) != 0 )
    FullKCBName &= ~1ui64;
  if( !FullKCBName )
  {
    v6 = CmpConstructNameWithStatus(Kcb, &KeyPatha);
    if( v6 < 0 )
      goto LABEL_7;
    v8 = _InterlockedCompareExchange64((volatile signed __int64 *)&Kcb->296, (signed __int64)KeyPatha, 0i64) != 0;
    FullKCBName = (unsigned __int64)Kcb->FullKCBName;
    KeyPatha = (_UNICODE_STRING *)(-(__int64)v8 & (unsigned __int64)KeyPatha);
    if( (FullKCBName & 1) != 0 )
      FullKCBName &= ~1ui64;
  }
  if( KeyPath )
    *KeyPath = (_UNICODE_STRING *)FullKCBName;
  v6 = 0;
LABEL_7:
  if( KeyPatha )
    CmpFreeTransientPoolWithTag(KeyPatha, 0x624E4D43ui64);
  return(unsigned int)v6;
}

Referenced by:

CmCallbackGetKeyObjectID
CmpGetSymbolicLinkTarget