WHvMapVpciDeviceInterrupt

Leképzi egy MSI-t vagy MSI-X megszakítást egy hozzárendelt virtuális PCI-eszközhöz, és visszaadja az MSI-címet és az adatokat, hogy beprogramozza az eszközt.

Szemantika

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

Kezelje a virtuális PCI-eszközt tartalmazó partíciót.

LogicalDeviceId

Megadja a virtuális PCI-eszköz logikai eszközazonosítóját az eszköz létrehozásakor hozzárendelt módon.

Index

Megadja a létrehozandó megszakításleképezési bejegyzés indexét. Minden leképezési kérelemnek egyedi, nem használt indexet kell megadnia.

MessageCount

Megadja a megszakításhoz kért üzenetek számát. Több üzenetből álló MSI-megszakítás esetén ez két, 1 és 32 közötti hatvány, beleértve a többit is. MSI-X megszakítás esetén állítsa ezt az értéket 1 értékre.

Target

A megszakítás célvektorát és processzorkészletét ellátó struktúra mutatóját WHV_VPCI_INTERRUPT_TARGET adja meg. Ha MessageCount 1-nél nagyobb, minden üzenet inicializálása ugyanazzal a célprocesszorkészlettel történik.

MsiAddress

Megkapja a megszakításhoz rendelt MSI-címet. Programozza be ezt az értéket az eszköz MSI- vagy MSI-X képességébe.

MsiData

Megkapja a megszakításhoz rendelt MSI-adatok hasznos adatait. Programozza be ezt az értéket az eszköz MSI- vagy MSI-X képességébe.

Visszaadott érték

Ha a függvény sikeres, a visszatérési érték az S_OK.

A függvény akkor ad vissza értéket E_INVALIDARG , ha Index nagyobb, mint 65535, ha MessageCount 0 vagy nagyobb, mint 32, meghatározatlan Target->Flags jelölőt ad meg, ha Target->ProcessorCount 0 vagy meghaladja a partícióban lévő virtuális processzorok számát, ha egy processzor Target->Processors nem érvényes virtuális processzorindex, vagy ha WHvVpciInterruptTargetFlagMulticast egyetlen célprocesszorsal van beállítva. Az Arm64-ben a függvény akkor ad vissza, E_INVALIDARG ha Target->ProcessorCount nagyobb, mint 1, vagy ha WHvVpciInterruptTargetFlagMulticast be van állítva, mert a hipervizor az egyes MSI-ket egyetlen virtuális processzorra célozza az Arm64-en.

Remarks

A WHvMapVpciDeviceInterrupt függvény létrehoz egy leképezést, hogy a hozzárendelt eszközt háttérbe helyező fizikai erőforrások által kiadott megszakításokat a rendszer az eszköz tulajdonában lévő partíció cél virtuális processzoraihoz irányítsa. A leképezés létrehozása után programozza be a visszaadott MsiAddress és MsiData az értékeket az eszköz MSI- vagy MSI-X képességébe.

Ha az eszköz logikai megszakításokkal lett létrehozva, a hívó közvetlenül is érvényesítheti a megszakítást a visszaadott és MsiDataWHvRequestVpciDeviceInterrupta visszaküldött MsiAddress eszköznek való továbbítással.

Többüzenetes MSI-megszakítás (MessageCount 1-nél nagyobb) leképezésekor minden üzenet inicializálva lesz ugyanazzal a célprocesszorkészlettel. Ezután WHvRetargetVpciDeviceInterrupt az egyes üzeneteket egy másik processzorkészletbe adhatja vissza. Lekérdezheti a megfeleltetett megszakítás WHvGetVpciDeviceInterruptTargetaktuális célját, és eltávolíthatja a leképezést a következővel WHvUnmapVpciDeviceInterrupt: .

Requirements

Requirement Érték
Minimálisan támogatott Windows Windows 10, 20H2-es verzió (x64); Windows 11, 24H2-es verzió, 26100.3915-ös build (Arm64)
Header WinHvPlatform.h
Könyvtár WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Lásd még