WHvRunVirtualProcessor

在分割區中執行虛擬處理器,使其能執行訪客程式碼。

語法

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

handle 轉到 partition 物件。

VpIndex

指定執行的虛擬處理器的索引。

ExitContext

指定接收上下文結構的輸出緩衝區,提供導致 WHvRunVirtualProcessor 函式回傳原因的資訊。

ExitContextSizeInBytes

指定接收出口上下文的緩衝區大小,單位為位元組。

傳回值

如果函式成功,則傳回值為 S_OK

Remarks

透過呼叫函 WHvRunVirtualProcessor 式來執行虛擬處理器(即啟用來賓程式碼)。 呼叫會同步阻塞,直到虛擬處理器執行虛擬化堆疊必須處理的操作(例如存取未映射或無法存取的 GPA 空間記憶體)或虛擬化堆疊明確請求該函式的退出(例如,注入中斷給虛擬處理器或變更虛擬機狀態)。

Requirements

需求 價值
最低支援的 Windows Windows 10,版本 1803(x64);Windows 11,版本 24H2,建置版 26100.3915(Arm64)
Header WinHvPlatform.h
圖書館 WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64、Arm64

另請參閱