Bepalen welk type gebeurtenis moet worden ontvangen
Voordat u zich registreert om een gebeurtenis te ontvangen, moet u bepalen welke typen gebeurtenissen moeten worden ontvangen: intrinsieke of extrinsische. Voor meer informatie over het ontvangen van gebeurtenissen, zie Een WMI-gebeurtenis ontvangen. Voor meer informatie over het leveren van evenementen, zie Een WMI-provider ontwikkelen en Een evenementprovider schrijven. Zie WMI-gebeurtenissen beveiligen voor meer informatie over de beveiligingsproblemen voor het ontvangen en leveren van gebeurtenissen.
Intrinsieke gebeurtenissen
Een intrinsieke gebeurtenis is een gebeurtenis die optreedt als reactie op een wijziging in het standaard-WMI-gegevensmodel. Elke intrinsieke gebeurtenisklasse vertegenwoordigt een specifiek type wijziging en treedt op wanneer WMI of een provider een naamruimte, klasse of klasse-exemplaar maakt, verwijdert of wijzigt. Het maken van een Win32_LogicalDisk exemplaar zou bijvoorbeeld resulteren in een __InstanceCreationEvent exemplaar.
WMI maakt intrinsieke gebeurtenissen voor objecten die zijn opgeslagen in de WMI-opslagplaats. Een provider genereert intrinsieke gebeurtenissen voor dynamische klassen, maar WMI kan een exemplaar voor een dynamische klasse maken als er geen provider beschikbaar is. WMI gebruikt polling om de wijzigingen te detecteren. De volgende tabel bevat de systeemklassen die WMI gebruikt om intrinsieke gebeurtenissen te rapporteren.
Systeemklasse | Beschrijving |
---|---|
__ClassCreationEvent | Een consument wordt op de hoogte gebracht wanneer een klasse wordt gemaakt. |
__ClassVerwijderenGebeurtenis | Een consument wordt op de hoogte gebracht wanneer een klasse wordt verwijderd. |
__ClassModificationEvent | Een consument wordt op de hoogte gebracht wanneer een klasse wordt gewijzigd. |
__InstanceCreationEvent | Brengt een consument op de hoogte wanneer een klasse-exemplaar wordt gemaakt. |
__InstanceOperationEvent | Een consument wordt op de hoogte gebracht wanneer er een instantiegebeurtenis optreedt, zoals het aanmaken, verwijderen of wijzigen van de instantie. U kunt deze klasse in query's gebruiken om alle typen gebeurtenissen op te halen die zijn gekoppeld aan een exemplaar. |
__InstanceDeletionEvent | Brengt een gebruiker op de hoogte wanneer een instantie wordt verwijderd. |
__InstanceModificationEvent | Een gebruiker wordt op de hoogte gebracht wanneer een exemplaar wordt gewijzigd. |
__NamespaceCreationEvent | Een consument wordt op de hoogte gebracht wanneer er een naamruimte wordt gemaakt. |
__NamespaceDeletionEvent | Een consument wordt op de hoogte gebracht wanneer een naamruimte wordt verwijderd. |
__NamespaceModificationEvent | Een consument wordt op de hoogte gebracht wanneer een naamruimte wordt gewijzigd. |
__ConsumerFailureEvent | Hiermee wordt een gebruiker op de hoogte gebracht wanneer een ander evenement wordt verwijderd als gevolg van een fout in een event-consumer. |
__EventDroppedEvent | Hiermee wordt een consument op de hoogte gebracht wanneer een andere gebeurtenis wordt verwijderd in plaats van te worden bezorgd bij de aanvragende gebeurtenisconsumer. |
__EventQueueOverflowEvent | Hiermee wordt een consument op de hoogte gebracht wanneer een gebeurtenis wordt verwijderd als gevolg van een overloop in de bezorgingswachtrij. |
__MethodInvocationEvent | Een consument wordt op de hoogte gebracht wanneer een methode-aanroep gebeurtenis plaatsvindt. |
Extrinsische gebeurtenissen
Een extrinsische gebeurtenis is een vooraf gedefinieerd exemplaar dat niet rechtstreeks kan worden gekoppeld aan wijzigingen in het WMI-gegevensmodel. Daarom kan met WMI een gebeurtenisprovider een gebeurtenisklasse definiƫren die de gebeurtenis beschrijft. Een gebeurtenis die een computer beschrijft die overschakelt naar de stand-by-modus, is bijvoorbeeld een extrinsische gebeurtenis. Een provider leidt een extrinsische gebeurtenis af van de __ExtrinsicEvent systeemklasse, een subklasse van de __Event systeemklasse. De System Registry en SNMP--providers definiƫren extrinsische gebeurtenisklassen, zoals RegistryKeyChangeEvent-, waarmee een consument wordt op de hoogte gebracht wanneer een registersleutel wordt gewijzigd. Zie Registreren voor systeemregister-gebeurtenissen en Een gebeurtenisprovider schrijvenvoor meer informatie.
In het volgende voorbeeld meldt een evenementenleverancier beveiligingsovertredingen voor een of meer gebouwen. De volgende klasse kan worden gedefinieerd voor de extrinsische gebeurtenis die een beveiligingsschending vertegenwoordigt.
class SecurityViolationEvent : __ExtrinsicEvent
{
string Building; // building where violation occurred
sint32 EntranceNumber; // entrance where violation occurred
datetime TimeOfDetection; // date and time of violation
}
Voor het ontvangen van meldingen over beveiligingsschendingen registreert een consument zich voor het gebeurtenistype SecurityViolationEvent. Tenzij anders aangegeven, ontvangt een consument meldingen van alle schendingen van de beveiliging gedurende alle perioden en in alle gebouwen. De gebeurtenisklasse bevat ook informatie die consumenten kunnen gebruiken om specifiekere gebeurtenissen te vragen.
In het volgende voorbeeld registreert de query de consument alleen voor beveiligingsschendingen in gebouw 24.
SELECT * FROM SecurityViolationEvent WHERE Building = 24;