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.