2009-06-25 16 views
4

Récemment, j'ai appris sur WMI et WQL. J'ai trouvé la liste des classes Win32 (de MSDN) que je peux rechercher mais je ne peux pas trouver la liste des classes d'événement (devrait être le sous-ensemble de la liste des classes Win32 n'est-ce pas?) avoir une liste ou une sorte de feuille de triche pour cela? Je suis jsut demandant cela par curiosité.Liste des classes WMIEvent

Exemple pour une classe d'événements - Win32_ProcessStartTrace

Répondre

4

Voici comment la liste classes d'événements WMI dans l'espace de noms root\cimv2 avec C# et System.Management:

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 est T L'espace de noms WMI par défaut, vous n'avez donc pas besoin d'utiliser une instance ManagementScope. La requête WQL passée à ManagementObjectSearcher est une requête de métadonnées WMI. Il utilise:

  • Meta_Class pour désigner la requête comme une requête de schéma et
  • __This propriété à la liste récursive __Event sous-classes

(voir here et here).

La classe WMI est une classe d'événements si son fournisseur est implémenté en tant que fournisseur WMI d'événement et doit être une sous-classe de __Event. Cela ne signifie pas que vous ne pouvez pas utiliser les classes WMI 'ordinaires' telles que Win32_Process et Win32_Service dans les requêtes d'événements WQL. Vous devez simplement utiliser l'une des classes auxiliaires __InstanceOperationEvent dérivées comme __InstanceCreationEvent ou __InstanceDeletionEvent, et WMI utilisera son propre sous-système d'événements pour fournir des événements.

Voici un exemple de requête WQL qui souscrit à Win32_Process événements de création:

Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process' 

Dans ce cas, vous devez utiliser la clause Within.

3

Ne MSDN ont une liste de tous les MSMCA classes here

MISE À JOUR:
Je ne fais pas des tonnes de travail avec WMI, mais Je viens de trouver ce WMI tool qui aurait été utile. Il vous donne une interface graphique pour afficher la hiérarchie des objets WMI, et vous permet même d'enregistrer et de consommer des événements. Cela devrait vous donner l'information dont vous avez besoin.

+0

J'ai vu ça aussi, mais la liste ne semble pas être ce qu'il veut. Il n'a même pas la classe exemple (Win32_ProcessStartTrace), malheureusement. – Noldorin

+0

Mais (Win32_ProcessStartTrace) ne dérive finalement pas de WMIEvent. Il a (__ExtrinsicEvent) en tant que classe parent, mais WMIEvent est un enfant de (__ExtrinsicEvent). L'exemple qu'il fournit n'est pas un WMIEvent ... – Josh

4

WMI Code Creator est un excellent outil pour apprendre WMI qui, entre autres choses, vous permet d'explorer les classes d'événements WMI sur l'ordinateur local ou distant et de générer du code pour la réception des notifications d'événements.

Edit: Depuis que vous avez taguée votre question C#, vous pourriez être intéressé par le code pour obtenir la liste des classes d'événements provenant d'une classe particulière programme:

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); 
} 
+0

Cet outil est très utile pour explorer les classes WMI disponibles. –