Список классов WMIEvent - PullRequest
5 голосов
/ 25 июня 2009

Недавно я изучал WMI и WQL. Я узнал список классов Win32 (из MSDN), к которым я могу обратиться, но я не могу найти список классов событий (должно быть подмножество в списке классов Win32, не так ли?) есть список или какая-то шпаргалка для этого? Я просто спрашиваю об этом из любопытства.

Пример для класса событий - Win32_ProcessStartTrace

Ответы [ 3 ]

6 голосов
/ 25 июня 2009

WMI Code 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);
}
6 голосов
/ 25 июня 2009

Вот как перечислить классы событий 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.

3 голосов
/ 25 июня 2009

MSDN не имеет списка всех классов MSMCA здесь

UPDATE:
Я не много работаю с WMI, но я нашел этот WMI инструмент , который был бы полезен. Он предоставляет графический интерфейс для просмотра иерархии объектов WMI и даже позволяет регистрировать и использовать события. Это должно дать вам необходимую информацию.

...