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