HviGetIptFeatures

CHAR __stdcall HviGetIptFeatures(INT32 *a1){
  __int32 v2; 
  __int64 v3; 
  _HV_VENDOR_AND_MAX_FUNCTION HvVendorAndMaxFunctionOut; 
  _HV_X64_HYPERVISOR_FEATURES HvFeaturesOut; 

  HvVendorAndMaxFunctionOut = 0i64;
  HvFeaturesOut = 0i64;
  LOBYTE(v2) = HviIsHypervisorMicrosoftCompatible();
  if( (_BYTE)v2
    && (HviGetHypervisorVendorAndMaxFunction(&HvVendorAndMaxFunctionOut),
        HvVendorAndMaxFunctionOut.MaxFunction >= 0x4000000B)
    && (HviGetHypervisorFeatures(&HvFeaturesOut), (HvFeaturesOut._bf_8 & 0x800000000000000i64) != 0) )
  {
    v3 = __cpuid(1073741835, 0);
    v2 = EAX(v3);
    *a1 = v2;
    a1[1] = EBX(v3);
    a1[2] = ECX(v3);
    a1[3] = EDX(v3);
  }
  else
  {
    *(_QWORD *)a1 = 0i64;
    *((_QWORD *)a1 + 1) = 0i64;
  }
  return v2;
}

Referenced by:

KiGetIptInfo