문제

최근에 나는 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 코드 제작자 무엇보다도 로컬 또는 원격 컴퓨터에서 WMI 이벤트 클래스를 탐색하고 이벤트 알림 수신 코드를 생성 할 수있는 WMI를 학습하기위한 훌륭한 도구입니다.

편집하다: 질문을 태그로 지정했기 때문에 씨#, 당신은 프로그래밍 방식으로 특정 클래스에서 파생 된 이벤트 클래스 목록을 얻기위한 코드에 관심이있을 수 있습니다.

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 계층을 볼 수있는 GUI를 제공하며 이벤트를 등록하고 소비 할 수도 있습니다. 이것은 필요한 정보를 제공해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top