仮想 PCI (VPCI) デバイスを作成し、そのリソースをパーティションに割り当てます。
構文
typedef enum WHV_CREATE_VPCI_DEVICE_FLAGS
{
WHvCreateVpciDeviceFlagNone = 0x00000000,
WHvCreateVpciDeviceFlagPhysicallyBacked = 0x00000001,
WHvCreateVpciDeviceFlagUseLogicalInterrupts = 0x00000002
} WHV_CREATE_VPCI_DEVICE_FLAGS;
// Enables bitwise operators on the WHV_CREATE_VPCI_DEVICE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_CREATE_VPCI_DEVICE_FLAGS);
HRESULT
WINAPI
WHvCreateVpciDevice(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT64 LogicalDeviceId,
_In_ HANDLE VpciResource,
_In_ WHV_CREATE_VPCI_DEVICE_FLAGS Flags,
_In_opt_ HANDLE NotificationEventHandle
);
Parameters
Partition
パーティション オブジェクトへのハンドル。
LogicalDeviceId
パーティションのスコープ内のデバイスの一意識別子を指定します。
VpciResource
仮想デバイスをバックアップする、以前に割り当てられた VPCI リソースを処理します。
WHvAllocateVpciResourceからこのハンドルを取得します。
Flags
WHV_CREATE_VPCI_DEVICE_FLAGS値の組み合わせとして、作成するデバイスの省略可能な特性を指定します。
NotificationEventHandle
VPCI デバイスに関連付けられている非同期イベントを呼び出し元に通知するように通知されるイベントの省略可能なハンドルを指定します。 イベントが通知されたら、 WHvGetVpciDeviceNotificationで保留中の通知を取得します。
戻り値
関数が成功した場合、戻り値は S_OK。
Remarks
WHvCreateVpciDevice関数は、仮想 PCI デバイスを作成し、VpciResourceによって識別される物理リソースまたは仮想リソースをパーティションに割り当てます。 この呼び出しが完了すると、IOMMU がプログラムされ、デバイスをバックアップする物理関数または仮想関数の PCI リクエスタ ID がパーティション ドメインに割り当てられ、その関数から発生した DMA 操作がパーティションのアドレス空間に再マップされます。
この関数を呼び出す前に、 WHvAllocateVpciResource を使用してリソースを割り当てます。 デバイスが作成されたら、MMIO 範囲を WHvMapVpciDeviceMmioRanges にマップし、割り込みを WHvMapVpciDeviceInterruptにマップします。
WHvDeleteVpciDeviceでデバイスを破棄します。
Requirements
| 要件 | 価値 |
|---|---|
| サポートされている最小Windows | Windows 10バージョン 20H2 (x64);Windows 11、バージョン 24H2、ビルド 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| 図書館 | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64、Arm64 |