HV_REGISTER_VALUE

仮想プロセッサ レジスタの値はすべて 128 ビットのサイズです。 128 ビット全体を消費しない値は、128 ビット全体を埋めるためにゼロ拡張されます。

構文

Architecture-Neutral メンバー

typedef union
{
    UINT128 Reg128;
    UINT64 Reg64;
    UINT32 Reg32;
    UINT16 Reg16;
    UINT8 Reg8;

    HV_EXPLICIT_SUSPEND_REGISTER ExplicitSuspend;
    HV_INTERCEPT_SUSPEND_REGISTER InterceptSuspend;
    HV_DISPATCH_SUSPEND_REGISTER DispatchSuspend;
} HV_REGISTER_VALUE;

x64 固有のメンバー

x64 プラットフォームでは、共用体にはさらに次のものが含まれます。

typedef union
{
    // ... architecture-neutral members ...
    HV_X64_FP_REGISTER Fp;
    HV_X64_FP_CONTROL_STATUS_REGISTER FpControlStatus;
    HV_X64_XMM_CONTROL_STATUS_REGISTER XmmControlStatus;
    HV_X64_SEGMENT_REGISTER Segment;
    HV_X64_TABLE_REGISTER Table;
    HV_X64_INTERRUPT_STATE_REGISTER InterruptState;
    HV_X64_PENDING_INTERRUPTION_REGISTER PendingInterruption;
    HV_X64_MSR_NPIEP_CONFIG_CONTENTS NpiepConfig;
    HV_X64_PENDING_EXCEPTION_EVENT PendingExceptionEvent;
    HV_X64_PENDING_VIRTUALIZATION_FAULT_EVENT PendingVirtualizationFaultEvent;
    HV_X64_INTEL_INVEPT_REG InvEptReg;
    HV_X64_INTEL_INVVPID_REG InvVpidReg;
} HV_REGISTER_VALUE;

メンバーの選択

レジスタ アクセスに関連付けられている HV_REGISTER_NAME によって、値の解釈が決まります。

メンバー Use
Reg8、Reg16、Reg32、Reg64 対応する幅のスカラー レジスタ。 残りの上位ビットは 0 です。
Reg128 不透明または整数の 128 ビット値として定義されたレジスタ。
ExplicitSuspend、InterceptSuspend、DispatchSuspend 構造化された仮想プロセッサの中断状態。
Fp 128 ビット表現での x64 80 ビット x87 レジスタ値。
FpControlStatus、XmmControlStatus x64 浮動小数点および SIMD コントロール/状態の状態。
Segment、Table x64 セグメントまたは記述子テーブルのレジスタ状態。
InterruptState、PendingInterruption x64 割り込み状態。
NpiepConfig SGDT、SIDT、SLDT、STR の x64 非特権命令実行防止 (NPIEP) 構成。
PendingExceptionEvent x64 保留中の例外状態。
PendingVirtualizationFaultEvent x64 保留中の仮想化エラー状態。
InvEptReg、InvVpidReg エミュレートされた Intel INVEPT および INVVPID 命令に関する情報。

使用要件

  • 共用体は 16 バイトを占有し、スカラー メンバーが選択されている場合を含め、16 バイトのアラインメントを持ちます。
  • 予約ビットは、選択したメンバーの型の要件に従います。 ハイパーバイザーに値を提供するソフトウェアは、予約ゼロとして定義されているフィールドをクリアする必要があります。
  • レジスタの読み取りが成功すると、要求されたレジスタ名で指定されたエンコードが返されます。 数値はエンコードを決定しません。
  • 読み取り専用および書き込み専用の制限を含む、可用性とアクセス許可の登録は、 HV_REGISTER_NAMEによって定義されます。

参照