パーティションのゲスト物理アドレス空間の範囲を、指定されたホスト プロセスのメモリにマップします。
構文
// Guest physical address
typedef UINT64 WHV_GUEST_PHYSICAL_ADDRESS;
// Flags used by WHvMapGpaRange/WHvMapGpaRange2
typedef enum WHV_MAP_GPA_RANGE_FLAGS
{
WHvMapGpaRangeFlagNone = 0x00000000,
WHvMapGpaRangeFlagRead = 0x00000001,
WHvMapGpaRangeFlagWrite = 0x00000002,
WHvMapGpaRangeFlagExecute = 0x00000004,
WHvMapGpaRangeFlagTrackDirtyPages = 0x00000008,
} WHV_MAP_GPA_RANGE_FLAGS;
// Enables bitwise operators on the WHV_MAP_GPA_RANGE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_MAP_GPA_RANGE_FLAGS);
HRESULT
WINAPI
WHvMapGpaRange2(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ HANDLE Process,
_In_ VOID* SourceAddress,
_In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,
_In_ UINT64 SizeInBytes,
_In_ WHV_MAP_GPA_RANGE_FLAGS Flags
);
Parameters
Partition
パーティション オブジェクトへのハンドル。
Process
SourceAddressによって識別されるメモリ領域がアドレス空間に含まれているホスト プロセスを処理します。 ハンドルは、そのプロセスへの PROCESS_VM_READ、 PROCESS_VM_WRITE、および PROCESS_VM_OPERATION アクセス権を付与する必要があります。
SourceAddress
マッピングのソースであるメモリ領域の、 Processによって識別されるプロセスのアドレス空間内のページアライン アドレスを指定します。
GuestAddress
VM の物理アドレス空間内の宛先アドレスを指定します。
SizeInBytes
マップするバイト数を指定します。
Flags
マッピングのアクセス フラグを指定します。
戻り値
関数が成功した場合、戻り値は S_OK。
ソースリージョンまたはゲストの物理アドレス範囲がページアラインされていない場合、サイズが 0 の場合、またはオーバーフローする範囲を記述している場合、関数は E_INVALIDARGを返します。 ページに適用できないアクセス許可の値または組み合わせを指定Flags場合、この関数はE_INVALIDARGも返します。
Remarks
WHvMapGpaRange2関数は、WHvMapGpaRangeの拡張形式です。
WHvMapGpaRangeは常に呼び出し元プロセスのアドレス空間をマッピングのソースとして使用しますが、WHvMapGpaRange2は明示的なProcess ハンドルを受け入れ、そのプロセスのアドレス空間を使用します。 これにより、仮想化では、別のホスト プロセスによって所有されているメモリを使用して、パーティションのゲスト物理メモリをスタックバックできます。
パーティションの GPA 領域で範囲のマッピングを作成すると、ソース プロセス内のリージョンがその範囲のバッキング メモリとして設定されます。 この操作は、指定された GPA ページの以前のマッピングを置き換えます。
WHvMapGpaRange2で作成されたマッピングを削除するには、WHvUnmapGpaRangeを呼び出します。
Requirements
| 要件 | 価値 |
|---|---|
| サポートされている最小Windows | Windows 10バージョン 20H2 (x64);Windows 11、バージョン 24H2、ビルド 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| 図書館 | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64、Arm64 |