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