インターセプト終了の登録

インターセプトされたレジスタ アクセスによって発生する Arm64 出口のコンテキスト データ。

Note

この終了理由とそのコンテキスト構造は、Arm64 パーティションにのみ適用されます。

構文

//
// Context data for an exit caused by an intercepted register access
// (WHvMessageTypeRegisterIntercept)
//

//
// Define register intercept message structure.
//
typedef union WHV_REGISTER_ACCESS_INFO
{
    WHV_REGISTER_VALUE SourceValue;
    WHV_REGISTER_NAME DestinationRegister;
} WHV_REGISTER_ACCESS_INFO;

typedef struct WHV_REGISTER_CONTEXT
{
    WHV_INTERCEPT_MESSAGE_HEADER Header;
    struct
    {
        UINT8 IsMemoryOp:1;
        UINT8 Reserved:7;
    };
    UINT8 Reserved8;
    UINT16 Reserved16;
    WHV_REGISTER_NAME RegisterName;
    WHV_REGISTER_ACCESS_INFO AccessInfo;
} WHV_REGISTER_CONTEXT;

Remarks

インターセプトされたシステム レジスタにアクセスする仮想プロセッサによって発生する出口に関する情報は、 WHV_REGISTER_CONTEXT 構造体で提供されます。 終了は、 WHvMessageTypeRegisterIntercept 終了の理由で報告されます。

この出口は、ゲストが合成ゲスト クラッシュ レジスタの 1 つ (WHvRegisterGuestCrashP4またはWHvRegisterGuestCrashCtlを介してWHvRegisterGuestCrashP0) を書き込むと生成されます。これは、ゲストが仮想化スタックにクラッシュを報告するために使用できます。

Header メンバーはWHV_INTERCEPT_MESSAGE_HEADERであり、アクセス時にプログラム カウンター (Pc) と保存されたプロセッサの状態 (Cpsr) と、WHV_INTERCEPT_MESSAGE_HEADER.InterceptAccessTypeのアクセス方向 (WHV_MEMORY_ACCESS_TYPE値) を報告します。

RegisterName メンバーは、インターセプトされたレジスタのWHV_REGISTER_NAMEです。 AccessInfo メンバーは、レジスタ書き込みの値を保持し、レジスタ読み取りのターゲットを識別します。

  • AccessInfo.SourceValue は、レジスタ書き込み用に書き込まれた値を保持する WHV_REGISTER_VALUE です。
  • AccessInfo.DestinationRegister は、レジスタ読み取りのターゲット レジスタを識別する WHV_REGISTER_NAME です。

IsMemoryOp ビットは、インターセプトされたアクセスがメモリ操作であるかどうかを示します。

こちらも参照ください