WHvMapVpciDeviceInterrupt

映射一個 MSI 或 MSI-X 中斷,針對指定的虛擬 PCI 裝置,並回傳 MSI 位址與資料以進行程式編寫。

語法

typedef enum WHV_VPCI_INTERRUPT_TARGET_FLAGS
{
    WHvVpciInterruptTargetFlagNone      = 0x00000000,
    WHvVpciInterruptTargetFlagMulticast = 0x00000001,

} WHV_VPCI_INTERRUPT_TARGET_FLAGS;

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

typedef struct WHV_VPCI_INTERRUPT_TARGET
{
    UINT32 Vector;
    WHV_VPCI_INTERRUPT_TARGET_FLAGS Flags;
    UINT32 ProcessorCount;
    UINT32 Processors[ANYSIZE_ARRAY];

} WHV_VPCI_INTERRUPT_TARGET;

HRESULT
WINAPI
WHvMapVpciDeviceInterrupt(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ UINT64 LogicalDeviceId,
    _In_ UINT32 Index,
    _In_ UINT32 MessageCount,
    _In_ const WHV_VPCI_INTERRUPT_TARGET* Target,
    _Out_ UINT64* MsiAddress,
    _Out_ UINT32* MsiData
    );

Parameters

Partition

處理到擁有虛擬 PCI 裝置的分割區。

LogicalDeviceId

指定虛擬 PCI 裝置的邏輯裝置 ID,該裝置在建立時所指派。

Index

指定要建立的中斷映射條目的索引。 每個映射請求都必須指定一個唯一且未使用的索引。

MessageCount

指定中斷所需訊息數量。 對於多訊息 MSI 中斷,這是介於 1 到 32 之間的二的冪次方。 對於 MSI-X 中斷,將此值設為 1。

Target

指定一個指向 WHV_VPCI_INTERRUPT_TARGET 結構的指標,該結構提供中斷的目標向量與處理器集合。 當 大於 1 時 MessageCount ,每個訊息初始化時都使用相同的目標處理器設定。

MsiAddress

接收分配給中斷的 MSI 位址。 將此數值編碼到裝置的 MSI 或 MSI-X 功能中。

MsiData

接收分配給中斷的 MSI 資料有效載荷。 將此數值編碼到裝置的 MSI 或 MSI-X 功能中。

傳回值

如果函式成功,則傳回值為 S_OK

Index 大於 65535、MessageCount當 0 或大於 32、Target->Flags指定未定義的旗標、Target->ProcessorCount當 為 0 或超過分割區中的虛擬處理器數量、當 中的Target->Processors某個處理器不是有效的虛擬處理器索引,或 WHvVpciInterruptTargetFlagMulticast 與單一目標處理器一起設定時,該函式會回傳E_INVALIDARG。 在 Arm64 上,當 Target->ProcessorCount 大於 1 或WHvVpciInterruptTargetFlagMulticast設定時,函式會回傳E_INVALIDARG,因為 hypervisor 將每個 MSI 鎖定在 Arm64 上的單一虛擬處理器。

Remarks

WHvMapVpciDeviceInterrupt 函式建立映射,使得由支援該裝置的實體資源所發出的中斷,會被路由到擁有該裝置的分割區的目標虛擬處理器。 映射建立完成後,將回傳 MsiAddress 的值 MsiData 編程到裝置的 MSI 或 MSI-X 功能中。

當裝置建立時啟用邏輯中斷,呼叫者也可以直接將中 MsiAddressMsiDataWHvRequestVpciDeviceInterrupt斷傳給 。

當映射多訊息 MSI 中斷(MessageCount 大於 1)時,所有訊息初始化為相同的目標處理器。 之後再用 WHvRetargetVpciDeviceInterrupt 來將個別訊息重新定位到不同的處理器集。 查詢映射 WHvGetVpciDeviceInterruptTarget中斷的當前目標,並用 移除映射 WHvUnmapVpciDeviceInterrupt

Requirements

需求 價值
最低支援的 Windows Windows 10,版本 20H2(x64);Windows 11,版本 24H2,建置版 26100.3915(Arm64)
Header WinHvPlatform.h
圖書館 WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64、Arm64

另請參閱