HV_IMPLEMENTATION_LIMITS

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

Availability

The HV_IMPLEMENTATION_LIMITS is defined in Windows 8.1 and higher, having developed from an inline definition for the MsHvImplementationLimits member of the HV_CPUID_RESULT union.

Documentation Status

The HV_IMPLEMENTATION_LIMITS structure itself is not documented. Some of 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 does document—or represents as documented—in the Hypervisor Top-Level Functional Specification. If the structure 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. That said, the Specification that is offered today (12th November 2016) as the most recent version is a PDF that is three years old. Despite the Microsoft Open Specification Promise, the return of meaningful information in ecx seems not yet to be documented anywhere in any sense.

Layout

The HV_IMPLEMENTATION_LIMITS 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 Versions
0x00
UINT MaxVirtualProcessorCount;
6.1 and higher
0x04
UINT MaxLogicalProcessorCount;
6.1 and higher
0x08
UINT ReservedEcx;
6.1 only
UINT MaxInterruptMappingCount;
6.2 and higher
0x0C
UINT ReservedEdx;
6.1 to 6.3
UINT Reserved;
10.0 and higher

Definition before version 6.3 means prior appearance in the HV_CPUID_RESULT union.