仮想 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 |