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