2009-06-25 3 views
4

最近、私はWMIとWQLについて学びました。私は(MSDNの)Win32クラスのリストを見つけましたが、イベントクラスのリストを見つけることができませんでした。(Win32クラスのリストのサブセットでなければなりませんか?)これのためのリストまたは何らかの種類のカンニングシートを持っていますか?私は好奇心からこれを求めている。イベントクラスのWMIEventクラスのリスト

例 - のWin32_ProcessStartTrace

答えて

4

は、ここで一覧表示する方法を説明しますC#とSystem.Managementroot\cimv2名前空間のWMIイベントクラス:

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をt彼はデフォルトのWMI名前空間を使用し、ManagementScopeインスタンスを使用する必要はありません。 ManagementObjectSearcherに渡されたWQLクエリは、WMIメタデータクエリです。これは、使用しています:

  • Meta_Classを再帰的に__Eventサブクラス

を一覧表示するには、スキーマクエリとしてクエリを指定し、

  • __This財産する(herehereを参照してください)。

    WMIクラスは、そのプロバイダがイベントWMIプロバイダとして実装されていて、__Eventのサブクラスでなければならないイベントクラスです。これは、WQLイベントクエリでWin32_ProcessWin32_Serviceのような '普通の' WMIクラスを使用できないということを意味しません。 __InstanceCreationEventまたは__InstanceDeletionEventのような派生ヘルパークラス__InstanceOperationEventのいずれかを使用するだけで、WMIは独自のイベントサブシステムを使用してイベントを配信します。あなたがWithin句を使用する必要があります。この場合

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

    :ここ

    Win32_Process作成イベントにサブスクライブしたサンプルWQLクエリです。

  • 3

    はMSDNがすべてMSMCA classes here

    のリストを持っていないUPDATE:
    私はWMIと仕事のトンをしないが、私はちょうど助けていたこのWMI toolを見つけました。オブジェクトのWMI階層を表示するためのGUIを提供し、イベントの登録と使用を許可します。これにより、必要な情報が得られます。

    +0

    私もそれを見ましたが、リストは自分の望むものではないようです。残念ながら、サンプルクラス(Win32_ProcessStartTrace)はありません。 – Noldorin

    +0

    しかし、(Win32_ProcessStartTrace)は最終的にWMIEventから派生しません。親クラスとして(__ExtrinsicEvent)がありますが、WMIEventは(__ExtrinsicEvent)の子です。彼が提供する例は、WMIEventではありません。 – Josh

    4

    WMI Code Creatorは、とりわけ、ローカルまたはリモートコンピュータで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); 
    } 
    
    +0

    このツールは、利用可能なWMIクラスを掘り起こすのに非常に便利です。 –

    関連する問題