WHvRunVirtualProcessor

Ejecuta un procesador virtual en una partición, lo que le permite ejecutar código invitado.

Syntax

// Exit reasons
typedef enum WHV_RUN_VP_EXIT_REASON
{
    WHvRunVpExitReasonNone                   = 0x00000000,

    // Standard exits caused by operations of the virtual processor
    WHvRunVpExitReasonMemoryAccess           = 0x00000001,
    WHvRunVpExitReasonX64IoPortAccess        = 0x00000002,
    WHvRunVpExitReasonUnrecoverableException = 0x00000004,
    WHvRunVpExitReasonInvalidVpRegisterValue = 0x00000005,
    WHvRunVpExitReasonUnsupportedFeature     = 0x00000006,
    WHvRunVpExitReasonX64InterruptWindow     = 0x00000007,
    WHvRunVpExitReasonX64Halt                = 0x00000008,
    WHvRunVpExitReasonX64ApicEoi             = 0x00000009,

    // Additional exits that can be configured through partition properties
    WHvRunVpExitReasonX64MsrAccess           = 0x00001000,
    WHvRunVpExitReasonX64Cpuid               = 0x00001001,
    WHvRunVpExitReasonException              = 0x00001002,
    WHvRunVpExitReasonX64Rdtsc               = 0x00001003,

    // Exits caused by the host
    WHvRunVpExitReasonCanceled               = 0x00002001
} WHV_RUN_VP_EXIT_REASON;
 
// WHvRunVirtualProcessor output buffer
typedef struct WHV_RUN_VP_EXIT_CONTEXT
{
    WHV_RUN_VP_EXIT_REASON ExitReason;
    UINT32 Reserved;
    WHV_VP_EXIT_CONTEXT VpContext;

    union
    {
        WHV_MEMORY_ACCESS_CONTEXT MemoryAccess;
        WHV_X64_IO_PORT_ACCESS_CONTEXT IoPortAccess;
        WHV_X64_MSR_ACCESS_CONTEXT MsrAccess;
        WHV_X64_CPUID_ACCESS_CONTEXT CpuidAccess;
        WHV_VP_EXCEPTION_CONTEXT VpException;
        WHV_X64_INTERRUPTION_DELIVERABLE_CONTEXT InterruptWindow;
        WHV_X64_UNSUPPORTED_FEATURE_CONTEXT UnsupportedFeature;
        WHV_RUN_VP_CANCELED_CONTEXT CancelReason;
        WHV_X64_APIC_EOI_CONTEXT ApicEoi;
        WHV_X64_RDTSC_CONTEXT ReadTsc;
    };
} WHV_RUN_VP_EXIT_CONTEXT;
 
HRESULT
WINAPI
WHvRunVirtualProcessor(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ UINT32 VpIndex,
    _Out_writes_bytes_(ExitContextSizeInBytes) VOID* ExitContext,
    _In_ UINT32 ExitContextSizeInBytes
    );

Parameters

Partition

Identificador del objeto de partición.

VpIndex

Especifica el índice del procesador virtual que se ejecuta.

ExitContext

Especifica el búfer de salida que recibe la estructura de contexto que proporciona la información sobre el motivo por el que la WHvRunVirtualProcessor función ha devuelto.

ExitContextSizeInBytes

Especifica el tamaño del búfer que recibe el contexto de salida, en bytes.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es S_OK.

Remarks

Se ejecuta un procesador virtual (es decir, habilitado para ejecutar código invitado) mediante una llamada a la WHvRunVirtualProcessor función . La llamada se bloquea sincrónicamente hasta que el procesador virtual realiza una operación que la pila de virtualización debe controlar (por ejemplo, el acceso a la memoria en el espacio GPA que no está asignado o no es accesible) o la pila de virtualización solicita explícitamente una salida de la función (por ejemplo, para insertar una interrupción para el procesador virtual o para cambiar el estado de la máquina virtual).

Requisitos

Requirement Value
Windows mínima admitidas Windows 10, versión 1803 (x64); Windows 11, versión 24H2, compilación 26100.3915 (Arm64)
Header WinHvPlatform.h
Biblioteca WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Consulte también