HV_HYPERVISOR_HARDWARE_FEATURES

The HV_HYPERVISOR_HARDWARE_FEATURES structure collects the flags that a Microsoft-compatible hypervisor’s cpuid leaf 0x40000006 produces in the eax, ebx, ecx and edx registers.

Availability

The HV_HYPERVISOR_HARDWARE_FEATURES is known only for Windows 8.1, being superseded by the HV_X64_HYPERVISOR_HARDWARE_FEATURES. It seems to have developed from an inline definition for the MsHvHardwareFeatures member of the HV_CPUID_RESULT union.

Documentation Status

The HV_HYPERVISOR_HARDWARE_FEATURES is not documented but the structure just repackages material that Microsoft documents in the Hypervisor Top-Level Functional Specification. It may be just that Microsoft regards the structure as no more than a convenience for Microsoft’s own programming in the loader and kernel, if not in the hypervisor itself.

Layout

The HV_HYPERVISOR_HARDWARE_FEATURES is 0x10 bytes. Names and definitions below are from type information in the symbol files for URLMON.DLL in Windows 8.1. Well might you wonder what URLMON.DLL has to do with the hypervisor such that its symbol files have type information for this structure but the kernel’s don’t!

Offset Definition
0x00
UINT ApicOverlayAssistInUse : 1;                    // 0x00000001 (6.2)
UINT MsrBitmapsInUse : 1;                           // 0x00000002 (6.2)
UINT ArchitecturalPerformanceCountersInUse : 1;     // 0x00000004 (6.2)
UINT SecondLevelAddressTranslationInUse : 1;        // 0x00000008 (6.2)
UINT DmaRemappingInUse : 1;                         // 0x00000010 (6.2)
UINT InterruptRemappingInUse : 1;                   // 0x00000020 (6.2)
UINT MemoryControlScrubberPresent : 1;              // 0x00000040 (6.2)
UINT Reserved : 25;
0x04
UINT ReservedEbx;
0x08
UINT ReservedEcx;
0x0C
UINT ReservedEdx;

Version numbers in parentheses date each member’s introduction, as known from prior appearance in the HV_CPUID_RESULT union.