從虛擬處理器擷取儲存狀態類別。
語法
// 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 函式。
兩種架構共有的狀態類型
-
WHvVirtualProcessorStateTypeSynicMessagePage並WHvVirtualProcessorStateTypeSynicEventFlagPage取得合成中斷控制器(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 |