HalpMaskInterrupt
INT64 __fastcall HalpMaskInterrupt(UINT64 InputGsiv, UINT64 Flags){
unsigned int v2;
unsigned int v3;
_DWORD *LinesForGsiRange;
_DWORD *v5;
ULONG_PTR *v6;
unsigned __int64 v7;
__int64 v8;
int v9;
unsigned int v10;
unsigned int v11;
INT64 v13;
__int64 v14;
v14 = 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) )
{
LOBYTE(v13) = 1;
return(unsigned int)HalpHandleMaskUnmaskSecondaryInterrupt(v3, v2, v13);
}
HalpInterruptLastProblem = 19;
return(unsigned int)-1073741811;
}
LODWORD(v14) = LinesForGsiRange[4];
HIDWORD(v14) = v3 + LinesForGsiRange[5] - LinesForGsiRange[7];
v6 = HalpInterruptLookupController(v14);
if( !v6 )
return(unsigned int)-1073741811;
v7 = (unsigned __int8)HalpAcquireHighLevelLock(&HalpInterruptLock);
v8 = *((_QWORD *)v5 + 5) + 56i64 * (v3 - v5[7]);
v9 = *(_DWORD *)(v8 + 12);
if( (v2 & 1) != 0 )
v10 = v9 | 0x20;
else
v10 = v9 & 0xFFFFFFEF;
*(_DWORD *)(v8 + 12) = v10;
v11 = HalpInterruptSetLineStateInternal((__int64)v6, (__int64)&v14, v8);
KxReleaseSpinLock(&HalpInterruptLock);
__writecr8(v7);
return v11;
}Referenced by:
No references.