가상 프로세서에서 저장된 상태의 범주를 검색합니다.
문법
// 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 함수를 대체합니다.
두 아키텍처에 공통적인 상태 유형
-
WHvVirtualProcessorStateTypeSynicMessagePageSynICWHvVirtualProcessorStateTypeSynicEventFlagPage(가상 인터럽트 컨트롤러) 메시지 및 이벤트 플래그 페이지를 검색합니다. -
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 |