Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kontextdaten für einen virtuellen Computer, der durch einen Speicherzugriff verursacht wurde.
Syntax
//
// 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
Informationen zu Beendigungen durch den virtuellen Prozessor, der auf einen nicht zugeordneten oder nicht zugänglichen Speicherspeicherort zugreift, werden von der WHV_MEMORY_ACCESS_CONTEXT Struktur bereitgestellt.
Ein gängiger Anwendungsfall für Den Speicherzugriff ist die Emulation von MMIO-Gerätevorgängen, bei denen nicht zugeordnete Bereiche des GPA-Speicherplatzes der Partition für den MMIO-Raum eines emulierten Geräts verwendet werden und Zugriffe auf diesen Bereich an die Geräteemulationslogik im Virtualisierungsstapel weitergeleitet werden.
Die WHV_MEMORY_ACCESS_CONTEXT Struktur wird für x64 (_AMD64_) und Arm64 (_ARM64_)-Partitionen unterschiedlich definiert:
- Auf x64 werden die Zugangsflächen mit dem
WHvRunVpExitReasonMemoryAccessAusgangsgrund angezeigt. Der Kontext meldet den Zugriffstyp und die Adressgültigkeit durchWHV_MEMORY_ACCESS_INFO.AccessType,GpaUnmappedundGvaValidträgt die erfassten Anweisungsbytes für die Emulation. Die Struktur beträgt 40 Byte. - Auf Arm64 sind die Zugriffsflächen mit einem von zwei Exit-Gründen verfügbar:
WHvRunVpExitReasonUnmappedGpawenn die physische Adresse des Gasts nicht zugeordnet ist oderWHvRunVpExitReasonGpaInterceptwenn die Adresse zugeordnet, aber so konfiguriert ist, dass sie abgefangen wird. Der Kontext beginnt mit einemWHV_INTERCEPT_MESSAGE_HEADER(der den FehlerPcmeldet) undCpsrdasSyndromeMitglied trägt den Wert des Arm64 Exception Syndrome Register (ESR), der den fehlerhaften Zugriff beschreibt. Die Struktur beträgt 64 Byte.
Note
Auf Arm64 wird der Zugriffstyp vom WHV_INTERCEPT_MESSAGE_HEADER.InterceptAccessType Feld (einem WHV_MEMORY_ACCESS_TYPE Wert) und nicht von einem AccessType Bitfeld in WHV_MEMORY_ACCESS_INFOgemeldet.