WHvMapVpciDeviceMmioRanges

仮想 PCI (VPCI) デバイスの MMIO 範囲を呼び出し元のプロセスにマップします。

構文

typedef enum WHV_VPCI_DEVICE_REGISTER_SPACE
{
    WHvVpciConfigSpace = -1,
    WHvVpciBar0 = 0,
    WHvVpciBar1 = 1,
    WHvVpciBar2 = 2,
    WHvVpciBar3 = 3,
    WHvVpciBar4 = 4,
    WHvVpciBar5 = 5
} WHV_VPCI_DEVICE_REGISTER_SPACE;

typedef enum WHV_VPCI_MMIO_RANGE_FLAGS
{
    WHvVpciMmioRangeFlagReadAccess = 0x00000001,
    WHvVpciMmioRangeFlagWriteAccess = 0x00000002
} WHV_VPCI_MMIO_RANGE_FLAGS;

// Enables bitwise operators on the WHV_VPCI_MMIO_RANGE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_VPCI_MMIO_RANGE_FLAGS);

typedef struct WHV_VPCI_MMIO_MAPPING
{
    WHV_VPCI_DEVICE_REGISTER_SPACE Location;
    WHV_VPCI_MMIO_RANGE_FLAGS Flags;
    UINT64 SizeInBytes;
    UINT64 OffsetInBytes;
    PVOID VirtualAddress;
} WHV_VPCI_MMIO_MAPPING;

HRESULT
WINAPI
WHvMapVpciDeviceMmioRanges(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ UINT64 LogicalDeviceId,
    _Out_ UINT32* MappingCount,
    _Outptr_result_buffer_(*MappingCount) WHV_VPCI_MMIO_MAPPING** Mappings
    );

Parameters

Partition

VPCI デバイスを所有するパーティションへのハンドル。

LogicalDeviceId

VPCI デバイスの論理デバイス識別子を指定します。

MappingCount

返された Mappings 配列内の要素の数を受け取ります。

Mappings

マップされた MMIO 範囲を記述する WHV_VPCI_MMIO_MAPPING 要素の配列へのポインターを受け取ります。

戻り値

関数が成功した場合、戻り値は S_OK

Remarks

WHvMapVpciDeviceMmioRanges関数は、VPCI デバイスに関連付けられている物理 MMIO 範囲を呼び出し元のプロセスの仮想アドレス空間にマップします。 デバイスは D0 電源状態である必要があります。 WHvSetVpciDevicePowerStateを使用して電源の状態を設定します。

使用可能な各ベース アドレス レジスタ (BAR) は、 Mappings 配列内の 1 つ以上のエントリによって表されます。 エントリは主に BAR で並べ替えられます。 同じ BAR のエントリはオフセットで並べ替え、重複せず、BAR のサイズ全体をギャップなしでカバーします。 各エントリは、BAR のサブ範囲を識別します。これは、ベース アドレスと指定した長さの指定されたオフセットから始まり、サブ範囲がマップされる仮想アドレス、呼び出し元のプロセスに付与されるアクセス レベルです。

返された配列は、呼び出し元がデバイスの MMIO 範囲を WHvUnmapVpciDeviceMmioRanges でマップ解除するか、 WHvSetVpciDevicePowerStateでデバイスの電源をオフにするか、 WHvDeleteVpciDeviceでデバイスを破棄するまで有効なままです。

Requirements

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

こちらも参照ください