#ifndef _NTEXAPI_H
// rev
/**
* The SYSTEM_HYPERVISOR_USER_SHARED_DATA structure contains information shared with the hypervisor and user-mode.
*
* This structure is populated by the hypervisor (when present) to allow user-mode components to perform
* high-resolution time calculations without requiring a hypercall or kernel transition.
*/
typedef struct _SYSTEM_HYPERVISOR_USER_SHARED_DATA
{
/**
* Lock used to synchronize updates to the timing fields.
*
* The hypervisor increments this value before and after updating the
* QPC multiplier and bias. User-mode callers can sample this value
* before and after reading the timing fields to detect whether an
* update occurred mid-read and retry if necessary.
*/
volatile ULONG TimeUpdateLock;
/**
* Reserved field - The hypervisor does not assign this field.
*/
ULONG Reserved0;
/**
* Multiplier used to convert hypervisor QPC ticks to host time.
*
* This value is applied to the hypervisor's virtualized performance
* counter to compute a stable, high-resolution timebase. The multiplier
* is chosen by the hypervisor based on the underlying hardware timer
* source and virtualization mode.
*/
ULONGLONG QpcMultiplier;
/**
* Bias applied after QPC multiplication to produce final time.
*
* The hypervisor uses this bias to align the virtualized QPC value with
* the host's notion of system time. Combined with QpcMultiplier, this
* allows user-mode components to compute consistent time values even
* under virtualization.
*/
ULONGLONG QpcBias;
} SYSTEM_HYPERVISOR_USER_SHARED_DATA, *PSYSTEM_HYPERVISOR_USER_SHARED_DATA;
View code on GitHubNo description available.