Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellt ein Triggerobjekt, das eine vorkonfigurierte Unterbrechung oder ein Ereignis an eine Partition übermittelt, wenn ein Hostereignis signalisiert wird.
Syntax
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
);
Parameter
Partition
Behandeln sie das Partitionsobjekt.
Parameters
Gibt den Typ des Triggers und die Aktion an, die an die Partition übergeben werden soll. Das TriggerType Mitglied wählt aus, welches Mitglied der Union verwendet wird: WHvTriggerTypeInterrupt (nur x64) verwendetInterrupt, WHvTriggerTypeSynicEvent verwendet SynicEventund verwendet DeviceInterrupt.WHvTriggerTypeDeviceInterrupt Weitere Informationen finden Sie unter Trigger-Datentypen für die vollständige Definition der einzelnen Member.
TriggerHandle
Empfängt das Handle für das neu erstellte Triggerobjekt. Verwenden Sie dieses Handle, WHvUpdateTriggerParameters um den Trigger neu zuzuweisen und WHvDeleteTrigger ihn zu löschen.
EventHandle
Empfängt ein Win32-Ereignishandle. Der Aufrufer aktiviert den Trigger durch Signalisieren dieses Ereignisses , z. B. mit SetEvent dem, wodurch die konfigurierte Aktion Parameters an die Partition übermittelt wird. Der Aufrufer besitzt dieses Handle und muss es CloseHandle freigeben, wenn es nicht mehr benötigt wird.
Rückgabewert
Wenn die Funktion erfolgreich ist, lautet S_OKder Rückgabewert .
Die Funktion gibt zurück E_INVALIDARG , wenn die Parameter Parameters für den ausgewählten Triggertyp ungültig sind. Für einen WHvTriggerTypeDeviceInterrupt Auslöser gibt eine ungültige LogicalDeviceId Rückgabe zurück HRESULT_FROM_WIN32(ERROR_HV_INVALID_DEVICE_ID).
Remarks
Die WHvCreateTrigger Funktion erstellt ein partitionsbezogenes Objekt, das ein Hostereignis an eine vorkonfigurierte Gastadressierungsaktion bindet. Nachdem der Trigger erstellt wurde, signalisiert der Host die zurückgegebene EventHandle (z. B. von einer E/A-Abschlussroutine oder einem anderen Thread), um den konfigurierten Interrupt oder das Ereignis an die Partition zu übermitteln, ohne bei jeder Übermittlung einen separaten API-Aufruf oder Hypercall durchzuführen. Dies eignet sich gut für Datenpfadszenarien wie virtuelle NIC-Empfangswarteschlangen, Speicherabschlussringe und Kanalsignalisierung.
Das TriggerType Mitglied der Parameters Auswahl der Aktion, die beim Signalsignal des Ereignisses übermittelt wird:
-
WHvTriggerTypeInterrupt(x64 nur) fügt einen virtuellen Interrupt ein, der durch dieWHV_INTERRUPT_CONTROLStruktur beschrieben wird – derselbe Effekt wieWHvRequestInterrupt, aber vorgewaffnet, sodass er jedes Mal erneut übermittelt werden kann, wenn das Ereignis signalisiert wird. -
WHvTriggerTypeSynicEventlegt ein SynIC-Ereigniskennzeichnung (Synthetischer Interruptcontroller) für den virtuellen Prozessor, die virtuelle Vertrauensstufe und SINT fest, die von derWHV_SYNIC_EVENT_PARAMETERSStruktur benannt wird.TargetVtlmuss VTL 0 sein. -
WHvTriggerTypeDeviceInterruptbestätigt einen Geräteunterbruch (MSI) für das logische Gerät, das durchLogicalDeviceId, usingMsiAddressundMsiData. Das logische Gerät muss bereits in der Partition vorhanden sein und der interrupt zugeordnete (z. B. durchWHvMapVpciDeviceInterrupt) bevor der Trigger signalisiert wird.
Die Übermittlung ist asynchron. Mehrere Signale, die eingehen, bevor eine Lieferung abgeschlossen wird, können zu einer einzigen Lieferung zusammenwachsen. Der Gast muss bereit sein, die Warteschlange oder den Ring abzulassen, die der Trigger für jede Lieferung darstellt.
WHvTriggerTypeInterrupt und das Interrupt Mitglied von WHV_TRIGGER_PARAMETERS sind nur auf x64 verfügbar. Nur auf Arm64 WHvTriggerTypeSynicEvent und WHvTriggerTypeDeviceInterrupt sind verfügbar.
Der Trigger und das Ereignishandle verfügen über unabhängige Lebensdauern. Das Löschen des Triggers mit WHvDeleteTrigger "Ungültig" EventHandlewird nicht ungültig; der Aufrufer muss ihn trotzdem schließen.CloseHandle Trigger werden nicht über die Livemigration hinweg beibehalten.
Anforderungen
| Anforderung | Wert |
|---|---|
| Mindestens unterstützte Windows | Windows 10, Version 20H2 (x64); Windows 11, Version 24H2, Build 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Bibliothek | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |