PspSetProcessTimerDelayForKTimers
INT64 __fastcall PspSetProcessTimerDelayForKTimers(INT64 a1){
UINT64 v1;
UINT64 *v2;
unsigned int v4;
unsigned __int8 v5;
unsigned __int8 v6;
INT64 v7;
unsigned __int64 v8;
unsigned int v9;
unsigned __int64 v10;
_QWORD *v11;
unsigned __int64 v12;
volatile signed __int32 *v13;
char v14;
unsigned int v15;
_QWORD *v16;
unsigned __int8 v18;
__int64 v19;
v2 = (UINT64 *)(a1 + 2440);
v4 = 10000 * (*(_QWORD *)(a1 + 2416) & 0x3FFFFFFF);
KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 2440), v1);
v6 = v5;
v18 = v5;
if( v4 == *(_DWORD *)(a1 + 68) )
{
KxReleaseSpinLock(v2);
}
else
{
v7 = 0i64;
v8 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
v9 = *(_DWORD *)(a1 + 68);
v19 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
if( v4 <= v9 )
{
if( v4 < v9 )
{
v10 = -1i64;
v11 = *(_QWORD **)(a1 + 2448);
if( v11 != (_QWORD *)(a1 + 2448) )
{
v12 = 0i64;
do
{
v13 = (volatile signed __int32 *)(v11 - 36);
KiAcquireKobjectLockSafe(v11 - 36);
v14 = *((_BYTE *)v11 - 285) & 0x40;
if( v14 )
v12 = *((_QWORD *)v13 + 3);
_InterlockedAnd(v13, 0xFFFFFF7F);
if( v14 && v12 < v10 )
v10 = v12;
v11 = (_QWORD *)*v11;
}
while( v11 != (_QWORD *)(a1 + 2448) );
v9 = *(_DWORD *)(a1 + 68);
v2 = (UINT64 *)(a1 + 2440);
v6 = v18;
v8 = v19;
}
v15 = v9 - v4;
if( v10 - v15 >= v8 )
v7 = -(__int64)v15;
else
v7 = v8 - v10;
}
}
else
{
v7 = v4 - v9;
}
v16 = *(_QWORD **)(a1 + 2448);
if( v16 != (_QWORD *)(a1 + 2448) )
{
do
{
ExpTimerAdjust((PKTIMER)(v16 - 36), v4);
v16 = (_QWORD *)*v16;
}
while( v16 != (_QWORD *)(a1 + 2448) );
v6 = v18;
v2 = (UINT64 *)(a1 + 2440);
}
KeAdjustTimerDelayProcess(a1, v7, v4);
KxReleaseSpinLock(v2);
}
__writecr8(v6);
return 0i64;
}Referenced by:
PspApplyTimerDelayProcess