HalpHandleMaskUnmaskSecondaryInterrupt
INT64 __fastcall HalpHandleMaskUnmaskSecondaryInterrupt(UINT64 InputGsiv, UINT64 Flags, INT64 MaskRequest){
char v3;
unsigned int v4;
unsigned int v5;
int v6;
LIST_ENTRY *SecondaryIcEntry;
LIST_ENTRY *v8;
__int64 v9;
_LIST_ENTRY *Flink;
__int64 v11;
v3 = MaskRequest;
v4 = Flags;
v5 = InputGsiv;
if( SecondaryIcServicesEnabled )
{
if( (unsigned __int8)HalpIsInterruptTypeSecondary(0i64, (unsigned int)InputGsiv) )
{
SecondaryIcEntry = HalpFindSecondaryIcEntry(v5);
v8 = SecondaryIcEntry;
if( SecondaryIcEntry )
{
v9 = 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 )
BYTE4(v8[(unsigned int)v9 + 10].Blink) = 0;
}
else
{
Flink = SecondaryIcEntry[5].Flink;
v11 = v9;
BYTE4(v8[v11 + 10].Blink) = 1;
v6 = ((__int64(__fastcall *)(_LIST_ENTRY *, _QWORD, _QWORD))Flink)(v8[2].Flink, v4, v5);
if( v6 < 0 )
BYTE4(v8[v11 + 10].Blink) = 0;
}
HalpReleaseSecondaryIcEntryShared((volatile INT32 *)v8, 1);
}
else
{
return(unsigned int)-1073700575;
}
}
else
{
return(unsigned int)-1073741811;
}
}
else
{
return(unsigned int)-1073741637;
}
return(unsigned int)v6;
}Referenced by:
HalpMaskInterrupt
HalpUnmaskInterrupt