HalpUnmaskInterrupt

NTSTATUS __stdcall HalpUnmaskInterrupt(UINT64 InputGsiv, UINT64 Flags){
  unsigned int v2; 
  unsigned int v3; 
  unsigned int *LinesForGsiRange; 
  unsigned int *v5; 
  _REGISTERED_INTERRUPT_CONTROLLER *v6; 
  unsigned __int64 v7; 
  _INTERRUPT_LINE_STATE *v8; 
  unsigned int v9; 
  unsigned int v10; 
  NTSTATUS v11; 
  _INTERRUPT_LINE Line; 

  Line = 0i64;
  v2 = Flags;
  v3 = InputGsiv;
  LinesForGsiRange = HalpInterruptFindLinesForGsiRange(InputGsiv, (int)InputGsiv + 1);
  v5 = LinesForGsiRange;
  if( !LinesForGsiRange )
  {
    if( ((unsigned __int8(__fastcall *)(_QWORD, _QWORD))off_140C00780[0])(0i64, v3) )
      return HalpHandleMaskUnmaskSecondaryInterrupt(v3, v2, 0i64);
    *(&CmpDummyThreadEvent + 1789) = 19;
    return -1073741811;
  }
  Line.UnitId = LinesForGsiRange[4];
  Line.Line = v3 + LinesForGsiRange[5] - LinesForGsiRange[7];
  v6 = HalpInterruptLookupController(Line.UnitId);
  if( !v6 )
  {
    *(&CmpDummyThreadEvent + 1789) = 17;
    return -1073741811;
  }
  v7 = (unsigned __int8)HalpAcquireHighLevelLock(&qword_140C49C40);
  v8 = (_INTERRUPT_LINE_STATE *)(*((_QWORD *)v5 + 5) + 56i64 * (v3 - v5[7]));
  v9 = v8->Flags;
  if( (v2 & 2) != 0 )
    v10 = v9 & 0xFFFFFFDF;
  else
    v10 = v9 | 0x10;
  v8->Flags = v10;
  v11 = HalpInterruptSetLineStateInternal(v6, &Line, v8);
  KxReleaseSpinLock(&qword_140C49C40);
  __writecr8(v7);
  return v11;
}

Referenced by:

No references.