WHvTranslateGva

ゲスト仮想アドレスを仮想プロセッサのゲスト物理アドレスに変換します。

構文

// 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 空間内の命令のメモリ オペランドを読み書きする I/O 操作のプロセッサ命令をエミュレートできます。

ハイパーバイザーは、仮想プロセッサで現在アクティブなページ テーブルをウォークして翻訳を実行します。 ページ テーブルにアクセスできない場合、変換が失敗する可能性があります。その場合、仮想化スタックによって適切なページ フォールトを仮想プロセッサに挿入する必要があります。

Requirements

要件 価値
サポートされている最小Windows Windows 10バージョン 1803 (x64);Windows 11、バージョン 24H2、ビルド 26100.3915 (Arm64)
Header WinHvPlatform.h
図書館 WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64、Arm64

こちらも参照ください