HV_HYPERVISOR_IPT_FEATURES

The HV_HYPERVISOR_IPT_FEATURES structure (formally _HV_HYPERVISOR_IPT_FEATURES ) collects the flags that a Microsoft-compatible hypervisor’s cpuid leaf 0x4000000B produces in the eax, ebx, ecx and edx registers.

Availability

The HV_HYPERVISOR_IPT_FEATURES is new for the 1903 release of Windows 10.

Access

The kernel is not known to expose this structure or any reading of cpuid leaf 0x4000000B through any interface, documented or not, even in kernel mode.

Documentation Status

The HV_HYPERVISOR_IPT_FEATURES structure is not documented. The hypervisor’s cpuid implementation is documented in the Hypervisor Top-Level Functional Specification (TLFS). What’s offered today, 10th December 2022, as the specification’s most recent version is a PDF that is getting on to three years old (version 6.0b, dated February 2020). it extends only to leaf 0x4000000A. The reality behind the superficially fine words of the Microsoft Open Specification Promise is that the Hyper-V implementation, and presumably Microsoft’s use of it to Microsoft’s advantage for Microsoft’s purposes, runs ahead of the documentation that Microsoft opens for general use.

As for the HV_HYPERVISOR_IPT_FEATURES as Microsoft’s particular expression of the output from cpuid leaf 0x4000000B, disclosure by Microsoft is conspicuously thin. The practical equivalent of a C-language definition might be published as type information in symbol files, but I yet know of it only as type information in two statically linked libraries. One, named CLFSMGMT.LIB, is among the many that are supplied with the Software Development Kit (SDK) for user-mode programming. Type information for the HV_HYPERVISOR_IPT_FEATURES drops out of this library in Version 2004. The other is more obviously related to hypervisors. It is named KDHV.LIB. Microsoft distributes it among the programming samples in the Debugging Tools for Windows.

Layout

The HV_HYPERVISOR_IPT_FEATURES is 0x10 bytes in both 32-bit and 64-bit Windows. Offsets and definitions below are from type information in KDHV.LIB.

Offset Definition Versions
0x00
/*  bit fields, see below  */
1903 and higher
0x04
UINT32 Reserved1;
1903 and higher
0x08
UINT32 Reserved2;
1903 and higher
0x0C
UINT32 Reserved3;
1903 only
/*  bit fields, see below  */
2004 and higher

Offset 0x00 (EAX)

Mask Definition
0x00000001
UINT32 ChainedToPA : 1;
0x00000002
UINT32 Enlightened : 1;
 
UINT32 Reserved0 : 10;
0xFFFFF000
UINT32 MaxTraceBufferSizePerVtl : 20;

Offset 0x0C (EDX)

Mask Definition Versions
0x00000001
UINT32 HypervisorIpt : 1;
2004 and higher
 
UINT32 Reserved3 : 31;
2004 and higher