HalpInterruptRestoreClock

INT64 __stdcall HalpInterruptRestoreClock(){
  void *v0; 
  void *v1; 
  unsigned int v2; 
  unsigned int v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 *v7; 
  ULONG_PTR *Lines; 
  ULONG_PTR *v9; 
  __int64 v10; 
  int v11; 
  __int64 v12; 
  v12 = 0i64;
  v2 = 0;
  v3 = HalpTimerCriticalClockSourceCount;
  if( HalpTimerCriticalClockSourceCount )
  {
    v7 = &HalpTimerCriticalClockSource;
    while( 1 )
    {
      v12 = *v7;
      HalpInterruptApplyOverrides(&v12, 0i64, 0i64);
      Lines = HalpInterruptFindLines((int *)&v12);
      if( !Lines )
        break;
      v9 = HalpInterruptLookupController(*((_DWORD *)Lines + 4));
      if( !v9 )
      {
        HalpInterruptLastProblem = 17;
LABEL_11:
        v11 = -1073741810;
LABEL_12:
        KeBugCheckEx(0x5Cu, 0x200ui64, HalpInterruptLastProblem, 2ui64, v11);
      }
      v11 = HalpInterruptSetLineStateInternal((__int64)v9, (__int64)&v12, *(_QWORD *)(v10 + 40));
      if( v11 < 0 )
        goto LABEL_12;
      ++v2;
      ++v7;
      if( v2 >= v3 )
        goto LABEL_2;
    }
    HalpInterruptLastProblem = 18;
    goto LABEL_11;
  }
LABEL_2:
  HalpTimerGetInternalData((KDPC *)HalpClockTimer, (PVOID)HalpClockTimer, v0, v1);
  return(*(__int64(__fastcall **)(__int64))(v4 + 120))(v5);
}

Referenced by:

HalpPostSleepMP