HvlSvmGetDeviceCapabilities
NTSTATUS __fastcall HvlSvmGetDeviceCapabilities(int a1, __int64 a2){
_WORD *v4;
_DWORD *v5;
UINT16 v6;
UINT16 v7;
int v8;
int v9;
PHYSICAL_ADDRESS v11[2];
__int128 v12;
PHYSICAL_ADDRESS PageInfo[2];
__int128 v14;
char StackBuffer[32];
char v16[32];
*(_QWORD *)a2 = 0i64;
*(_DWORD *)(a2 + 8) = 0;
*(_OWORD *)&PageInfo[0].anonymous_0.LowPart = 0i64;
v14 = 0i64;
*(_OWORD *)&v11[0].anonymous_0.LowPart = 0i64;
v12 = 0i64;
v4 = HvlpAcquireHypercallPage(PageInfo, 1ui64, StackBuffer, 0x10ui64);
v5 = HvlpAcquireHypercallPage(v11, 2ui64, v16, 0x10ui64);
*(_QWORD *)v4 = 0x4000000000000000i64;
v4[1] = HIWORD(a1);
*((_QWORD *)v4 + 1) = 0i64;
*v4 = a1;
HvcallInitiateHypercall();
v7 = v6;
if( !v6 )
{
*(_DWORD *)a2 ^= (*v5 ^ *(_DWORD *)a2) & 1;
v8 = *(_DWORD *)a2 ^ ((unsigned __int8)*(_DWORD *)a2 ^ (unsigned __int8)*v5) & 2;
*(_DWORD *)a2 = v8;
v9 = v8 ^ (*v5 ^ v8) & 4;
*(_DWORD *)a2 = v9;
*(_DWORD *)a2 = *v5 ^ (*v5 ^ v9) & 0x7FFFFFFF;
*(_DWORD *)(a2 + 4) = v5[1];
*(_DWORD *)(a2 + 8) = v5[2];
}
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)v11);
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
return HvlpHvToNtStatus(v7);
}Referenced by:
No references.