HalpInterruptGetIdentifiers

INT64 __fastcall HalpInterruptGetIdentifiers(INT64 a1, _DWORD *a2, _DWORD *a3){
  unsigned int v3; 
  int v4; 
  ULONG_PTR v5; 
  unsigned int v6; 
  _BYTE *v7; 
  int v9; 
  v3 = 0;
  v4 = a1;
  if( (_DWORD)HalpInterruptProcessorCount )
  {
    v5 = HalpInterruptProcessorState + 13;
    while( 1 )
    {
      if( !*(_BYTE *)(v5 + 43) )
      {
        if( *(_BYTE *)v5 )
        {
          --v4;
          if( *(_DWORD *)(v5 + 7) == (_DWORD)a1 )
            break;
        }
      }
      ++v3;
      v5 += 64i64;
      if( v3 >= (unsigned int)HalpInterruptProcessorCount )
        goto LABEL_7;
    }
    if( a2 )
      *a2 = *(_DWORD *)(v5 - 13);
    if( a3 )
    {
      v9 = *(_DWORD *)(v5 - 9);
      goto LABEL_25;
    }
    return 0i64;
  }
  else
  {
LABEL_7:
    v6 = 0;
    if( (_DWORD)HalpInterruptProcessorCount )
    {
      v7 = (_BYTE *)(HalpInterruptProcessorState + 12);
      do
      {
        if( !v7[1] && !*v7 && !v7[44] )
        {
          if( !v4 )
          {
            if( a2 )
              *a2 = *((_DWORD *)v7 - 3);
            if( !a3 )
              return 0i64;
            v9 = *((_DWORD *)v7 - 2);
LABEL_25:
            *a3 = v9;
            return 0i64;
          }
          --v4;
        }
        ++v6;
        v7 += 64;
      }
      while( v6 < (unsigned int)HalpInterruptProcessorCount );
    }
    return 3221226021i64;
  }
}

Referenced by:

HalpConnectThermalInterrupt
HalpNumaQueryProcessorNode
HalpNumaSwapP0NodeToFront