KiAdjustTimer2DueTimes
VOID __stdcall KiAdjustTimer2DueTimes(_KI_TIME_ADJUST_CONTEXT *AdjustContext){
__int64 v1;
_KI_TIME_ADJUST_CONTEXT *v2;
__int64 *v3;
__int64 v4;
__int64 v5;
_QWORD *i;
char v7;
_KTIMER2 *v8;
CHAR v9;
INT64 v10;
__int64 v11;
_QWORD **v12;
__int64 v13;
_QWORD *v14;
_QWORD *v15;
char v16;
ULONGLONG *v17;
ULONGLONG v18;
signed __int64 v19;
signed __int64 v20;
__int64 v21;
unsigned __int64 v22;
__int64 v23;
__int64 v24;
_QWORD *v25;
ULONGLONG v26;
_QWORD *v27;
__int64 v28[2];
UINT8 WasLate;
v1 = 0i64;
WasLate = 0;
v2 = AdjustContext;
v3 = v28;
v28[1] = (__int64)v28;
v28[0] = (__int64)v28;
v4 = (__int64)KiTimer2Collections;
do
{
v5 = *(_QWORD *)(v4 + 8);
if( (v5 & 1) != 0 )
{
if( v5 == 1 )
goto LABEL_5;
i = (_QWORD *)(v5 ^ (v4 | 1));
}
else
{
i = *(_QWORD **)(v4 + 8);
}
if( i )
{
v11 = 0i64;
if( v1 >= 2 )
v11 = 24i64;
do
{
v12 = (_QWORD **)i[1];
v13 = (__int64)&i[v11 / 0xFFFFFFFFFFFFFFF8ui64];
v14 = i;
if( v12 )
{
v15 = *v12;
for( i = (_QWORD *)i[1]; v15; v15 = (_QWORD *)*v15 )
i = v15;
}
else
{
while( 1 )
{
i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !i || (_QWORD *)*i == v14 )
break;
v14 = i;
}
}
v16 = *(_BYTE *)(v13 + 104);
if( v16 != *(_BYTE *)v2 && (v16 || (*(_BYTE *)(v13 + 105) & 2) == 0) )
{
KiRemoveTimer2((_KTIMER2 *)(v13 - 24));
v2 = AdjustContext;
v17 = (ULONGLONG *)(v13 + 48);
v18 = *(_QWORD *)(v13 + 48);
v19 = *((_QWORD *)AdjustContext + 3);
if( v19 >= 0 )
{
if( RtlULongLongSub(v18, v19, v17) )
*v25 = 0i64;
v26 = *(_QWORD *)(v13 + 56);
if( v26 != -1i64 && RtlULongLongSub(v26, *((_QWORD *)v2 + 3), (ULONGLONG *)(v13 + 56)) )
*v27 = 0i64;
}
else
{
v20 = -v19;
v21 = v18 + v20;
if( v18 + v20 < v18 || v21 == -1 )
v21 = -2i64;
v22 = *(_QWORD *)(v13 + 56);
*v17 = v21;
if( v22 != -1i64 )
{
v24 = v22 + v20;
if( v22 + v20 < v22 || v24 == -1 )
v24 = -2i64;
*(_QWORD *)(v13 + 56) = v24;
}
}
v23 = v28[0];
v3 = (__int64 *)v13;
if( *(__int64 **)(v28[0] + 8) != v28 )
__fastfail(3u);
*(_QWORD *)v13 = v28[0];
*(_QWORD *)(v13 + 8) = v28;
*(_QWORD *)(v23 + 8) = v13;
v28[0] = v13;
}
}
while( i );
}
LABEL_5:
++v1;
v4 += 24i64;
}
while( v4 < (__int64)&KiNextTimer2DueTime );
v7 = 0;
if( v3 != v28 )
{
do
{
v8 = (_KTIMER2 *)(v3 - 3);
v3 = (__int64 *)*v3;
KiInsertTimer2(v8, 1u, &WasLate);
if( WasLate )
v7 = 1;
}
while( v3 != v28 );
if( v7 )
KiRequestTimer2Expiration(v10, v9);
}
if( KiShouldActivateHRTimerClock(*(UINT64 *)&KUSER_SHARED_DATA.InterruptTime.LowPart, DueTime) )
KiSendClockInterruptToClockOwner();
}Referenced by:
KiAdjustTimerDueTimes