Liste der WmiEvent Klassen
Frage
Vor kurzem habe ich über WMI und WQL lernen. Ich fand die Liste der Win32-Klassen aus (von MSDN), die ich für abfragen kann, aber ich bin nicht in der Lage, die Liste der Ereignisklassen, um herauszufinden, (sollte die Teilmenge der Liste der Win32-Klassen sein, nicht wahr?) Gibt es irgendein hat eine Liste oder eine Art Spickzettel für das? Ich frage jsut diese aus Neugier.
Beispiel für eine Ereignisklasse - Win32_ProcessStartTrace
Lösung
Hier ist, wie WMI-Ereignisklassen im root\cimv2
Namespace mit C # und System.Management
zur Liste:
using System;
using System.Management;
class Program
{
static void Main()
{
string query =
@"Select * From Meta_Class Where __This Isa '__Event'";
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
foreach (ManagementBaseObject cimv2Class in searcher.Get())
{
Console.WriteLine(cimv2Class.ClassPath.ClassName);
}
}
}
root\cimv2
ist der Standard-WMI-Namensraum, so dass Sie keine ManagementScope
Instanz verwenden. Die WQL-Abfrage zu ManagementObjectSearcher
geben wird, ist eine WMI-Metadaten-Abfrage. Genutzt werden:
-
Meta_Class
die Abfrage als Schemaabfrage zu bezeichnen, und -
__This
Eigenschaft rekursiv__Event
Subklassen Liste
WMI-Klasse ist ein Ereignis, Klasse, wenn sein Anbieter als Ereignis WMI-Anbieter implementiert und muss eine Unterklasse von __Event
sein. Dies bedeutet nicht, dass Sie nicht ‚normale‘ WMI-Klassen wie Win32_Process
und Win32_Service
in WQL Ereignisabfragen verwenden können. Sie haben nur eine der __InstanceOperationEvent
abgeleiteten Helferklassen verwenden, wie __InstanceCreationEvent
oder __InstanceDeletionEvent
und WMI wird seine eigene Event Subsystem Ereignisse zu liefern, verwendet werden.
Hier ist ein Beispiel WQL-Abfrage, die Erstellung Ereignisse Win32_Process
abonniert:
Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'
In diesem Fall müssen Sie verwenden die Within
Klausel.
Andere Tipps
WMI-Code Creator ist ein großes Werkzeug WMI für das Lernen, dass unter anderem, können Sie WMI-Ereignisklassen auf dem lokalen oder Remote-Computer erkunden und Code generieren Ereignisbenachrichtigungen für den Empfang.
Edit: Da Sie Ihre Frage so markiert C # , die Sie in dem Code interessiert sein könnten die Liste der Ereignisklassen, die von einer bestimmten Klasse programmatisch für immer:
using System.Management;
...
string ancestor = "WMIEvent"; // the ancestor class
string scope = "root\\wmi"; // the WMI namespace to search within
try
{
EnumerationOptions options = new EnumerationOptions();
options.ReturnImmediately = true;
options.Rewindable = false;
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(scope, "SELECT * FROM meta_class", options);
foreach (ManagementClass cls in searcher.Get())
{
if (cls.Derivation.Contains(ancestor))
{
Console.WriteLine(cls["__CLASS"].ToString());
}
}
}
catch (ManagementException exception)
{
Console.WriteLine(exception.Message);
}
verfügt nicht über MSDN eine Liste aller MSMCA Klassen hier
UPDATE:
Ich mache nicht viel Arbeit mit WMI, aber ich habe gerade dieses WMI-Tool das wäre hilfreich gewesen. Es gibt Ihnen eine grafische Benutzeroberfläche für die WMI-Hierarchie von Objekten sehen, und auch ermöglicht es Ihnen, Ereignisse zu registrieren und konsumieren. Dies sollte Ihnen die Informationen, die Sie benötigen.