Geoff Chappell - Software Analyst
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.
The HV_HYPERVISOR_IPT_FEATURES is new for the 1903 release of Windows 10.
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.
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.
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 |
Mask | Definition |
---|---|
0x00000001 |
UINT32 ChainedToPA : 1; |
0x00000002 |
UINT32 Enlightened : 1; |
UINT32 Reserved0 : 10; |
|
0xFFFFF000 |
UINT32 MaxTraceBufferSizePerVtl : 20; |
Mask | Definition | Versions |
---|---|---|
0x00000001 |
UINT32 HypervisorIpt : 1; |
2004 and higher |
UINT32 Reserved3 : 31; |
2004 and higher |