ExAcquireRundownProtectionEx

INT8 __fastcall ExAcquireRundownProtectionEx(INT64 *a1, INT64 a2){
  signed __int64 v2; 
  __int64 v3; 
  signed __int64 v4; 

  _m_prefetchw(a1);
  v2 = *a1;
  if( (*a1 & 1) != 0 )
    return 0;
  v3 = (unsigned int)(2 * a2);
  while( 1 )
  {
    v4 = v2;
    v2 = _InterlockedCompareExchange64(a1, v3 + v2, v2);
    if( v4 == v2 )
      break;
    if( (v2 & 1) != 0 )
      return 0;
  }
  return 1;
}

Referenced by:

ExCompareExchangeCallBack
ExReferenceCallBackBlock
MiCompleteProtoPteFault
PfSnAddProcessTrace
PfSnReferenceProcessTrace
PspRundownProcess