Geoff Chappell - Software Analyst
The HV_HYPERVISOR_VERSION_INFO structure (formally _HV_HYPERVISOR_VERSION_INFO) collects the information that a hypervisor’s cpuid leaf 0x40000002 produces in the eax, ebx, ecx and edx registers.
The HV_HYPERVISOR_VERSION_INFO is defined in version 6.0 and higher.
The kernel provides two ways to get the whole output from cpuid leaf 0x40000002 into a caller-supplied HV_HYPERVISOR_VERSION_INFO:
Both are available only in version 10.0 or higher.
The HV_HYPERVISOR_VERSION_INFO is documented in the Windows Driver Kit (WDK) for Windows 7, which was the last to have documentation included. This kit also provides a C-language definition in the HVGDK.H header file. Except that documentation continued to a separately downloadable package for merging into Visual Studio 2012, later kits have neither the documentation nor the header.
The structure anyway repackages material that Microsoft documents in the Hypervisor Top-Level Functional Specification (TLFS). If it has 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.
The HV_HYPERVISOR_VERSION_INFO is 0x10 bytes in both 32-bit and 64-bit Windows.
Offsets, names and definitions below are from the C-language definition in the WDK for Windows 7 and from type information in symbol files for the kernel in Windows 8.1 (only) and for URLMON.DLL in Windows 8 through to the 1709 release of Windows 10. 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! Names and definitions for later versions, presently up to and including Version 2004, are checked against type information in a statically linked library named KDHV.LIB which Microsoft distributes with programming samples in the Debugging Tools for Windows. That the definition reaches back at least to Windows Vista is known from type information in a statically linked library named CLFSMGMT.LIB which Microsoft distributes with the Software Development Kit (SDK).
Offset | Definition |
---|---|
0x00 |
UINT32 BuildNumber; |
0x04 |
UINT32 MinorVersion : 16; UINT32 MajorVersion : 16; |
0x08 |
UINT32 ServicePack; |
0x0C |
UINT32 ServiceNumber : 24; UINT32 ServiceBranch : 8; |