パーティションのゲスト物理アドレス空間から最大 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
WHvReadGpaRange(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT32 VpIndex,
_In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,
_In_ WHV_ACCESS_GPA_CONTROLS Controls,
_Out_writes_bytes_(DataSizeInBytes) PVOID Data,
_In_ UINT32 DataSizeInBytes
);
Parameters
Partition
パーティション オブジェクトへのハンドル。
VpIndex
アクセスが実行されるコンテキスト内の仮想プロセッサのインデックスを指定します。
GuestAddress
読み取りを開始するゲスト物理アドレスを指定します。
Controls
WHV_ACCESS_GPA_CONTROLS値として、アクセスのキャッシュの種類とターゲット VTL を指定します。
Data
ゲストの物理アドレス範囲から読み取られたバイトを受信します。
DataSizeInBytes
読み取るバイト数を指定します。 この値は 0 より大きく、 WHV_READ_WRITE_GPA_RANGE_MAX_SIZE以下にする必要があります。
戻り値
関数が成功した場合、戻り値は S_OK。
この関数は、次のエラー コードを返すことができます。
-
E_INVALIDARG—DataSizeInBytesがWHV_READ_WRITE_GPA_RANGE_MAX_SIZEより大きい場合、ControlsのCacheTypeが有効なキャッシュの種類ではない、ControlsのInputVtlが現在の VTL を参照しない、またはControlsの予約済みフィールドが設定されている。 -
E_ACCESSDENIED— ゲストの物理アドレス範囲がマップされていないか、アクセスが許可されていません。
Remarks
WHvReadGpaRange関数は、仮想プロセッサのコンテキストで最大WHV_READ_WRITE_GPA_RANGE_MAX_SIZE (16) バイトのゲスト物理メモリを読み取ります。 この制限されたアクセス サイズにより、関数は一括メモリ転送ではなく命令オペランドをエミュレートするのに適しています。 より大きな転送の場合は、 WHvMapGpaRange または WHvMapGpaRange2 によって作成されたホスト マッピングを使用してゲスト物理メモリをバックアップし、直接アクセスします。
読み取りは、 VpIndexによって識別される仮想プロセッサのコンテキストで実行されるため、 Controlsで指定されたキャッシュの種類や VTL など、そのプロセッサに適用されるメモリ アクセス セマンティクスを監視します。 対象のページがまだ常駐していない場合、この関数はページを常駐させ、アクセスを再試行します。
Requirements
| 要件 | 価値 |
|---|---|
| サポートされている最小Windows | Windows 10バージョン 20H2 (x64);Windows 11、バージョン 24H2、ビルド 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| 図書館 | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64、Arm64 |