Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kontextová data pro ukončení virtuálního počítače způsobená přístupem k paměti
Syntaxe
//
// Context data for a VM exit caused by a memory access
// (WHvRunVpExitReasonMemoryAccess on x64; WHvRunVpExitReasonUnmappedGpa or
// WHvRunVpExitReasonGpaIntercept on Arm64)
//
typedef enum WHV_MEMORY_ACCESS_TYPE
{
WHvMemoryAccessRead = 0,
WHvMemoryAccessWrite = 1,
WHvMemoryAccessExecute = 2
} WHV_MEMORY_ACCESS_TYPE;
#if defined(_AMD64_)
typedef union WHV_MEMORY_ACCESS_INFO
{
struct {
UINT32 AccessType : 2; // WHV_MEMORY_ACCESS_TYPE
UINT32 GpaUnmapped : 1;
UINT32 GvaValid : 1;
UINT32 Reserved : 28;
};
UINT32 AsUINT32;
} WHV_MEMORY_ACCESS_INFO;
typedef struct WHV_MEMORY_ACCESS_CONTEXT
{
// Context of the virtual processor
UINT8 InstructionByteCount;
UINT8 Reserved[3];
UINT8 InstructionBytes[16];
// Memory access info
WHV_MEMORY_ACCESS_INFO AccessInfo;
WHV_GUEST_PHYSICAL_ADDRESS Gpa;
WHV_GUEST_VIRTUAL_ADDRESS Gva;
} WHV_MEMORY_ACCESS_CONTEXT;
#elif defined(_ARM64_)
typedef union WHV_MEMORY_ACCESS_INFO
{
UINT8 AsUINT8;
struct
{
UINT8 GvaValid:1;
UINT8 GvaGpaValid:1;
UINT8 HypercallOutputPending:1;
UINT8 Reserved:5;
};
} WHV_MEMORY_ACCESS_INFO;
typedef struct WHV_MEMORY_ACCESS_CONTEXT
{
WHV_INTERCEPT_MESSAGE_HEADER Header;
UINT32 Reserved0;
UINT8 InstructionByteCount;
WHV_MEMORY_ACCESS_INFO AccessInfo;
UINT16 Reserved1;
UINT8 InstructionBytes[4];
UINT32 Reserved2;
UINT64 Gva;
UINT64 Gpa;
UINT64 Syndrome;
} WHV_MEMORY_ACCESS_CONTEXT;
#endif // _ARCH_
Remarks
Informace o ukončeních způsobených virtuálním procesorem přistupujícím k umístění paměti, které není mapované nebo není přístupné, poskytuje WHV_MEMORY_ACCESS_CONTEXT struktura.
Běžným případem použití pro ukončení přístupu k paměti je emulace operací zařízení MMIO, kdy se v zásobníku virtualizace předávají nemapované oblasti prostoru GPA oddílu pro prostor MMIO emulovaného zařízení a přístupy k této oblasti se předávají do logiky emulace zařízení v zásobníku virtualizace.
Struktura WHV_MEMORY_ACCESS_CONTEXT je definována odlišně pro oddíly x64 (_AMD64_) a Arm64 (_ARM64_):
- Na platformě x64 jsou přístupové plochy s
WHvRunVpExitReasonMemoryAccessdůvodem ukončení. Kontext hlásí přístupový typ a platnost adresy prostřednictvímWHV_MEMORY_ACCESS_INFO.AccessTypeGpaUnmapped, aGvaValid, a , a , nese zachycené bajty instrukce pro emulaci. Struktura je 40 bajtů. - V Arm64 se přístup zobrazí z jednoho ze dvou důvodů ukončení:
WHvRunVpExitReasonUnmappedGpapokud není namapovaná fyzická adresa hosta neboWHvRunVpExitReasonGpaInterceptkdyž je adresa namapovaná, ale nakonfigurovaná tak, aby se zachytila. Kontext začíná hodnotouWHV_INTERCEPT_MESSAGE_HEADER(která hlásí chybujícíPcaCpsr) aSyndromečlen má hodnotu ESR (Arm64 Exception Syndrome Register), která popisuje chybující přístup. Struktura je 64 bajtů.
Note
V Arm64 je typ přístupu hlášen WHV_INTERCEPT_MESSAGE_HEADER.InterceptAccessType polem ( WHV_MEMORY_ACCESS_TYPE hodnota) místo AccessType bitového pole v WHV_MEMORY_ACCESS_INFO.