RtlBackoff
__int64 __fastcall RtlBackoff(unsigned int *a1){
unsigned int v1;
__int64 result;
unsigned __int64 v3;
unsigned int v4;
v1 = *a1;
if( *a1 )
{
if( v1 < 0x1FFF )
v1 *= 2;
}
else
{
result = (unsigned int)KeNumberProcessors_0;
if( (_DWORD)KeNumberProcessors_0 == 1 )
return result;
v1 = 64;
}
*a1 = v1;
v3 = __rdtsc();
v4 = 0;
result = 10 * (((v1 - 1) & (unsigned int)v3) + v1) / KUSER_SHARED_DATA.CyclesPerYield;
if( (_DWORD)result )
{
do
{
_mm_pause();
++v4;
}
while( v4 < (unsigned int)result );
}
return result;
}Referenced by:
ExfAcquirePushLockExclusiveEx
ExfAcquirePushLockSharedEx
KiCheckForTimerExpiration
KiInsertQueueDpc
KiSetDpcRequestFlag
RtlAcquireSwapReference
RtlReleaseSwapReference
RtlpFcAddDelayedUsageReportToBuffer