ExpAcquireFastMutexContended
VOID __stdcall ExpAcquireFastMutexContended(_FAST_MUTEX *Mutex, VOID *LockHandle){
int v2;
int v5;
int Count;
int v7;
int v8;
++Mutex->Contention;
v2 = 1;
v5 = 4;
LABEL_2:
Count = Mutex->Count;
do
{
while( (Count & 1) == 0 )
{
v8 = Count;
Count = _InterlockedCompareExchange(&Mutex->Count, v5 + Count, Count);
if( v8 == Count )
{
if( LockHandle )
KeAbPreWait(LockHandle);
KeWaitForSingleObject((UINT64)&Mutex->gap14[4], 34, 0, 0, 0i64);
_m_prefetchw(Mutex);
v2 = 3;
v5 = 2;
if( LockHandle )
LockHandle = KeAbPreAcquire(Mutex, LockHandle, 0i64);
goto LABEL_2;
}
}
v7 = Count;
Count = _InterlockedCompareExchange(&Mutex->Count, v2 ^ Count, Count);
}
while( v7 != Count );
}Referenced by:
CcPinFileData
CcSetDirtyInMask
CcSetDirtyPinnedData
CcUnpinFileDataEx
CmpDereferenceKeyControlBlock
CmpPerformSingleKcbCacheLookup
ExAcquireFastMutex
ExAcquireFastMutexUnsafe
ExEnterCriticalRegionAndAcquireFastMutexUnsafe
FsRtlAcquireEofLock
FsRtlAcquireHeaderMutex
FsRtlCheckOplockEx2
FsRtlReleaseEofLock
KeAcquireGuardedMutex