HalpInterruptRestoreClock

NTSTATUS __stdcall HalpInterruptRestoreClock(){
  void *v0; 
  void *v1; 
  unsigned int v2; 
  unsigned int v3; 
  __int64 v4; 
  __int64 v5; 
  _INTERRUPT_LINE *v7; 
  _LIST_ENTRY *Lines; 
  _REGISTERED_INTERRUPT_CONTROLLER *v9; 
  __int64 v10; 
  NTSTATUS v11; 
  _INTERRUPT_LINE Line; 

  Line = 0i64;
  v2 = 0;
  v3 = HalpTimerCriticalClockSourceCount;
  if( HalpTimerCriticalClockSourceCount )
  {
    v7 = (_INTERRUPT_LINE *)&qword_140C4A4A0;
    while( 1 )
    {
      Line = *v7;
      HalpInterruptApplyOverrides(&Line, 0i64, 0i64);
      Lines = HalpInterruptFindLines((unsigned int *)&Line);
      if( !Lines )
        break;
      v9 = HalpInterruptLookupController(LODWORD(Lines[1].Flink));
      if( !v9 )
      {
        *(&CmpDummyThreadEvent + 1789) = 17;
LABEL_11:
        v11 = -1073741810;
LABEL_12:
        KeBugCheckEx(0x5Cu, (PVOID)0x200, (PVOID)*(&CmpDummyThreadEvent + 1789), (PVOID)2, (PVOID)v11);
      }
      v11 = HalpInterruptSetLineStateInternal(v9, &Line, *(_INTERRUPT_LINE_STATE **)(v10 + 40));
      if( v11 < 0 )
        goto LABEL_12;
      ++v2;
      ++v7;
      if( v2 >= v3 )
        goto LABEL_2;
    }
    *(&CmpDummyThreadEvent + 1789) = 18;
    goto LABEL_11;
  }
LABEL_2:
  HalpTimerGetInternalData((_KDPC *)HalpClockTimer, HalpClockTimer, v0, v1);
  return(*(__int64(__fastcall **)(__int64))(v4 + 120))(v5);
}

Referenced by:

HalpPostSleepMP