Вот как перечислить классы событий WMI в пространстве имен root\cimv2
с C # и 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
- это пространство имен WMI по умолчанию, поэтому вам не нужно использовать экземпляр ManagementScope
. Запрос WQL, переданный ManagementObjectSearcher
, является запросом метаданных WMI. Использует:
Meta_Class
для обозначения запроса как запроса схемы и
__This
свойство для рекурсивного перечисления __Event
подклассы
(см. здесь и здесь ).
Класс WMI - это класс событий, если его поставщик реализован как поставщик WMI событий и должен быть подклассом __Event
. Это не означает, что вы не можете использовать «обычные» классы WMI, такие как Win32_Process
и Win32_Service
в запросах событий WQL. Вам просто нужно использовать один из __InstanceOperationEvent
производных вспомогательных классов, таких как __InstanceCreationEvent
или __InstanceDeletionEvent
, и WMI будет использовать свою собственную подсистему событий для доставки событий.
Вот пример запроса WQL, который подписывается на Win32_Process
события создания:
Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'
В этом случае вы должны использовать предложение Within
.