Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Contextgegevens voor een VM-uitgang die wordt veroorzaakt door een geheugentoegang.
Syntaxis
//
// 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
Informatie over uitgangen die worden veroorzaakt door de virtuele processor die toegang heeft tot een geheugenlocatie die niet is toegewezen of niet toegankelijk is, wordt geleverd door de WHV_MEMORY_ACCESS_CONTEXT structuur.
Een veelvoorkomend gebruiksvoorbeeld voor het afsluiten van geheugentoegang is de emulatie van MMIO-apparaatbewerkingen, waarbij niet-toegewezen regio's van de GPA-ruimte van de partitie worden gebruikt voor de MMIO-ruimte van een geƫmuleerd apparaat en toegang tot deze regio worden doorgestuurd naar de apparaatemulatielogica in de virtualisatiestack.
De WHV_MEMORY_ACCESS_CONTEXT structuur is anders gedefinieerd voor x64 (_AMD64_) en Arm64 (_ARM64_) partities:
- Op x64 wordt de toegang met de reden van de
WHvRunVpExitReasonMemoryAccessuitgang weergegeven. De context rapporteert het toegangstype en de geldigheid van het adres viaWHV_MEMORY_ACCESS_INFO.AccessType,GpaUnmappedenGvaValiden draagt de vastgelegde instructiebytes voor emulatie. De structuur is 40 bytes. - In Arm64 wordt de toegang met een van de twee afsluitredenen weergegeven:
WHvRunVpExitReasonUnmappedGpawanneer het fysieke gastadres niet is toegewezen ofWHvRunVpExitReasonGpaInterceptwanneer het adres is toegewezen, maar is geconfigureerd om te onderscheppen. De context begint met eenWHV_INTERCEPT_MESSAGE_HEADERwaarde (die de foutPcmeldt enCpsr) en hetSyndromelid de waarde Arm64 Exception Syndrome Register (ESR) heeft die de foutieve toegang beschrijft. De structuur is 64 bytes.
Note
In Arm64 wordt het toegangstype gerapporteerd door het WHV_INTERCEPT_MESSAGE_HEADER.InterceptAccessType veld (een WHV_MEMORY_ACCESS_TYPE waarde) in plaats van door een AccessType bitveld in WHV_MEMORY_ACCESS_INFO.