Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразует гостевой виртуальный адрес в гостевой физический адрес для виртуального процессора.
Синтаксис
// Flags used by WHvTranslateGva
typedef enum WHV_TRANSLATE_GVA_FLAGS
{
WHvTranslateGvaFlagNone = 0x00000000,
WHvTranslateGvaFlagValidateRead = 0x00000001,
WHvTranslateGvaFlagValidateWrite = 0x00000002,
WHvTranslateGvaFlagValidateExecute = 0x00000004,
WHvTranslateGvaFlagPrivilegeExempt = 0x00000008,
WHvTranslateGvaFlagSetPageTableBits = 0x00000010
} WHV_TRANSLATE_GVA_FLAGS;
// Enables bitwise operators on the WHV_TRANSLATE_GVA_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_TRANSLATE_GVA_FLAGS);
// Result of an attempt to translate a guest virtual address
typedef enum WHV_TRANSLATE_GVA_RESULT_CODE
{
WHvTranslateGvaResultSuccess = 0,
// Translation failures
WHvTranslateGvaResultPageNotPresent = 1,
WHvTranslateGvaResultPrivilegeViolation = 2,
WHvTranslateGvaResultInvalidPageTableFlags = 3,
// GPA access failures
WHvTranslateGvaResultGpaUnmapped = 4,
WHvTranslateGvaResultGpaNoReadAccess = 5,
WHvTranslateGvaResultGpaNoWriteAccess = 6,
WHvTranslateGvaResultGpaIllegalOverlayAccess = 7,
WHvTranslateGvaResultIntercept = 8
} WHV_TRANSLATE_GVA_RESULT_CODE;
// Output buffer of WHvTranslateGva
typedef struct WHV_TRANSLATE_GVA_RESULT
{
WHV_TRANSLATE_GVA_RESULT_CODE ResultCode;
UINT32 Reserved;
} WHV_TRANSLATE_GVA_RESULT;
HRESULT
WINAPI
WHvTranslateGva(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT32 VpIndex,
_In_ WHV_GUEST_VIRTUAL_ADDRESS Gva,
_In_ WHV_TRANSLATE_GVA_FLAGS TranslateFlags,
_Out_ WHV_TRANSLATE_GVA_RESULT* TranslationResult,
_Out_ WHV_GUEST_PHYSICAL_ADDRESS* Gpa
);
Parameters
Partition
Дескриптор объекта секции.
VpIndex
Указывает индекс виртуального процессора, для которого преобразуется виртуальный адрес.
Gva
Указывает виртуальный адрес, который преобразуется.
TranslateFlags
Задает флаги для перевода.
TranslationResult
Получает результат перевода.
Gpa
Получает физический адрес, если перевод выполнен успешно.
Возвращаемое значение
Если функция выполнена успешно, возвращается S_OKзначение. Успешное возвращение указывает только на то, что TranslationResult выходной параметр действителен; результат самого перевода возвращается в ResultCode элементе этой структуры.
Remarks
Преобразование виртуального адреса, используемого виртуальным процессором в секции, позволяет стеку виртуализации эмулировать инструкцию процессора для операции ввода-вывода, используя результаты перевода для чтения и записи операндов памяти инструкции в пространстве GPA секции.
Гипервизор выполняет перевод, пройдя таблицу страниц, которая в настоящее время активна для виртуального процессора. Перевод может завершиться ошибкой, если таблица страницы недоступна, в этом случае необходимо внедрить соответствующий сбой страницы в виртуальный процессор стеком виртуализации.
Требования
| Requirement | Ценность |
|---|---|
| Минимальный поддерживаемый Windows | Windows 10 версии 1803 (x64); Windows 11 версии 24H2, сборка 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Библиотека | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |