HalpPicDiscover

NTSTATUS __stdcall HalpPicDiscover(){
  _LARGE_INTEGER *AcpiTable; 
  _UNICODE_STRING *v1; 
  VOID **v2; 
  NTSTATUS result; 
  _UNICODE_STRING *v4; 
  VOID **v5; 
  char Lines[44]; 
  int v7; 
  _BYTE NewController[232]; 
  int v9; 

  AcpiTable = HalSocGetAcpiTable(0x43495041ui64);
  if( AcpiTable && (AcpiTable[5].anonymous_0.LowPart & 1) == 0 )
    return 0;
  memset(NewController, 0i64, sizeof(NewController));
  *(_DWORD *)NewController = 1;
  *(_QWORD *)&NewController[192] = &v9;
  *(_DWORD *)&NewController[4] = 232;
  *(_QWORD *)&NewController[72] = HalpPicWriteEndOfInterrupt;
  *(_DWORD *)&NewController[200] = 4;
  *(_QWORD *)&NewController[88] = HalpPicSetLineState;
  *(_DWORD *)&NewController[204] = 1;
  *(_QWORD *)&NewController[96] = xKdEnumerateDebuggingDevices;
  *(_QWORD *)&NewController[208] = 45056i64;
  *(_QWORD *)&NewController[220] = 0i64;
  *(_QWORD *)&NewController[8] = 0i64;
  *(_QWORD *)&NewController[16] = HalpPicInitializeIoUnit;
  *(_QWORD *)&NewController[56] = 0i64;
  memset(&NewController[24], 0, 24);
  *(_QWORD *)&NewController[104] = 0i64;
  *(_DWORD *)&NewController[216] = 0;
  v9 = 45056;
  result = HalpInterruptRegisterController((_INTERRUPT_INITIALIZATION_BLOCK *)NewController, v1, v2);
  if( result >= 0 )
  {
    memset(NewController, 0i64, sizeof(NewController));
    *(_DWORD *)NewController = 1;
    *(_QWORD *)&NewController[192] = &v9;
    *(_DWORD *)&NewController[4] = 232;
    *(_QWORD *)&NewController[72] = HalpPicWriteEndOfInterrupt;
    *(_QWORD *)&NewController[88] = HalpPicSetLineState;
    *(_QWORD *)&NewController[96] = xKdEnumerateDebuggingDevices;
    *(_DWORD *)&NewController[200] = 4;
    *(_DWORD *)&NewController[204] = 1;
    *(_QWORD *)&NewController[208] = 45057i64;
    *(_QWORD *)&NewController[220] = 0i64;
    *(_QWORD *)&NewController[8] = 0i64;
    *(_QWORD *)&NewController[16] = HalpPicInitializeIoUnit;
    *(_QWORD *)&NewController[56] = 0i64;
    memset(&NewController[24], 0, 24);
    *(_QWORD *)&NewController[104] = 0i64;
    *(_DWORD *)&NewController[216] = 0;
    v9 = 45057;
    result = HalpInterruptRegisterController((_INTERRUPT_INITIALIZATION_BLOCK *)NewController, v4, v5);
    if( result >= 0 )
    {
      *(_DWORD *)&Lines[4] = 1;
      *(_QWORD *)&Lines[12] = 6i64;
      v7 = 0;
      *(_DWORD *)&Lines[20] = -1;
      *(_DWORD *)&Lines[8] = 2;
      *(_OWORD *)&Lines[28] = 0i64;
      *(_DWORD *)&Lines[24] = -1;
      *(_DWORD *)Lines = 45056;
      result = HalpInterruptRegisterLine((_INTERRUPT_LINE_DESCRIPTION *)Lines);
      if( result >= 0 )
      {
        *(_DWORD *)&Lines[12] = 2;
        *(_DWORD *)&Lines[4] = 0;
        *(_DWORD *)&Lines[8] = 8;
        *(_DWORD *)&Lines[24] = -1;
        *(_DWORD *)Lines = 45056;
        result = HalpInterruptRegisterLine((_INTERRUPT_LINE_DESCRIPTION *)Lines);
        if( result >= 0 )
        {
          *(_QWORD *)&Lines[12] = 6i64;
          v7 = 0;
          *(_OWORD *)&Lines[28] = 0i64;
          *(_DWORD *)&Lines[20] = 45056;
          *(_DWORD *)&Lines[4] = 2;
          *(_DWORD *)&Lines[8] = 3;
          *(_DWORD *)&Lines[24] = -1;
          *(_DWORD *)Lines = 45057;
          result = HalpInterruptRegisterLine((_INTERRUPT_LINE_DESCRIPTION *)Lines);
          if( result >= 0 )
          {
            *(_DWORD *)&Lines[12] = 2;
            *(_DWORD *)&Lines[4] = 0;
            *(_DWORD *)&Lines[8] = 8;
            *(_DWORD *)&Lines[24] = -1;
            *(_DWORD *)Lines = 45057;
            return HalpInterruptRegisterLine((_INTERRUPT_LINE_DESCRIPTION *)Lines);
          }
        }
      }
    }
  }
  return result;
}

Referenced by:

HalpInitializeInterrupts