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
.
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
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