WHvGetVirtualProcessorState

가상 프로세서에서 저장된 상태의 범주를 검색합니다.

문법

// WHvGetVirtualProcessorState and WHvSetVirtualProcessorState types.
#if defined(_AMD64_)

typedef enum WHV_VIRTUAL_PROCESSOR_STATE_TYPE
{
    WHvVirtualProcessorStateTypeSynicMessagePage          = 0x00000000,
    WHvVirtualProcessorStateTypeSynicEventFlagPage        = 0x00000001,
    WHvVirtualProcessorStateTypeSynicTimerState           = 0x00000002,

    WHvVirtualProcessorStateTypeInterruptControllerState2 = 0x00001000,
    WHvVirtualProcessorStateTypeXsaveState                = 0x00001001,
    WHvVirtualProcessorStateTypeNestedState               = 0x00001002,
} WHV_VIRTUAL_PROCESSOR_STATE_TYPE;

#elif defined (_ARM64_)

#define WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN    (1ui32 << 31)
#define WHV_VIRTUAL_PROCESSOR_STATE_TYPE_ANY_VP (1ui32 << 30)

typedef enum WHV_VIRTUAL_PROCESSOR_STATE_TYPE
{
    WHvVirtualProcessorStateTypeInterruptControllerState  = 0x00000000 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN,

    WHvVirtualProcessorStateTypeSynicMessagePage          = 0x00000002 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN,
    WHvVirtualProcessorStateTypeSynicEventFlagPage        = 0x00000003 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN,
    WHvVirtualProcessorStateTypeSynicTimerState           = 0x00000004,

    WHvVirtualProcessorStateTypeGlobalInterruptState      = 0x00000006 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_ANY_VP,
    WHvVirtualProcessorStateTypeSveState                  = 0x00000007 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN,
} WHV_VIRTUAL_PROCESSOR_STATE_TYPE;

#endif

HRESULT
WINAPI
WHvGetVirtualProcessorState(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ UINT32 VpIndex,
    _In_ WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType,
    _Out_writes_bytes_to_(BufferSizeInBytes, *BytesWritten) VOID* Buffer,
    _In_ UINT32 BufferSizeInBytes,
    _Out_opt_ UINT32* BytesWritten
    );

Parameters

Partition

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

VpIndex

상태를 검색하는 가상 프로세서의 인덱스를 지정합니다.

StateType

검색할 상태의 범주를 지정합니다. 각 값의 의미는 설명 섹션을 참조하세요.

Buffer

요청된 상태를 받습니다. 버퍼의 형식은 .에 StateType따라 달라집니다.

BufferSizeInBytes

크기 Buffer(바이트)를 지정합니다.

BytesWritten

NULL이 아닌 경우 에 기록된 바이트 수를 받습니다 Buffer. 버퍼가 너무 작으면 상태를 유지하는 데 필요한 바이트 수를 받습니다.

반환 값

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

요청된 상태를 포함할 수 없을 정도로 작으면 Buffer 반환 값은 .입니다 WHV_E_INSUFFICIENT_BUFFER. 이 경우 BytesWritten 필요한 바이트 수를 받습니다. StateType 유효한 상태 형식이 아니면 반환 값은 .입니다E_INVALIDARG.

Remarks

함수는 WHvGetVirtualProcessorState 로 식별되는 가상 프로세서 상태의 범주를 StateType검색합니다. 가상 프로세서 상태를 저장하기 위한 단일 아키텍처 인식 인터페이스를 제공하고 사용되지 않는 WHvGetVirtualProcessorXsaveState 함수와 WHvGetVirtualProcessorInterruptControllerState2 함수를 대체합니다.

두 아키텍처에 공통적인 상태 유형

  • WHvVirtualProcessorStateTypeSynicMessagePage SynIC WHvVirtualProcessorStateTypeSynicEventFlagPage (가상 인터럽트 컨트롤러) 메시지 및 이벤트 플래그 페이지를 검색합니다.
  • WHvVirtualProcessorStateTypeSynicTimerState 는 SynIC 가상 타이머 상태를 검색합니다.

x64 상태 유형

  • WHvVirtualProcessorStateTypeInterruptControllerState2 는 로컬 APIC 상태를 검색합니다.
  • WHvVirtualProcessorStateTypeXsaveState 는 프로세서 확장(xsave) 상태를 검색합니다.
  • WHvVirtualProcessorStateTypeNestedState 는 중첩된 가상화 상태를 검색합니다.

Arm64 상태 유형

  • WHvVirtualProcessorStateTypeInterruptControllerState 는 프로세서별 GIC 상태를 검색합니다.
  • WHvVirtualProcessorStateTypeGlobalInterruptState 는 파티션 전체 인터럽트 컨트롤러 상태를 검색합니다.
  • WHvVirtualProcessorStateTypeSveState 는 SVE(Scalable Vector Extension) 상태를 검색합니다.

필요한 버퍼 크기를 확인하려면 너무 작은 버퍼를 사용하여 함수를 호출하고 함수가 반환 BytesWrittenWHV_E_INSUFFICIENT_BUFFER되는 값을 읽은 다음 해당 크기의 버퍼를 사용하여 함수를 다시 호출합니다.

Requirements

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

참고하십시오