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 и WHvVirtualProcessorStateTypeSynicEventFlagPage извлеките сообщения с искусственным контроллером прерываний (SynIC) и страницы флагов событий.
  • WHvVirtualProcessorStateTypeSynicTimerState извлекает состояние искусственного таймера SynIC.

Типы состояний x64

  • WHvVirtualProcessorStateTypeInterruptControllerState2 извлекает локальное состояние APIC.
  • WHvVirtualProcessorStateTypeXsaveState извлекает расширенное состояние процессора (xsave).
  • WHvVirtualProcessorStateTypeNestedState получает состояние вложенной виртуализации.

Типы состояний Arm64

  • WHvVirtualProcessorStateTypeInterruptControllerState получает состояние GIC для каждого процессора.
  • WHvVirtualProcessorStateTypeGlobalInterruptState извлекает состояние контроллера прерываний на уровне секции.
  • WHvVirtualProcessorStateTypeSveState получает состояние масштабируемого векторного расширения (SVE).

Чтобы определить требуемый размер буфера, вызовите функцию с буфером, который слишком мал и считывает значение, возвращаемое BytesWritten при возврате WHV_E_INSUFFICIENT_BUFFERфункции, а затем снова вызовите функцию с буфером этого размера.

Требования

Requirement Ценность
Минимальный поддерживаемый Windows Windows 10 версии 20H2 (x64); Windows 11 версии 24H2, сборка 26100.3915 (Arm64)
Header WinHvPlatform.h
Библиотека WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

См. также