仮想プロセッサから保存された状態のカテゴリを取得します。
構文
// 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) の状態を取得します。
必要なバッファー サイズを確認するには、バッファーが小さすぎる関数を呼び出し、関数が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 |