HalpInterruptRestoreController

NTSTATUS __stdcall HalpInterruptRestoreController(_REGISTERED_INTERRUPT_CONTROLLER *Controller, INT64 LocalUnit){
  char v2; 
  unsigned int Flags; 
  _LIST_ENTRY *p_LinesHead; 
  _LIST_ENTRY *Flink; 
  int v7; 
  __int64 v8; 
  __int64 v9; 
  _LIST_ENTRY *v10; 
  NTSTATUS result; 
  _INTERRUPT_LINE Line; 

  Line = 0i64;
  v2 = LocalUnit;
  Flags = Controller->Flags;
  if( (Flags & 2) != 0 )
    return -1073741823;
  if( (Flags & 1) == 0 )
    return -1073741436;
  p_LinesHead = &Controller->LinesHead;
  Flink = Controller->LinesHead.Flink;
  while( 1 )
  {
LABEL_7:
    if( Flink == p_LinesHead )
      return 0;
    v10 = Flink;
    Flink = Flink->Flink;
    if( v10[2].Blink && (!v2 || ((LODWORD(v10[2].Flink) - 3) & 0xFFFFFFFD) == 0) )
    {
      v7 = 0;
      if( LODWORD(v10[1].Blink) - HIDWORD(v10[1].Flink) > 0 )
        break;
    }
  }
  v9 = 0i64;
  v8 = 0i64;
  while( 1 )
  {
    if( (*(_DWORD *)((_BYTE *)&v10[2].Blink->Blink + v8 + 4) & 0x10) != 0 || LOBYTE(v10[3].Flink[v9].Flink) )
    {
      Line.UnitId = Controller->UnitId;
      Line.Line = v7 + HIDWORD(v10[1].Flink);
      result = HalpInterruptSetLineStateInternal(Controller, &Line, (_INTERRUPT_LINE_STATE *)v10[2].Blink + v7);
      if( result < 0 )
        return result;
    }
    ++v7;
    v8 += 56i64;
    ++v9;
    if( v7 >= LODWORD(v10[1].Blink) - HIDWORD(v10[1].Flink) )
      goto LABEL_7;
  }
}

Referenced by:

HalpInterruptInitializeLocalUnit
HalpInterruptPowerChange
HalpInterruptRestoreAllControllerState