仮想プロセッサ レジスタの値はすべて 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によって定義されます。