WHvWriteGpaRange

Записывает до 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_INVALIDARGDataSizeInBytes больше 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

См. также