WHvGetVirtualProcessorState

Mengambil kategori status tersimpan dari prosesor virtual.

Syntax

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

Tangani ke objek partisi.

VpIndex

Menentukan indeks prosesor virtual yang statusnya diambil.

StateType

Menentukan kategori status yang akan diambil. Lihat bagian Keterangan untuk arti setiap nilai.

Buffer

Menerima status yang diminta. Format buffer tergantung pada StateType.

BufferSizeInBytes

Menentukan ukuran Buffer, dalam byte.

BytesWritten

Jika non-NULL, menerima jumlah byte yang ditulis ke Buffer. Ketika buffer terlalu kecil, buffer menerima jumlah byte yang diperlukan untuk menahan status.

Mengembalikan Nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah S_OK.

Jika Buffer terlalu kecil untuk berisi status yang diminta, nilai yang dikembalikan adalah WHV_E_INSUFFICIENT_BUFFER. Dalam hal ini, BytesWritten menerima jumlah byte yang diperlukan. Jika StateType bukan jenis status yang valid, nilai yang dikembalikan adalah E_INVALIDARG.

Remarks

Fungsi ini WHvGetVirtualProcessorState mengambil kategori status prosesor virtual yang diidentifikasi oleh StateType. Ini menyediakan satu antarmuka sadar arsitektur untuk menyimpan status prosesor virtual dan menggantikan fungsi dan WHvGetVirtualProcessorInterruptControllerState2 yang tidak digunakan WHvGetVirtualProcessorXsaveState lagi.

Jenis status umum untuk kedua arsitektur

  • WHvVirtualProcessorStateTypeSynicMessagePage dan WHvVirtualProcessorStateTypeSynicEventFlagPage ambil pesan pengontrol interupsi sintetis (SynIC) dan halaman bendera peristiwa.
  • WHvVirtualProcessorStateTypeSynicTimerState mengambil status timer sintetis SynIC.

Jenis status x64

  • WHvVirtualProcessorStateTypeInterruptControllerState2 mengambil status APIC lokal.
  • WHvVirtualProcessorStateTypeXsaveState mengambil status prosesor diperluas (xsave).
  • WHvVirtualProcessorStateTypeNestedState mengambil status virtualisasi berlapis.

Jenis status Arm64

  • WHvVirtualProcessorStateTypeInterruptControllerState mengambil status GIC per prosesor.
  • WHvVirtualProcessorStateTypeGlobalInterruptState mengambil status pengontrol interupsi seluruh partisi.
  • WHvVirtualProcessorStateTypeSveState mengambil status Ekstensi Vektor (SVE) yang Dapat Diskalakan.

Untuk menentukan ukuran buffer yang diperlukan, panggil fungsi dengan buffer yang terlalu kecil dan baca nilai yang dikembalikan BytesWritten ketika fungsi kembali WHV_E_INSUFFICIENT_BUFFER, lalu panggil fungsi lagi dengan buffer ukuran tersebut.

Requirements

Persyaratan Nilai
Windows minimum yang didukung Windows 10, versi 20H2 (x64); Windows 11, versi 24H2, build 26100.3915 (Arm64)
Header WinHvPlatform.h
Perpustakaan WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Baca juga