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

パーティション オブジェクトへのハンドル。

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

こちらも参照ください