HV_HYPERVISOR_INTERFACE_INFO

The HV_HYPERVISOR_INTERFACE_INFO structure collects the information that a hypervisor’s cpuid leaf 0x40000001 produces in the eax, ebx, ecx and edx registers.

Availability

The HV_HYPERVISOR_INTERFACE_INFO is defined in Windows 8.1 and higher, having developed from the HvInterface member of the HV_CPUID_RESULT union.

Documentation Status

The HV_HYPERVISOR_INTERFACE_INFO structure itself is not documented. Its members, having previously been defined in the HV_CPUID_RESULT, are documented in the Windows Driver Kit (WDK) for Windows 7, which also provided a C-language definition in the HVGDK.H header file.

The structure anyway repackages material that Microsoft documents in the Hypervisor Top-Level Functional Specification. If it or its members’ previous definitions have become undocumented, 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_INTERFACE_INFO is 0x10 bytes. Names and definitions below are from the C-language definition in the WDK for Windows 7 and from type information in the symbol files for URLMON.DLL in Windows 8 and higher. 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 Interface;
0x04
UINT Reserved1;
0x08
UINT Reserved2;
0x0C
UINT Reserved3;

The kernel deems the hypervisor as Microsoft-compatible if the Interface is '1#vH’, i.e., reading as “Hv#1” in the successive bytes of the integer, which by the way is defined in the HVGDK.H file as HvMicrosoftHypervisorInterface. A Microsoft-compatible hypervisor is assumed to support cpuid leaves 0x40000002 to 0x40000005 inclusive.