パーティション内で仮想プロセッサを実行し、ゲスト コードを実行できるようにします。
構文
// 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
パーティション オブジェクトへのハンドル。
VpIndex
実行される仮想プロセッサのインデックスを指定します。
ExitContext
WHvRunVirtualProcessor関数が返される原因に関する情報を提供するコンテキスト構造を受け取る出力バッファーを指定します。
ExitContextSizeInBytes
終了コンテキストを受け取るバッファーのサイズをバイト単位で指定します。
戻り値
関数が成功した場合、戻り値は S_OK。
Remarks
仮想プロセッサは、 WHvRunVirtualProcessor 関数を呼び出すことによって実行されます (つまり、ゲスト コードの実行が有効になります)。 呼び出しは、仮想プロセッサが仮想化スタックで処理する必要がある操作 (たとえば、マップされていないかアクセスできない GPA 空間内のメモリにアクセスする) を実行するか、仮想化スタックが関数の終了を明示的に要求するまで同期的にブロックします (たとえば、仮想プロセッサの割り込みを挿入したり、VM の状態を変更したりするため)。
Requirements
| 要件 | 価値 |
|---|---|
| サポートされている最小Windows | Windows 10バージョン 1803 (x64);Windows 11、バージョン 24H2、ビルド 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| 図書館 | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64、Arm64 |