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