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.
Schreibt bis zu WHV_READ_WRITE_GPA_RANGE_MAX_SIZE Bytes in den physischen Adressraum einer Partition.
Syntax
// Guest physical address
typedef UINT64 WHV_GUEST_PHYSICAL_ADDRESS;
//
// Maximum data size used by WHvReadGpaRange and WHvWriteGpaRange
//
#define WHV_READ_WRITE_GPA_RANGE_MAX_SIZE 16
typedef enum WHV_CACHE_TYPE {
WHvCacheTypeUncached = 0,
WHvCacheTypeWriteCombining = 1,
WHvCacheTypeWriteThrough = 4,
#if defined(_AMD64_)
WHvCacheTypeWriteProtected = 5,
#endif
WHvCacheTypeWriteBack = 6
} WHV_CACHE_TYPE;
typedef union WHV_INPUT_VTL
{
UINT8 AsUINT8;
struct
{
UINT8 TargetVtl : 4;
UINT8 UseTargetVtl : 1;
UINT8 Reserved : 3;
};
} WHV_INPUT_VTL;
//
// Control flags used by WHvReadGpaRange and WHvWriteGpaRange
//
typedef union WHV_ACCESS_GPA_CONTROLS
{
UINT64 AsUINT64;
struct
{
//
// Cache type for access
//
WHV_CACHE_TYPE CacheType;
//
// VTL whose GPA is to be accessed
//
WHV_INPUT_VTL InputVtl;
UINT8 Reserved;
UINT16 Reserved1;
};
} WHV_ACCESS_GPA_CONTROLS;
HRESULT
WINAPI
WHvWriteGpaRange(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT32 VpIndex,
_In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,
_In_ WHV_ACCESS_GPA_CONTROLS Controls,
_In_reads_bytes_(DataSizeInBytes) const VOID* Data,
_In_ UINT32 DataSizeInBytes
);
Parameter
Partition
Behandeln sie das Partitionsobjekt.
VpIndex
Gibt den Index des virtuellen Prozessors an, in dessen Kontext der Zugriff ausgeführt wird.
GuestAddress
Gibt die physische Gastadresse an, an der der Schreibvorgang beginnt.
Controls
Gibt den Cachetyp und die Ziel-VTL für den Zugriff als Wert an WHV_ACCESS_GPA_CONTROLS .
Data
Gibt die Bytes an, die in den physischen Adressbereich des Gasts geschrieben werden sollen.
DataSizeInBytes
Gibt die Anzahl der zu schreibenden Bytes an. Dieser Wert muss größer als Null und nicht größer sein als WHV_READ_WRITE_GPA_RANGE_MAX_SIZE.
Rückgabewert
Wenn die Funktion erfolgreich ist, lautet S_OKder Rückgabewert .
Die Funktion kann die folgenden Fehlercodes zurückgeben:
-
E_INVALIDARG—DataSizeInBytesist größer alsWHV_READ_WRITE_GPA_RANGE_MAX_SIZE, dasCacheTypeInControlsist kein gültiger Cachetyp, dasInputVtlInControlsverweist nicht auf die aktuelle VTL, oder ein reserviertes Feld istControlsfestgelegt. -
E_ACCESSDENIED— Der physische Adressbereich des Gasts ist nicht zugeordnet, oder der Zugriff ist andernfalls nicht zulässig.
Remarks
Die WHvWriteGpaRange Funktion schreibt bis zu WHV_READ_WRITE_GPA_RANGE_MAX_SIZE (16) Bytes in den physischen Gastspeicher im Kontext eines virtuellen Prozessors. Diese eingeschränkte Zugriffsgröße macht die Funktion zum Emulieren von Anweisungsopernden anstelle der Massenspeicherübertragung geeignet. Bei größeren Übertragungen sichern Sie den physischen Gastspeicher mit einer hostzuordnung, die von WHvMapGpaRange oder WHvMapGpaRange2 direkt erstellt wurde, und greifen Sie direkt darauf zu.
Da der Schreibvorgang im Kontext des durch den virtuellen Prozessor identifizierten VpIndexvirtuellen Prozessors ausgeführt wird, wird die Speicherzugriffsemantik beobachtet, die auf diesen Prozessor angewendet wird, einschließlich des Cachetyps und der in Controlsdieser Angegebenen VTL. Wenn die Zielseite noch nicht vorhanden ist, ist sie von der Funktion fehlerhaft, und der Zugriff wird erneut ausgeführt.
Anforderungen
| Anforderung | Wert |
|---|---|
| Mindestens unterstützte Windows | Windows 10, Version 20H2 (x64); Windows 11, Version 24H2, Build 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Bibliothek | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |