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 時,會產生出口,訪客可利用此暫存器向虛擬化堆疊報告當機。
成員 Header 為 WHV_INTERCEPT_MESSAGE_HEADER,報告存取時的程式計數器(Pc)及儲存的處理器狀態(Cpsr),以及存取 WHV_INTERCEPT_MESSAGE_HEADER.InterceptAccessType 方向(值 WHV_MEMORY_ACCESS_TYPE )。
RegisterName成員是攔截寄存器的成員WHV_REGISTER_NAME。 成員 AccessInfo 攜帶暫存器寫入的值,並識別暫存器讀取的目標:
-
AccessInfo.SourceValue是攜帶暫存器寫入所寫值的 aWHV_REGISTER_VALUE。 -
AccessInfo.DestinationRegister是識別暫存器讀取目標暫存器的 aWHV_REGISTER_NAME。
位元表示 IsMemoryOp 攔截的存取是否為記憶體操作。