Pergunta

Recentemente tenho vindo a aprender sobre WMI e WQL. Eu descobri a lista de classes Win32 (de MSDN) que eu pode consultar, mas não sou capaz de descobrir a lista de classes de eventos (deve ser o subconjunto da lista de classes Win32 não é?) Será que qualquer um tem uma lista ou algum tipo de folha de fraude para isso? Estou jsut perguntando isso por curiosidade.

Exemplo de uma classe de evento - Win32_ProcessStartTrace

Foi útil?

Solução

Aqui está como listar as classes de eventos WMI no namespace root\cimv2 com C # e 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 é o namespace WMI padrão, então você não tem que usar uma instância ManagementScope. A consulta WQL passada para ManagementObjectSearcher é uma consulta de metadados WMI. Ele usa:

  • Meta_Class para designar a consulta como uma consulta de esquema, e
  • propriedade __This a lista recursivamente __Event subclasses

(ver aqui e aqui ).

classe WMI é uma classe de evento se o seu provedor implementado como um provedor de WMI evento e deve ser uma subclasse de __Event. Isso não significa que você não pode usar classes WMI 'comuns' como Win32_Process e Win32_Service em consultas de eventos WQL. Você apenas tem que usar um dos __InstanceOperationEvent derivado classes auxiliares como __InstanceCreationEvent ou __InstanceDeletionEvent e WMI usará seu próprio subsistema de eventos para entregar eventos.

Aqui está uma consulta WQL amostra que se inscreve para eventos de criação Win32_Process:

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

Neste caso, você tem que usar o Within cláusula.

Outras dicas

WMI Código Criador é uma grande ferramenta para a aprendizagem de WMI que, entre outras coisas, permite explorar classes de eventos WMI no computador local ou remoto e gerar código para receber notificações de eventos.

Editar: Desde você marcou a sua pergunta como C # , que você pode estar interessado no código para obter a lista de classes de eventos derivados de uma classe particular de programação:

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

não MSDN tem uma lista de todos os aulas MSMCA aqui

UPDATE:
Eu não faço toneladas de trabalho com o WMI, mas eu só encontrei este WMI ferramenta que teria sido útil. Dá-lhe uma interface gráfica para a visualização da hierarquia WMI de objetos, e ainda permite que você se registrar e consumir eventos. Isso deve lhe dar a informação que você precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top