KiAdjustTimersAfterDripsExit

VOID __fastcall KiAdjustTimersAfterDripsExit(_KPRCB *Prcb, _BYTE *a2){
  __int64 v2; 
  _KPRCB *v3; 
  unsigned __int8 CurrentIrql; 
  __int128 v5[2]; 
  __int64 v6; 
  memset(v5, 0, sizeof(v5));
  v6 = 0i64;
  if( KiSerializeTimerExpiration )
  {
    v2 = (__int64)&a2[-KiClockTimerOneShotStartTime];
    *((_QWORD *)&v5[1] + 1) = v2;
    if( v2 > 10000000i64 * (unsigned int)KiTimerRebaseThresholdOnDripsExit )
    {
      KUSER_SHARED_DATA.InterruptTimeBias += v2;
      if( (KUSER_SHARED_DATA.InterruptTimeBias & 0x8000000000000000ui64) != 0i64 )
        __fastfail(5u);
      *((_QWORD *)&v5[1] + 1) = -*((_QWORD *)&v5[1] + 1);
      DWORD1(v5[0]) = 0;
      v3 = KiProcessorBlock;
      if( !KiSerializeTimerExpiration )
        v3 = Prcb;
      LOBYTE(v5[0]) = 1;
      LOBYTE(v6) = 1;
      *(__int128 *)((char *)v5 + 8) = 0i64;
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      KiAdjustTimerDueTimes((__int64)KeGetCurrentPrcb(), (__int64)v3 + 14656, (__int64)v5);
      __writecr8(CurrentIrql);
    }
  }
}

Referenced by:

KeResumeClockTimerFromIdle