HvlSharedIsr
INT8 __stdcall HvlSharedIsr(){
UINT64 v0;
int v1;
unsigned int LpIndexFromProcessorIndex;
__int64 v3;
unsigned int *v4;
__int64 v5;
LOBYTE(v1) = HvlpFlags;
if( (HvlpFlags & 2) != 0 )
{
LODWORD(v0) = KeGetPcr()->Prcb.Number;
LpIndexFromProcessorIndex = HvlGetLpIndexFromProcessorIndex(v0);
v3 = *((_QWORD *)HvlpGetLpcbByLpIndex(LpIndexFromProcessorIndex) + 5);
_m_prefetchw((const void *)(v3 + 1024));
v1 = *(_DWORD *)(v3 + 1024);
if( v1 )
{
v4 = (unsigned int *)(v3 + 1040);
if( *(_DWORD *)(v3 + 1024) == -2147483612 )
{
HvlpHandleIommuFaultMessage((INT64)v4);
}
else
{
v5 = qword_140CF6288 + 104i64 * *v4;
*(_DWORD *)(v5 + 4) = 2;
KiInsertQueueDpc((_KDPC *)(v5 + 8), 0i64, 0i64, 0i64, 0);
}
*(_DWORD *)(v3 + 1024) = 0;
LOBYTE(v1) = *(_BYTE *)(v3 + 1029);
if( (v1 & 1) != 0 )
{
LOBYTE(v1) = 0;
__writemsr(0x40000084u, 0i64);
}
}
}
return v1;
}Referenced by:
HvlEnlightenProcessor
KiHvInterruptSubDispatch