SYSTEM_HYPERVISOR_USER_SHARED_DATA - NtDoc

Native API online documentation, based on the System Informer (formerly Process Hacker) phnt headers
#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;

#endif

View code on GitHub

NtDoc

No description available.