CHAR __fastcall ViLockContextPointer(INT64 *a1){
INT64 v2;
INT64 v3;
UINT64 SpinCount;
LODWORD(SpinCount) = 0;
do
{
while( 1 )
{
_m_prefetchw(a1);
v2 = *a1;
if( (*a1 & 1) != 0 )
break;
if( !v2 )
return v2;
KeYieldProcessorEx(&SpinCount);
}
v3 = *a1;
}
while( v3 != _InterlockedCompareExchange64(a1, v2 - 1, v2) );
LOBYTE(v2) = 1;
return v2;
}