WHvGetVirtualProcessorState

Pobiera kategorię zapisanego stanu z procesora wirtualnego.

Składnia

// 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

Dojście do obiektu partycji.

VpIndex

Określa indeks procesora wirtualnego, którego stan jest pobierany.

StateType

Określa kategorię stanu do pobrania. Zobacz sekcję Uwagi, aby poznać znaczenie każdej wartości.

Buffer

Odbiera żądany stan. Format buforu zależy StateTypeod .

BufferSizeInBytes

Określa rozmiar Buffer, w bajtach.

BytesWritten

Jeśli wartość nie ma wartości NULL, otrzymuje liczbę bajtów zapisanych w pliku Buffer. Gdy bufor jest za mały, otrzymuje liczbę bajtów wymaganych do przechowywania stanu.

Wartość zwracana

Jeśli funkcja powiedzie się, zwracana wartość to S_OK.

Jeśli Buffer jest za mały, aby zawierać żądany stan, zwracana wartość to WHV_E_INSUFFICIENT_BUFFER. W takim przypadku BytesWritten otrzymuje wymaganą liczbę bajtów. Jeśli StateType nie jest prawidłowym typem stanu, zwracana wartość to E_INVALIDARG.

Remarks

Funkcja WHvGetVirtualProcessorState pobiera kategorię stanu procesora wirtualnego zidentyfikowaną przez StateTypeelement . Zapewnia on jeden, obsługujący architekturę interfejs do zapisywania stanu procesora wirtualnego i zastępuje przestarzałe WHvGetVirtualProcessorXsaveState funkcje i WHvGetVirtualProcessorInterruptControllerState2 .

Typy stanów wspólne dla obu architektur

  • WHvVirtualProcessorStateTypeSynicMessagePage i WHvVirtualProcessorStateTypeSynicEventFlagPage pobierz syntetyczny komunikat kontrolera przerwań (SynIC) i strony flagi zdarzenia.
  • WHvVirtualProcessorStateTypeSynicTimerState pobiera syntetyczny stan czasomierza SynIC.

Typy stanów x64

  • WHvVirtualProcessorStateTypeInterruptControllerState2 pobiera lokalny stan APIC.
  • WHvVirtualProcessorStateTypeXsaveState pobiera stan rozszerzonego procesora (xsave).
  • WHvVirtualProcessorStateTypeNestedState pobiera stan wirtualizacji zagnieżdżonej.

Typy stanów Arm64

  • WHvVirtualProcessorStateTypeInterruptControllerState pobiera stan GIC dla procesora.
  • WHvVirtualProcessorStateTypeGlobalInterruptState pobiera stan kontrolera przerwań dla całej partycji.
  • WHvVirtualProcessorStateTypeSveState pobiera stan Skalowalne rozszerzenie wektorów (SVE).

Aby określić wymagany rozmiar buforu, wywołaj funkcję z buforem, który jest zbyt mały, i odczytaj wartość zwracaną, BytesWritten gdy funkcja zwróci WHV_E_INSUFFICIENT_BUFFERwartość , a następnie wywołaj funkcję ponownie z buforem tego rozmiaru.

Requirements

Requirement Value
Minimalna obsługiwana Windows Windows 10, wersja 20H2 (x64); Windows 11, wersja 24H2, kompilacja 26100.3915 (Arm64)
Header WinHvPlatform.h
Biblioteka WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Zobacz także