WHvRetargetVpciDeviceInterrupt

Изменяет целевой вектор и набор процессора для ранее сопоставленного прерывания назначенного виртуального устройства PCI.

Синтаксис

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
WHvRetargetVpciDeviceInterrupt(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ UINT64 LogicalDeviceId,
    _In_ UINT64 MsiAddress,
    _In_ UINT32 MsiData,
    _In_ const WHV_VPCI_INTERRUPT_TARGET* Target
    );

Parameters

Partition

Обработайте секцию, которая владеет виртуальным устройством PCI.

LogicalDeviceId

Указывает идентификатор логического устройства виртуального PCI, назначенный при создании устройства.

MsiAddress

Указывает MSI-адрес прерывания для перенацеления, как возвращается WHvMapVpciDeviceInterrupt.

MsiData

Указывает полезные данные MSI прерывания для перенацеления, как возвращается WHvMapVpciDeviceInterrupt.

Target

Указывает указатель на WHV_VPCI_INTERRUPT_TARGET структуру, которая предоставляет новый целевой вектор и набор процессора для прерывания.

Возвращаемое значение

Если функция выполнена успешно, возвращается S_OKзначение.

Функция возвращает E_INVALIDARG значение, если Target->ProcessorCount значение равно 0 или превышает число виртуальных процессоров в секции, если Target->Flags указывает неопределенный флаг, если задано меньше двух целевых процессоров, или если WHvVpciInterruptTargetFlagMulticast процессор больше Target->Processors или равен максимальному количеству виртуальных процессоров, которые может иметь секция. В Arm64 функция возвращается E_INVALIDARG , когда Target->ProcessorCount больше 1, так как гипервизор предназначен для каждого MSI к одному виртуальному процессору в Arm64.

Remarks

Функция WHvRetargetVpciDeviceInterrupt перемещает прерывание, которое ранее сопоставлено с WHvMapVpciDeviceInterrupt новым вектором и набором целевых виртуальных процессоров. Прерывание определяется и MsiData значениямиMsiAddress, возвращаемыми при сопоставлении, поэтому возможность MSI или MSI-X устройства не требуется перепрограммировать.

Перенацеливание отдельного сообщения прерывания MSI с несколькими сообщениями позволяет гостям распределять сообщения одного прерывания между различными наборами процессоров, после того как сообщения были инициализированы с одним целевым WHvMapVpciDeviceInterruptобъектом. Чтобы направить прерывание на нескольких процессорах, установите WHvVpciInterruptTargetFlagMulticast и Target->Flags укажите по крайней мере два процессора в Target->Processors; многоадресная рассылка поддерживается только в x64.

Требования

Requirement Ценность
Минимальный поддерживаемый Windows Windows 10 версии 20H2 (x64); Windows 11 версии 24H2, сборка 26100.3915 (Arm64)
Header WinHvPlatform.h
Библиотека WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

См. также