HalpInterruptRequestInterrupt
VOID __fastcall HalpInterruptRequestInterrupt(UINT64 Gsiv){
unsigned int v1;
_DWORD *LinesForGsiRange;
_DWORD *v3;
_REGISTERED_INTERRUPT_CONTROLLER *v4;
unsigned __int64 v5;
__int64 v6;
__int64 v7;
v7 = 0i64;
v1 = Gsiv;
LinesForGsiRange = HalpInterruptFindLinesForGsiRange(Gsiv, (int)Gsiv + 1);
v3 = LinesForGsiRange;
if( LinesForGsiRange )
{
LODWORD(v7) = LinesForGsiRange[4];
HIDWORD(v7) = v1 + LinesForGsiRange[5] - LinesForGsiRange[7];
v4 = HalpInterruptLookupController((unsigned int)v7);
if( v4 )
{
v5 = (unsigned __int8)HalpAcquireHighLevelLock(&qword_140C49C40);
v6 = *((_QWORD *)v3 + 5) + 56i64 * (v1 - v3[7]);
if( (*(_DWORD *)(v6 + 12) & 0x10) != 0 )
v4->FunctionTable.RequestInterrupt(
v4->InternalData,
(_INTERRUPT_LINE *)&v7,
(_INTERRUPT_TARGET *)(v6 + 24),
*(_DWORD *)(v6 + 48),
(_INTERRUPT_LINE *)(v6 + 16));
KxReleaseSpinLock(&qword_140C49C40);
__writecr8(v5);
}
else
{
*(&CmpDummyThreadEvent + 1789) = 17;
}
}
else if( ((unsigned __int8(__fastcall *)(_QWORD, _QWORD))off_140C00780[0])(0i64, v1) )
{
HalpInterruptRequestSecondaryInterrupt(v1);
}
else
{
*(&CmpDummyThreadEvent + 1789) = 18;
}
}Referenced by:
No references.