質問
最近、WMIとWQLについて学びました。クエリできるWin32クラスのリスト(MSDNから)を見つけましたが、イベントクラスのリストを見つけることができません(Win32クラスのリストのサブセットである必要がありますか?)このためのリストやチートシートがありますか?私は好奇心からこれを求めています。
イベントクラスの例- Win32_ProcessStartTrace
解決
C#およびroot\cimv2
を使用してSystem.Management
名前空間の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);
}
}
}
ManagementScope
はデフォルトのWMI名前空間であるため、ManagementObjectSearcher
インスタンスを使用する必要はありません。 Meta_Class
に渡されるWQLクエリは、WMIメタデータクエリです。以下を使用します。
-
__This
クエリをスキーマクエリとして指定する -
__Event
プロパティーを再帰的にリストするWin32_Process
サブクラス
WMIクラスは、そのプロバイダーがイベントWMIプロバイダーとして実装されている場合、イベントクラスであり、Win32_Service
のサブクラスでなければなりません。これは、WQLイベントクエリで__InstanceOperationEvent
や__InstanceCreationEvent
などの「通常の」WMIクラスを使用できないという意味ではありません。 __InstanceDeletionEvent
やWithin
などの<=>派生ヘルパークラスのいずれかを使用するだけで、WMIは独自のイベントサブシステムを使用してイベントを配信します。
<=>作成イベントをサブスクライブするサンプルWQLクエリは次のとおりです。
Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'
この場合、 <=を使用する必要があります。 > 句。
他のヒント
WMIコード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);
}
MSDNにはすべてののリストはありませんMSMCAクラスはこちら
更新:
私はWMIで多くの作業を行いませんが、この WMIツールがあれば便利でした。オブジェクトのWMI階層を表示するためのGUIを提供し、イベントを登録して使用することもできます。これにより、必要な情報が得られます。