Bestimmen des Typs des zu empfangenden Ereignisses
Bevor Sie sich für den Empfang eines Ereignisses registrieren, müssen Sie die Arten von Ereignissen bestimmen, die empfangen werden sollen: systemintern oder extrinsisch. Weitere Informationen zum Empfangen von Ereignissen finden Sie unter Empfangen eines WMI-Ereignisses. Weitere Informationen zum Bereitstellen von Ereignissen finden Sie unter Entwickeln eines WMI-Anbieters und Schreiben eines Ereignisanbieters. Weitere Informationen zu den Sicherheitsbedenken beim Empfangen und Bereitstellen von Ereignissen finden Sie unter Schützen von WMI-Ereignissen.
Systeminterne Ereignisse
Ein systeminternes Ereignis ist ein Ereignis, das als Reaktion auf eine Änderung im standardmäßigen WMI-Datenmodell auftritt. Jede systeminterne Ereignisklasse stellt einen bestimmten Typ von Änderung dar und tritt auf, wenn ein Namespace, eine Klasse oder eine Klasseninstanz von WMI oder einem Anbieter erstellt, gelöscht oder geändert wird. Beispielsweise würde die Erstellung einer Win32_LogicalDisk-Instanz zu einer __InstanceCreationEvent-Instanz führen.
WMI erstellt systeminterne Ereignisse für Objekte, die im WMI-Repository gespeichert sind. Ein Anbieter generiert systeminterne Ereignisse für dynamische Klassen, aber WMI kann eine Instanz für eine dynamische Klasse erstellen, wenn kein Anbieter verfügbar ist. WMI verwendet Abrufe, um die Änderungen zu erkennen. In der folgenden Tabelle werden die Systemklassen aufgeführt, die WMI verwendet, um systeminterne Ereignisse zu melden.
System-Klasse | BESCHREIBUNG |
---|---|
__ClassCreationEvent | Benachrichtigt einen Consumer, wenn eine Klasse erstellt wird. |
__ClassDeletionEvent | Benachrichtigt einen Consumer, wenn eine Klasse gelöscht wird. |
__ClassModificationEvent | Benachrichtigt einen Consumer, wenn eine Klasse geändert wird. |
__InstanceCreationEvent | Benachrichtigt einen Consumer, wenn eine Klasseninstanz erstellt wird. |
__InstanceOperationEvent | Benachrichtigt einen Consumer, wenn ein Instanzereignis auftritt, z. B. das Erstellen, Löschen oder Ändern der Instanz. Sie können diese Klasse in Abfragen verwenden, um alle Typen von Ereignissen abzurufen, die einer Instanz zugeordnet sind. |
__InstanceDeletionEvent | Benachrichtigt einen Consumer, wenn eine Instanz gelöscht wird. |
__InstanceModificationEvent | Benachrichtigt einen Consumer, wenn eine Instanz geändert wird. |
__NamespaceCreationEvent | Benachrichtigt einen Consumer, wenn ein Namespace erstellt wird. |
__NamespaceDeletionEvent | Benachrichtigt einen Consumer, wenn ein Namespace gelöscht wird. |
__NamespaceModificationEvent | Benachrichtigt einen Consumer, wenn ein Namespace geändert wird. |
__ConsumerFailureEvent | Benachrichtigt einen Consumer, wenn ein anderes Ereignis aufgrund eines Fehlers eines Ereignisconsumers verworfen wird. |
__EventDroppedEvent | Benachrichtigt einen Consumer, wenn ein anderes Ereignis verworfen wird, anstatt an den anfordernden Ereignisconsumer übermittelt zu werden. |
__EventQueueOverflowEvent | Benachrichtigt einen Consumer, wenn ein Ereignis aufgrund eines Zustellwarteschlangenüberlaufs verworfen wird. |
__MethodInvocationEvent | Benachrichtigt einen Consumer, wenn ein Methodenaufrufereignis auftritt. |
Extrinsische Ereignisse
Ein extrinsisches Ereignis ist ein vordefiniertes Ereignis, das nicht direkt mit Änderungen im WMI-Datenmodell verknüpft werden kann. Daher ermöglicht WMI einem Ereignisanbieter, eine Ereignisklasse zu definieren, die das Ereignis beschreibt. Beispielsweise ist ein Ereignis, das einen Computer beschreibt, der in den Standbymodus wechselt, ein extrinsisches Ereignis. Ein Anbieter leitet ein extrinsisches Ereignis von der __ExtrinsicEvent-Systemklasse ab, die eine Unterklasse der __Event-Systemklasse ist. Die Systemregistrierungs- und SNMP-Anbieter definieren extrinsische Ereignisklassen, z. B. RegistryKeyChangeEvent, durch die ein Consumer benachrichtigt wird, wenn ein Registrierungsschlüssel geändert wird. Weitere Informationen finden Sie unter Registrieren für Systemregistrierungsereignisse und Schreiben eines Ereignisanbieters.
Im folgenden Beispiel meldet ein Ereignisanbieter Sicherheitsverletzungen an mindestens einem Gebäude. Die folgende Klasse kann für das extrinsische Ereignis definiert werden, das eine Sicherheitsverletzung darstellt.
class SecurityViolationEvent : __ExtrinsicEvent
{
string Building; // building where violation occurred
sint32 EntranceNumber; // entrance where violation occurred
datetime TimeOfDetection; // date and time of violation
}
Um die Benachrichtigungen über Sicherheitsverletzungen zu erhalten, registriert sich ein Consumer für den Ereignistyp SecurityViolationEvent. Sofern nicht anders angegeben, erhält der Consumer während aller Zeiträume und in allen Gebäuden eine Benachrichtigung über alle Sicherheitsverletzungen. Die Ereignisklasse enthält auch Informationen, die Consumer verwenden können, um nach spezifischeren Ereignissen zu fragen.
Im folgenden Beispiel registriert die Abfrage den Consumer nur für Sicherheitsverletzungsereignisse in Gebäude 24.
SELECT * FROM SecurityViolationEvent WHERE Building = 24;