WHvRunVirtualProcessor

Uruchamia procesor wirtualny w partycji, umożliwiając mu wykonywanie kodu gościa.

Składnia

// 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

Dojście do obiektu partycji.

VpIndex

Określa indeks wykonywanego procesora wirtualnego.

ExitContext

Określa bufor wyjściowy, który odbiera strukturę kontekstu, podając informacje o przyczynie, która spowodowała WHvRunVirtualProcessor zwrócenie funkcji.

ExitContextSizeInBytes

Określa rozmiar buforu, który odbiera kontekst zakończenia w bajtach.

Wartość zwracana

Jeśli funkcja powiedzie się, zwracana wartość to S_OK.

Remarks

Procesor wirtualny jest uruchamiany (czyli włączony do wykonywania kodu gościa WHvRunVirtualProcessor ) przez wywołanie funkcji. Wywołanie blokuje synchronicznie, dopóki procesor wirtualny nie wykona operacji, którą musi obsłużyć stos wirtualizacji (na przykład uzyskiwanie dostępu do pamięci w przestrzeni gpA, która nie jest mapowana lub niedostępna) albo stos wirtualizacji jawnie żąda zakończenia funkcji (na przykład w celu wstrzyknięcia przerwania procesora wirtualnego lub zmiany stanu maszyny wirtualnej).

Requirements

Requirement Value
Minimalna obsługiwana Windows Windows 10, wersja 1803 (x64); Windows 11, wersja 24H2, kompilacja 26100.3915 (Arm64)
Header WinHvPlatform.h
Biblioteka WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Zobacz także