HalpConnectThermalInterrupt

NTSTATUS __stdcall HalpConnectThermalInterrupt(ULONG_PTR BugCheckParameter4){
  INT64 v1; 
  void *v2; 
  INT64 v3; 
  NTSTATUS result; 
  _REGISTERED_INTERRUPT_CONTROLLER *v5; 
  INT64 v6; 
  KPCR *Pcr; 
  PVOID v8; 
  UINT64 SourceLine; 
  _INTERRUPT_LINE_STATE LineState; 
  INT64 v11; 
  _INTERRUPT_LINE Line; 

  *(_DWORD *)&LineState.EmulateActiveBoth = 0;
  *((_DWORD *)&LineState.ProcessorTarget.Target + 1) = 0;
  v2 = *(void **)&BugCheckParameter4;
  *(_QWORD *)(&LineState.ProcessorTarget.ClusterId + 1) = 0i64;
  HIDWORD(LineState.ProcessorTarget.HypervisorTarget.InterruptData) = 0;
  LODWORD(v3) = KeGetPcr()->Prcb.Number;
  LODWORD(v11) = 0;
  result = HalpInterruptGetIdentifiers(v3, (INT64)&v11, 0i64, v1);
  if( result >= 0 )
  {
    v5 = (_REGISTERED_INTERRUPT_CONTROLLER *)Controller;
    Line.UnitId = *(_DWORD *)(Controller + 232);
    Line.Line = -2;
    if( *(_DWORD *)(Controller + 216) == 2 && HalpInterruptFindLines((unsigned int *)&Line) )
    {
      Pcr = KeGetPcr();
      if( !BYTE1(Pcr->HalReserved[5]) )
      {
        if( *(&CmpDummyThreadEvent + 844) )
        {
          if( (void *)*(&CmpDummyThreadEvent + 844) != v2 )
          {
            LODWORD(SourceLine) = 3391;
            HalpInterruptSetProblemEx(
              0i64,
              InterruptProblemMismatchedThermalLvtIsr,
              0i64,
              "minkernel\\hals\\lib\\interrupts\\common\\intsup.c",
              SourceLine);
            KeBugCheckEx(0x5Cu, (PVOID)0x200, (PVOID)*(&CmpDummyThreadEvent + 1789), v8, v2);
          }
        }
        else
        {
          *(&CmpDummyThreadEvent + 844) = v2;
        }
        HalpInterruptSetIdtEntry(0xCDui64, HalpInterruptThermalService, 12, v6, (UINT64 *)0xFFFFFFFFFFFFFFFFi64);
        BYTE1(Pcr->HalReserved[5]) = 1;
        goto LABEL_8;
      }
      if( (void *)*(&CmpDummyThreadEvent + 844) == v2 )
      {
LABEL_8:
        *(_DWORD *)&LineState.EmulateActiveBoth = 0;
        *((_DWORD *)&LineState.ProcessorTarget.Target + 1) = 0;
        *(_QWORD *)(&LineState.ProcessorTarget.ClusterId + 1) = 0i64;
        HIDWORD(LineState.ProcessorTarget.HypervisorTarget.InterruptData) = 0;
        LineState.Routing.UnitId = -1;
        LineState.ProcessorTarget.PhysicalTarget = v11;
        LineState.Polarity = InterruptActiveHigh;
        LineState.TriggerMode = Latched;
        LineState.Flags = 16;
        LineState.Routing.Line = 1;
        LineState.ProcessorTarget.Target = InterruptTargetPhysical;
        LineState.Vector = 205;
        LineState.Priority = HalpInterruptGetPriority((INT64)v5, 0xCDu);
        return HalpInterruptSetLineStateInternal(v5, &Line, &LineState);
      }
      LODWORD(SourceLine) = 3421;
      HalpInterruptSetProblemEx(
        0i64,
        InterruptProblemMismatchedThermalLvtIsr,
        0i64,
        "minkernel\\hals\\lib\\interrupts\\common\\intsup.c",
        SourceLine);
      return -1073741275;
    }
    else
    {
      return -1073741637;
    }
  }
  return result;
}

Referenced by:

No references.