Список классов WMIEvent
Вопрос
Недавно я узнал о WMI и WQL.Я нашел список классов Win32 (из MSDN), которые я могу запросить, но я не могу узнать список классов событий (должно быть подмножеством списка классов Win32, не так ли?) Кто-нибудь есть список или какая-то шпаргалка для этого?Я просто спрашиваю об этом из любопытства.
Пример класса событий – Win32_ProcessStartTrace
Решение
Вот как составить список классов событий 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
пункт.
Другие советы
код WMI Creator - отличный инструмент для изучения WMI, который, помимо прочего, позволяет изучать классы событий WMI на локальном или удаленном компьютере и генерировать код для получения уведомлений о событиях.
Редактировать . Поскольку вы пометили свой вопрос как C # , вас может заинтересовать код для получения списка классов событий, полученных из определенного класса программным путем: р>
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);
}
Разве в MSDN нет списка всех Занятия MSMCA здесь
ОБНОВЛЯТЬ:
Я не очень много работаю с WMI, но я только что нашел это Инструмент WMI это было бы полезно.Он предоставляет графический интерфейс для просмотра иерархии объектов WMI и даже позволяет регистрировать и использовать события.Это должно дать вам необходимую информацию.