ExfTryAcquirePushLockShared
UINT8 __stdcall ExfTryAcquirePushLockShared(_EX_PUSH_LOCK *PushLock){
UINT8 v2;
unsigned __int64 bf_0;
__int64 v4;
__int64 v5;
unsigned __int64 v6;
v2 = 0;
_m_prefetchw(PushLock);
bf_0 = PushLock->_bf_0;
while( 1 )
{
v4 = (bf_0 >> 1) & 1;
if( (bf_0 & 1) != 0 && (v4 || (bf_0 & 0xFFFFFFFFFFFFFFF0ui64) == 0) )
break;
v5 = (bf_0 | 1) + 16;
if( v4 )
v5 = bf_0 | 1;
v6 = bf_0;
bf_0 = _InterlockedCompareExchange64(&PushLock->_bf_0, v5, bf_0);
if( v6 == bf_0 )
return 1;
}
return v2;
}Referenced by:
ExAcquireCacheAwarePushLockSharedEx
ExTryAcquireAutoExpandPushLockShared
ExTryAcquireCacheAwarePushLockSharedEx
ExTryAcquirePushLockSharedEx
ExpTryAcquireFannedOutPushLockShared
IopProcessIoTracking
MiCoalesceFreePages
MiProcessTransitionHeatBatch
PfLockSharedTryAcquire
TryLockShutdownShared