HalpHvMapDeviceInterrupt
NTSTATUS __stdcall HalpHvMapDeviceInterrupt(CHAR a1, INT64 a2, INT64 a3, INT64 a4){
int v5;
int v6;
int v7;
NTSTATUS result;
__int64 v9;
int v10;
unsigned __int64 v11;
__int128 v12;
__int128 v13;
__int128 v14;
v11 = 0x8000000000000000ui64;
LOBYTE(v11) = a1;
v5 = *(_DWORD *)(a3 + 20);
v12 = 0i64;
v13 = 0i64;
v14 = 0i64;
v6 = v5 - 1;
if( v6 )
{
v7 = v6 - 1;
if( v7 )
{
if( v7 == 1 )
LODWORD(v13) = 2;
}
else
{
LODWORD(v13) = 4;
}
}
else
{
LODWORD(v14) = *(_DWORD *)(a3 + 48);
}
DWORD2(v13) = 1;
DWORD1(v13) = *(_DWORD *)(a3 + 8) == 0;
result = ((__int64(__fastcall *)(unsigned __int64, __int128 *, INT64, __int128 *))qword_140C4A168)(
v11,
&v13,
a4,
&v12);
if( result < 0 )
{
*(_DWORD *)(a3 + 12) &= ~0x10u;
}
else
{
v9 = *((_QWORD *)&v12 + 1);
v10 = HIDWORD(v12);
*(_DWORD *)(a3 + 32) = DWORD2(v12);
*(_QWORD *)(a3 + 40) = v9;
*(_DWORD *)(a3 + 24) = 8;
*(_DWORD *)(a3 + 36) = v10;
}
return result;
}Referenced by:
HalpInterruptEnableNmi
HalpInterruptRemap
HalpInterruptRemapFixedLines