WHvCreateTrigger

Создает объект триггера, который предоставляет предварительно настроенное прерывание или событие в секцию при сигнале события узла.

Синтаксис

typedef enum WHV_TRIGGER_TYPE
{
#if defined(_AMD64_)
    WHvTriggerTypeInterrupt = 0,
#endif
    WHvTriggerTypeSynicEvent = 1,
    WHvTriggerTypeDeviceInterrupt = 2,
} WHV_TRIGGER_TYPE;

typedef struct WHV_TRIGGER_PARAMETERS
{
    WHV_TRIGGER_TYPE TriggerType;
    UINT32 Reserved;
    union
    {
#if defined(_AMD64_)
        WHV_INTERRUPT_CONTROL Interrupt;
#endif
        WHV_SYNIC_EVENT_PARAMETERS SynicEvent;
        struct
        {
            UINT64 LogicalDeviceId;
            UINT64 MsiAddress;
            UINT32 MsiData;
            UINT32 Reserved;
        } DeviceInterrupt;
    };
} WHV_TRIGGER_PARAMETERS;

typedef PVOID WHV_TRIGGER_HANDLE;

HRESULT
WINAPI
WHvCreateTrigger(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ const WHV_TRIGGER_PARAMETERS* Parameters,
    _Out_ WHV_TRIGGER_HANDLE* TriggerHandle,
    _Out_ HANDLE* EventHandle
    );

Parameters

Partition

Дескриптор объекта секции.

Parameters

Указывает тип триггера и действие для доставки в секцию. Член TriggerType выбирает, какой член объединения используется: WHvTriggerTypeInterrupt (только x64) использует, WHvTriggerTypeSynicEvent использует InterruptSynicEventи WHvTriggerTypeDeviceInterrupt используетDeviceInterrupt. Полные определения каждого элемента см. в разделе "Типы данных триггеров ".

TriggerHandle

Получает дескриптор созданному объекту триггера. Используйте этот дескриптор для WHvUpdateTriggerParameters перенацеливать триггер и WHvDeleteTrigger удалять его.

EventHandle

Получает дескриптор событий Win32. Вызывающий объект активирует триггер, сигнализируя об этом событии ( например, с SetEvent помощью которого настроенное действие Parameters будет доставлено в секцию. Вызывающий объект владеет этим дескриптором и должен освободить его, если CloseHandle он больше не нужен.

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

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

Функция возвращает E_INVALIDARG , если параметры недопустимы Parameters для выбранного типа триггера. Для триггера WHvTriggerTypeDeviceInterrupt возвращается HRESULT_FROM_WIN32(ERROR_HV_INVALID_DEVICE_ID)недопустимое LogicalDeviceId значение.

Remarks

Функция WHvCreateTrigger создает объект с областью секционирования, который привязывает событие узла к предварительно настроенного действия гостевого целевого объекта. После создания триггера узел сигнализирует возвращаемым EventHandle ( например, из подпрограммы завершения ввода-вывода или другого потока) для доставки настроенного прерывания или события в секцию, не выполняя отдельный вызов API или гиперкласк для каждой доставки. Благодаря этому триггеры хорошо подходят для сценариев пути к данным, таких как очереди получения виртуальных сетевых адаптеров, кольца завершения хранилища и сигналив канала.

Член TriggerTypeParameters выбирает действие, которое доставляется при сигнале события:

  • WHvTriggerTypeInterrupt (только x64) внедряет виртуальные прерывания, описанные WHV_INTERRUPT_CONTROL структурой, — тот же эффект, что WHvRequestInterruptи предварительно вооруженный, чтобы его можно было повторно доставлять при каждом сигнале события.
  • WHvTriggerTypeSynicEvent задает флаг события контроллера синтетических прерываний (SynIC) на виртуальном процессоре, уровне доверия и SINT с именем WHV_SYNIC_EVENT_PARAMETERS структуры. TargetVtl должен иметь значение VTL 0.
  • WHvTriggerTypeDeviceInterruptутверждает прерывание устройства (MSI) для логического устройства, именуемого с помощью LogicalDeviceIdMsiAddress и MsiData. Логическое устройство уже должно присутствовать в секции и прерывание, сопоставленное , например, через WHvMapVpciDeviceInterrupt — перед сигналом триггера.

Доставка асинхронна. Несколько сигналов, поступающих до завершения доставки, могут объединиться в одну доставку. Гость должен быть готов к очистке очереди или кольца, который триггер представляет для каждой доставки.

WHvTriggerTypeInterrupt Interrupt и член WHV_TRIGGER_PARAMETERS доступны только в x64. Только в Arm64 WHvTriggerTypeSynicEvent и WHvTriggerTypeDeviceInterrupt доступны.

Триггер и дескриптор событий имеют независимые время существования. Удаление триггера с WHvDeleteTrigger недопустимым EventHandleзначением; вызывающий объект должен закрыть его с CloseHandleпомощью. Триггеры не сохраняются во время динамической миграции.

Требования

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

См. также