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

파티션 개체에 대한 핸들입니다.

VpIndex

실행되는 가상 프로세서의 인덱스를 지정합니다.

ExitContext

함수가 반환된 이유에 대한 정보를 제공하는 컨텍스트 구조를 수신하는 출력 버퍼를 WHvRunVirtualProcessor 지정합니다.

ExitContextSizeInBytes

종료 컨텍스트를 수신하는 버퍼의 크기를 바이트 단위로 지정합니다.

반환 값

함수가 성공하면 반환 값은 .입니다 S_OK.

Remarks

가상 프로세서는 함수를 호출 WHvRunVirtualProcessor 하여 실행됩니다(즉, 게스트 코드를 실행할 수 있도록 설정됨). 가상 프로세서가 가상화 스택에서 처리해야 하는 작업(예: 매핑되지 않았거나 액세스할 수 없는 GPA 공간의 메모리 액세스)을 수행하거나 가상화 스택이 명시적으로 함수의 종료를 요청할 때까지(예: 가상 프로세서에 인터럽트를 삽입하거나 VM의 상태를 변경하기 위해) 호출이 동기적으로 차단됩니다.

Requirements

요구 사항 Value
지원되는 최소 Windows Windows 10, 버전 1803(x64); Windows 11 버전 24H2, 빌드 26100.3915(Arm64)
Header WinHvPlatform.h
라이브러리 WinHvPlatform.lib
동적 링크 라이브러리 (DLL) WinHvPlatform.dll
아키텍처 x64, Arm64

참고하십시오