最近、私はWMIとWQLについて学びました。私は(MSDNの)Win32クラスのリストを見つけましたが、イベントクラスのリストを見つけることができませんでした。(Win32クラスのリストのサブセットでなければなりませんか?)これのためのリストまたは何らかの種類のカンニングシートを持っていますか?私は好奇心からこれを求めている。イベントクラスのWMIEventクラスのリスト
例 - のWin32_ProcessStartTrace
最近、私はWMIとWQLについて学びました。私は(MSDNの)Win32クラスのリストを見つけましたが、イベントクラスのリストを見つけることができませんでした。(Win32クラスのリストのサブセットでなければなりませんか?)これのためのリストまたは何らかの種類のカンニングシートを持っていますか?私は好奇心からこれを求めている。イベントクラスのWMIEventクラスのリスト
例 - のWin32_ProcessStartTrace
は、ここで一覧表示する方法を説明しますC#とSystem.Management
とroot\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
財産する(hereとhereを参照してください)。 WMIクラスは、そのプロバイダがイベントWMIプロバイダとして実装されていて、__Event
のサブクラスでなければならないイベントクラスです。これは、WQLイベントクエリでWin32_Process
とWin32_Service
のような '普通の' WMIクラスを使用できないということを意味しません。 __InstanceCreationEvent
または__InstanceDeletionEvent
のような派生ヘルパークラス__InstanceOperationEvent
のいずれかを使用するだけで、WMIは独自のイベントサブシステムを使用してイベントを配信します。あなたがWithin
句を使用する必要があります。この場合
Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'
:ここ
はWin32_Process
作成イベントにサブスクライブしたサンプルWQLクエリです。
はMSDNがすべてMSMCA classes here
のリストを持っていないUPDATE:
私はWMIと仕事のトンをしないが、私はちょうど助けていたこのWMI toolを見つけました。オブジェクトのWMI階層を表示するためのGUIを提供し、イベントの登録と使用を許可します。これにより、必要な情報が得られます。
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);
}
このツールは、利用可能なWMIクラスを掘り起こすのに非常に便利です。 –
私もそれを見ましたが、リストは自分の望むものではないようです。残念ながら、サンプルクラス(Win32_ProcessStartTrace)はありません。 – Noldorin
しかし、(Win32_ProcessStartTrace)は最終的にWMIEventから派生しません。親クラスとして(__ExtrinsicEvent)がありますが、WMIEventは(__ExtrinsicEvent)の子です。彼が提供する例は、WMIEventではありません。 – Josh