KiAdjustTimersAfterDripsExit

VOID __stdcall KiAdjustTimersAfterDripsExit(_KPRCB *Prcb){
  __int64 v1; 
  __int64 v2; 
  _KPRCB *v3; 
  unsigned __int8 CurrentIrql; 
  _KI_TIME_ADJUST_CONTEXT AdjustContext[8]; 
  __int64 v6; 

  memset(AdjustContext, 0, sizeof(AdjustContext));
  v6 = 0i64;
  if( KiSerializeTimerExpiration )
  {
    v2 = v1 - KiClockTimerOneShotStartTime;
    *(_QWORD *)&AdjustContext[6] = v2;
    if( v2 > 10000000i64 * (unsigned int)KiTimerRebaseThresholdOnDripsExit )
    {
      KUSER_SHARED_DATA.InterruptTimeBias += v2;
      if( (KUSER_SHARED_DATA.InterruptTimeBias & 0x8000000000000000ui64) != 0i64 )
        __fastfail(5u);
      *(_QWORD *)&AdjustContext[6] = -*(_QWORD *)&AdjustContext[6];
      AdjustContext[1] = 0;
      v3 = KiProcessorBlock;
      if( !KiSerializeTimerExpiration )
        v3 = Prcb;
      LOBYTE(AdjustContext[0]) = 1;
      LOBYTE(v6) = 1;
      *(_OWORD *)&AdjustContext[2] = 0i64;
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      KiAdjustTimerDueTimes(KeGetCurrentPrcb(), &v3->TimerTable, AdjustContext);
      __writecr8(CurrentIrql);
    }
  }
}

Referenced by:

KeResumeClockTimerFromIdle