Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Считывает до WHV_READ_WRITE_GPA_RANGE_MAX_SIZE байтов из гостевого физического адресного пространства секции.
Синтаксис
// 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
WHvReadGpaRange(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT32 VpIndex,
_In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,
_In_ WHV_ACCESS_GPA_CONTROLS Controls,
_Out_writes_bytes_(DataSizeInBytes) PVOID Data,
_In_ UINT32 DataSizeInBytes
);
Parameters
Partition
Дескриптор объекта секции.
VpIndex
Указывает индекс виртуального процессора, в контексте которого выполняется доступ.
GuestAddress
Указывает гостевой физический адрес, с которого начинается чтение.
Controls
Указывает тип кэша и целевой VTL для доступа в качестве WHV_ACCESS_GPA_CONTROLS значения.
Data
Получает байты, считанные из диапазона гостевых физических адресов.
DataSizeInBytes
Указывает количество байтов для чтения. Это значение должно быть больше нуля и не больше WHV_READ_WRITE_GPA_RANGE_MAX_SIZE.
Возвращаемое значение
Если функция выполнена успешно, возвращается S_OKзначение.
Функция может возвращать следующие коды сбоев:
-
E_INVALIDARG—DataSizeInBytesбольшеWHV_READ_WRITE_GPA_RANGE_MAX_SIZE,CacheTypeControlsчем допустимый тип кэша,InputVtlкоторыйControlsне ссылается на текущий VTL, или зарезервированное поле вControlsнаборе. -
E_ACCESSDENIED— диапазон гостевых физических адресов не сопоставлен или доступ не разрешен.
Remarks
Функция WHvReadGpaRange считывает до WHV_READ_WRITE_GPA_RANGE_MAX_SIZE 16 байт гостевой физической памяти в контексте виртуального процессора. Этот ограниченный размер доступа делает функцию подходящей для эмуляции операндов инструкций, а не массовой передачи памяти. Для более крупных передачи верните гостевую физическую память с сопоставлением узлов, созданным WHvMapGpaRange или WHvMapGpaRange2 напрямую к нему.
Так как чтение выполняется в контексте виртуального процессора, определяемого с помощью VpIndex, он наблюдает семантику доступа к памяти, которая применяется к процессору, включая тип кэша и VTL, указанный в Controls. Если целевая страница еще не является резидентной, функция создает резидент страницы и повторяет доступ.
Требования
| Requirement | Ценность |
|---|---|
| Минимальный поддерживаемый Windows | Windows 10 версии 20H2 (x64); Windows 11 версии 24H2, сборка 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Библиотека | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |