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.