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

handle 轉到 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 函式。

兩種架構共有的狀態類型

  • WHvVirtualProcessorStateTypeSynicMessagePageWHvVirtualProcessorStateTypeSynicEventFlagPage 取得合成中斷控制器(SynIC)訊息與事件標誌頁面。
  • WHvVirtualProcessorStateTypeSynicTimerState 取得 SynIC 合成計時器狀態。

x64 狀態類型

  • WHvVirtualProcessorStateTypeInterruptControllerState2 取得當地 APIC 狀態。
  • WHvVirtualProcessorStateTypeXsaveState 擷取處理器擴展(XSAVE)狀態。
  • WHvVirtualProcessorStateTypeNestedState 擷取巢狀虛擬化狀態。

Arm64 狀態類型

  • WHvVirtualProcessorStateTypeInterruptControllerState 擷取每個處理器的 GIC 狀態。
  • WHvVirtualProcessorStateTypeGlobalInterruptState 擷取分割區範圍的中斷控制器狀態。
  • WHvVirtualProcessorStateTypeSveState 取得可擴展向量擴展(SVE)狀態。

要確定所需的緩衝區大小,先呼叫緩衝區過小的函式,並在函式返回WHV_E_INSUFFICIENT_BUFFER時讀取回BytesWritten傳的值,然後再用該大小的緩衝區再次呼叫該函式。

Requirements

需求 價值
最低支援的 Windows Windows 10,版本 20H2(x64);Windows 11,版本 24H2,建置版 26100.3915(Arm64)
Header WinHvPlatform.h
圖書館 WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64、Arm64

另請參閱