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