WHvCreateTrigger

Bir konak olayı sinyallendiğinde bölüme önceden yapılandırılmış bir kesme veya olay teslim eden bir tetikleyici nesnesi oluşturur.

Sözdizimi

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

Bölüm nesnesi için tanıtıcı.

Parameters

Tetikleyicinin türünü ve bölüme teslim etmek için eylemi belirtir. Üye TriggerType , birleşimin hangi üyesinin kullanılacağını seçer: WHvTriggerTypeInterrupt (yalnızca x64) Interruptkullanır, WHvTriggerTypeSynicEvent kullanır SynicEventve WHvTriggerTypeDeviceInterrupt kullanır DeviceInterrupt. Her üyenin tam tanımı için bkz. Tetikleyici Veri Türleri .

TriggerHandle

Tanıtıcıyı yeni oluşturulan tetikleyici nesnesine alır. Tetikleyiciyi yeniden hedeflemek ve silmek için ile WHvDeleteTrigger bu tanıtıcıyı WHvUpdateTriggerParameters kullanın.

EventHandle

Bir Win32 olay tanıtıcısı alır. Çağıran, içinde yapılandırılan eylemin Parameters bölüme teslim edilmesine neden olan bu olayı (örneğin, ile SetEvent ) işaretleyerek tetikleyiciyi etkinleştirir. Çağıranın bu tanıtıcıya sahip olması ve artık gerekli olmadığında ile serbest CloseHandle bırakması gerekir.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri olur S_OK.

içindeki parametreler Parameters seçili tetikleyici türü için geçerli değilse işlevi döndürürE_INVALIDARG. WHvTriggerTypeDeviceInterrupt Tetikleyici için geçersiz LogicalDeviceId bir döndürürHRESULT_FROM_WIN32(ERROR_HV_INVALID_DEVICE_ID).

Açıklamalar

işlevi, WHvCreateTrigger bir konak olayını önceden yapılandırılmış bir konuk hedefleme eylemine bağlayan bölüm kapsamlı bir nesne oluşturur. Tetikleyici oluşturulduktan sonra konak, döndürülene EventHandle ( örneğin bir G/Ç tamamlama yordamından veya başka bir iş parçacığından) her teslimde ayrı bir API çağrısı veya hiper çağrı yapmadan yapılandırılmış kesmeyi veya olayı bölüme teslim etmek için sinyal gönderir. Bu, tetikleyicileri sanal NIC alma kuyrukları, depolama tamamlama halkaları ve kanal sinyali gibi veri yolu senaryolarına uygun hale getirir.

TriggerType öğesinin Parameters üyesi, olay sinyallendiğinde teslim edilen eylemi seçer:

  • WHvTriggerTypeInterrupt (yalnızca x64) yapı tarafından WHV_INTERRUPT_CONTROL tanımlanan bir sanal kesme ekler ; ile WHvRequestInterruptaynı etkiyi sağlar, ancak olay her sinyallendiğinde yeniden teslim edilebilmesi için önceden silahlıdır.
  • WHvTriggerTypeSynicEvent sanal işlemci, sanal güven düzeyi ve yapı tarafından WHV_SYNIC_EVENT_PARAMETERS adlandırılan SINT üzerinde yapay kesme denetleyicisi (SynIC) olay bayrağını ayarlar. TargetVtl VTL 0 olmalıdır.
  • WHvTriggerTypeDeviceInterruptve MsiDatakullanarak MsiAddress tarafından LogicalDeviceIdadlandırılan mantıksal cihaz için bir cihaz (MSI) kesmesi onaylar. Mantıksal cihaz, tetikleyici işaretlenmeden önce bölümde zaten mevcut olmalıdır ve kesme eşlenmiş olmalıdır (örneğin, aracılığıyla WHvMapVpciDeviceInterrupt ).

Teslim zaman uyumsuzdur. Bir teslimat tamamlanmadan önce gelen birden çok sinyal tek bir teslimatta birleştirilir. Konuk, tetikleyicinin her teslimde temsil ettiği kuyruğu veya halkayı boşaltmaya hazır olmalıdır.

WHvTriggerTypeInterrupt Interrupt ve üyesi WHV_TRIGGER_PARAMETERS yalnızca x64'te kullanılabilir. Arm64'te yalnızca WHvTriggerTypeSynicEvent ve WHvTriggerTypeDeviceInterrupt kullanılabilir.

Tetikleyici ve olay tanıtıcısı bağımsız yaşam sürelerine sahiptir. ile tetikleyicinin WHvDeleteTrigger silinmesi geçersiz EventHandlekılmaz; çağıranın yine de ile CloseHandlekapatması gerekir. Tetikleyiciler dinamik geçişte korunmaz.

Requirements

Requirement Değer
Desteklenen en düşük Windows Windows 10, sürüm 20H2 (x64); Windows 11, sürüm 24H2, derleme 26100.3915 (Arm64)
Header WinHvPlatform.h
Kütüphane WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Ayrıca bakınız