ExpAcquireFannedOutPushLockShared

_EX_PUSH_LOCK *__stdcall ExpAcquireFannedOutPushLockShared(
        VOID *FannedOutPushLock,
        VOID *LockHandle,
        VOID *LockPointer){
  unsigned int v3; 
  unsigned __int64 v4; 
  unsigned int v5; 
  _EX_PUSH_LOCK *v6; 

  v3 = ((unsigned int)FannedOutPushLock >> 13) & 0x3FFFF;
  v4 = (unsigned __int64)(unsigned int)FannedOutPushLock >> 4;
  _BitScanReverse(&v5, v3);
  v6 = (_EX_PUSH_LOCK *)(*(_QWORD *)(*((_QWORD *)KeGetCurrentPrcb()->ExSaPageArray + v5 - 2)
                                   + 8i64 * (v3 ^ (1 << v5))
                                   + 8)
                       + 8 * (v4 & 0x1FF));
  if( _InterlockedCompareExchange64(&v6->_bf_0, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(v6, LockHandle, LockPointer);
  return v6;
}

Referenced by:

ExAcquireAutoExpandPushLockShared