Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Записывает до 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
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
Дескриптор объекта секции.
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
Функция WHvWriteGpaRange записывает до 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 |