ExpAcquireFastMutexContended
VOID __stdcall ExpAcquireFastMutexContended(FAST_MUTEX *Mutex, PVOID LockHandle){
int v2;
int v5;
int Count;
int v7;
int v8;
void *v9;
++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(&Mutex->Event, WrFastMutex, 0, 0, 0i64);
_m_prefetchw(Mutex);
v2 = 3;
v5 = 2;
if( LockHandle )
{
LODWORD(v9) = KeAbPreAcquire(Mutex, LockHandle, 0i64);
LockHandle = v9;
}
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