Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Scrive fino a WHV_READ_WRITE_GPA_RANGE_MAX_SIZE byte nello spazio indirizzi fisico guest di una partizione.
Sintassi
// 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
);
Parameters
Partition
Handle per l'oggetto partizione.
VpIndex
Specifica l'indice del processore virtuale nel cui contesto viene eseguito l'accesso.
GuestAddress
Specifica l'indirizzo fisico guest in corrispondenza del quale inizia la scrittura.
Controls
Specifica il tipo di cache e la VTL di destinazione per l'accesso, come WHV_ACCESS_GPA_CONTROLS valore.
Data
Specifica i byte da scrivere nell'intervallo di indirizzi fisici guest.
DataSizeInBytes
Specifica il numero di byte da scrivere. Questo valore deve essere maggiore di zero e non deve essere maggiore di WHV_READ_WRITE_GPA_RANGE_MAX_SIZE.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è S_OK.
La funzione può restituire i codici di errore seguenti:
-
E_INVALIDARG—DataSizeInBytesè maggiore diWHV_READ_WRITE_GPA_RANGE_MAX_SIZE, inCacheTypeControlsnon è un tipo di cache valido,InputVtlinControlsnon fa riferimento alla VTL corrente o viene impostato un campo riservato inControls. -
E_ACCESSDENIED— l'intervallo di indirizzi fisici guest non è mappato o l'accesso non è consentito.
Remarks
La WHvWriteGpaRange funzione scrive fino a WHV_READ_WRITE_GPA_RANGE_MAX_SIZE (16) byte nella memoria fisica guest nel contesto di un processore virtuale. Questa dimensione di accesso limitato rende la funzione adatta per emulare gli operandi di istruzioni anziché il trasferimento di memoria bulk. Per i trasferimenti di dimensioni maggiori, ripristinare la memoria fisica guest con un mapping host creato da WHvMapGpaRange o WHvMapGpaRange2 e accedervi direttamente.
Poiché la scrittura viene eseguita nel contesto del processore virtuale identificato da VpIndex, osserva la semantica di accesso alla memoria che si applica a tale processore, incluso il tipo di cache e il valore VTL specificato in Controls. Se la pagina di destinazione non è ancora residente, la funzione lo genera in modo errato e ritenta l'accesso.
Requisiti
| Requisito | Valore |
|---|---|
| Minimo Windows supportato | Windows 10 versione 20H2 (x64); Windows 11, versione 24H2, build 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Libreria | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |