HalpHandleMaskUnmaskSecondaryInterrupt

NTSTATUS __stdcall HalpHandleMaskUnmaskSecondaryInterrupt(UINT64 InputGsiv, UINT64 Flags, INT64 MaskRequest){
  char v3; 
  unsigned int v4; 
  unsigned int v5; 
  NTSTATUS v6; 
  char v7; 
  _LIST_ENTRY *SecondaryIcEntry; 
  INT64 v9; 
  __int64 v10; 
  _LIST_ENTRY *Flink; 
  __int64 v12; 

  v3 = MaskRequest;
  v4 = Flags;
  v5 = InputGsiv;
  if( !byte_140C50754 )
    return -1073741637;
  HalpIsInterruptTypeSecondary(0i64, (unsigned int)InputGsiv);
  if( !v7 )
    return -1073741811;
  SecondaryIcEntry = HalpFindSecondaryIcEntry(v5);
  v9 = (INT64)SecondaryIcEntry;
  if( !SecondaryIcEntry )
    return -1073700575;
  v10 = v5 - LODWORD(SecondaryIcEntry[1].Flink);
  if( v3 )
  {
    v6 = ((__int64(__fastcall *)(_LIST_ENTRY *, _QWORD, _QWORD))SecondaryIcEntry[4].Blink)(
           SecondaryIcEntry[2].Flink,
           v4,
           v5);
    if( v6 >= 0 )
      *(_BYTE *)(v9 + 16i64 * (unsigned int)v10 + 172) = 0;
  }
  else
  {
    Flink = SecondaryIcEntry[5].Flink;
    v12 = 2 * v10;
    *(_BYTE *)(v9 + 8 * v12 + 172) = 1;
    v6 = ((__int64(__fastcall *)(_QWORD, _QWORD, _QWORD))Flink)(*(_QWORD *)(v9 + 32), v4, v5);
    if( v6 < 0 )
      *(_BYTE *)(v9 + 8 * v12 + 172) = 0;
  }
  HalpReleaseSecondaryIcEntryShared(v9, 1);
  return v6;
}

Referenced by:

HalpMaskInterrupt
HalpUnmaskInterrupt