HvlMapDeviceInterrupt
__int64 __fastcall HvlMapDeviceInterrupt(__int64 a1, _OWORD *a2, __int64 *a3, _OWORD *a4){
__int64 v7;
__int64 v8;
char v9;
LONGLONG *v10;
LONGLONG *v11;
__int64 v12;
UINT16 v13;
INT16 v14;
NTSTATUS v15;
__int128 v18[2];
__int128 v19[2];
INT64 v20[2];
__int128 v21;
LONGLONG v22;
int result;
_BYTE result_4[172];
char v25[112];
char v26[288];
v22 = 0i64;
*(_OWORD *)v20 = 0i64;
v21 = 0i64;
memset(v18, 0, sizeof(v18));
memset(v19, 0, sizeof(v19));
memset((INT64)&result, 0i64);
if( a3 )
{
result = 1310721;
memset((INT64)result_4, 0i64);
v7 = *((unsigned __int16 *)a3 + 4);
v8 = *a3;
if( (unsigned __int16)result <= (unsigned __int16)v7 )
LOWORD(result) = v7 + 1;
*(_QWORD *)&result_4[8 * v7 + 4] |= v8;
}
v9 = 0;
while( 1 )
{
v10 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v19, 2, (__int64)v25, 56i64);
v11 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v18, 1, (__int64)v26, 144i64);
memset((INT64)v11, 0i64);
*(_OWORD *)(v11 + 5) = *a2;
*(_OWORD *)(v11 + 7) = a2[1];
if( a3 )
{
if( (unsigned int)HvlpAffinityToHvProcessorSet((__int64)&result, v11 + 8, (v18[0] & 2) != 0 ? 64 : 4016) == -1 )
{
HvlpReleaseHypercallPage((unsigned int *)v18);
v11 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v18, 1, 0i64, 0i64);
memset((INT64)v11, 0i64);
*(_OWORD *)(v11 + 5) = *a2;
*(_OWORD *)(v11 + 7) = a2[1];
HvlpAffinityToHvProcessorSet((__int64)&result, v11 + 8, 0xFB0u);
}
*((_DWORD *)v11 + 15) |= 2u;
}
else
{
*(_OWORD *)(v11 + 7) = 0i64;
}
*v11 = -1i64;
v11[1] = a1;
v11[2] = 1i64;
v12 = v11[2];
if( v9 )
v12 = 3i64;
v11[2] = v12;
HvcallInitiateHypercall();
v14 = v13;
if( v13 )
{
v15 = HvlpHvToNtStatus(v13);
}
else
{
*a4 = *(_OWORD *)v10;
*(_OWORD *)v20 = *((_OWORD *)v10 + 1);
v21 = *((_OWORD *)v10 + 2);
v15 = 0;
v22 = v10[6];
}
HvlpReleaseHypercallPage((unsigned int *)v18);
HvlpReleaseHypercallPage((unsigned int *)v19);
if( !HvlpHvStatusIsInsufficientMemory(v14) )
break;
if( HvlpHandleInsufficientMemory() < 0 )
v9 = 1;
}
if( v15 >= 0 )
HvlpLogIommuEvent((INT64)v20);
return(unsigned int)v15;
}Referenced by:
No references.