暫存攔截出口

Arm64 退出因暫存器存取被攔截而產生的上下文資料。

備註

此退出原因及其上下文結構僅適用於 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 退出原因一起報告。

當訪客寫入其中一個合成訪客當機暫存器( WHvRegisterGuestCrashP0 透過 WHvRegisterGuestCrashP4或 ) WHvRegisterGuestCrashCtl 時,會產生出口,訪客可利用此暫存器向虛擬化堆疊報告當機。

成員 HeaderWHV_INTERCEPT_MESSAGE_HEADER,報告存取時的程式計數器(Pc)及儲存的處理器狀態(Cpsr),以及存取 WHV_INTERCEPT_MESSAGE_HEADER.InterceptAccessType 方向(值 WHV_MEMORY_ACCESS_TYPE )。

RegisterName成員是攔截寄存器的成員WHV_REGISTER_NAME。 成員 AccessInfo 攜帶暫存器寫入的值,並識別暫存器讀取的目標:

  • AccessInfo.SourceValue 是攜帶暫存器寫入所寫值的 a WHV_REGISTER_VALUE
  • AccessInfo.DestinationRegister 是識別暫存器讀取目標暫存器的 a WHV_REGISTER_NAME

位元表示 IsMemoryOp 攔截的存取是否為記憶體操作。

另請參閱