ExfTryAcquirePushLockShared

CHAR __fastcall ExfTryAcquirePushLockShared(UINT64 *a1){
  CHAR v2; 
  unsigned __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  unsigned __int64 v6; 
  v2 = 0;
  _m_prefetchw(a1);
  v3 = *a1;
  while( 1 )
  {
    v4 = (v3 >> 1) & 1;
    if( (v3 & 1) != 0 && (v4 || (v3 & 0xFFFFFFFFFFFFFFF0ui64) == 0) )
      break;
    v5 = (v3 | 1) + 16;
    if( v4 )
      v5 = v3 | 1;
    v6 = v3;
    v3 = _InterlockedCompareExchange64((volatile signed __int64 *)a1, v5, v3);
    if( v6 == v3 )
      return 1;
  }
  return v2;
}

Referenced by:

ExAcquireCacheAwarePushLockSharedEx
ExTryAcquireAutoExpandPushLockShared
ExTryAcquireCacheAwarePushLockSharedEx
ExTryAcquirePushLockSharedEx
ExpTryAcquireFannedOutPushLockShared
IopProcessIoTracking
MiCoalesceFreePages
MiProcessTransitionHeatBatch
PfLockSharedTryAcquire
TryLockShutdownShared