KeEstimateClockTickDuration
INT64 *__fastcall KeEstimateClockTickDuration(INT64 a1, CHAR a2, CHAR a3, UINT8 a4, UINT64 a5, INT64 *a6, INT64 *a7){
int v7;
bool v8;
UINT64 v9;
INT64 v10;
INT64 *result;
UINT64 v12[3];
INT64 v13;
v7 = 2;
v12[0] = 0i64;
v8 = *(_BYTE *)(a1 + 33) == 0;
v9 = KiClockTimerNextTickTime;
LODWORD(v13) = 2;
if( v8 )
{
KiGetNextTimerExpirationDueTime(a1, 0, a5, a3, a4, v12, &v13);
if( v9 <= v12[0] )
v9 = v12[0];
goto LABEL_11;
}
if( a2 )
{
if( (_BYTE)KiDynamicTickDisableReason || KiClockState )
a2 = 0;
if( a2 )
{
KiGetNextTimerExpirationDueTime(a1, 1, a5, a3, a4, v12, &v13);
if( a5 + (unsigned int)KiLastRequestedTimeIncrement < v12[0] )
{
v9 = v12[0];
LABEL_11:
v7 = v13;
}
}
}
v10 = -1i64;
if( v9 != -1i64 )
{
if( v9 <= a5 )
v10 = 0i64;
else
v10 = v9 - a5;
}
*a6 = v10;
result = a7;
*(_DWORD *)a7 = v7;
return result;
}Referenced by:
PpmEstimateIdleDuration