0

WMI 経由でレジストリ イベントを監視しようとしています。以下のクエリを使用して、HKLM\softwares 内のイベントを監視します

WqlEventQuery query = new WqlEventQuery(
                     "SELECT * FROM RegistryTreeChangeEvent WHERE " +
                     "(Hive = 'HKEY_LOCAL_MACHINE')"  +
                     "AND Rootpath = 'Software'" 

予想どおり、EventArrivedEventArgs のすべてのイベントをキャッチします。例: 1) Hklm\software\microsoft 内に newkey がある場合、キャプチャします 2) Hklm\software\microsoft\windows 内に値の変更がある場合、キャプチャします

ただし、変更が発生したレジストリ パスまたはキーまたは値を知る必要があります。

EventArrivedEventArgs オブジェクトを解釈して取得する方法がわかりません。誰でも私を助けることができますか?

4

2 に答える 2

0

分析の結果、レジストリ イベントを通じてサブキーのキー パスを取得できなかったことが明らかになりました。Regkeychangeevent はサブキーを監視できず、reg treechange イベントはキー パスを提供しないサブキーを監視するため、変更が発生しました。したがって、これまでのところ、プリイメージポストイメージの差分が唯一の解決策であるはずです。

于 2010-11-02T03:55:44.213 に答える
0

これが可能だとは思いません。EventArrivedEventArgs はRegistryTreeChangeEventのインスタンスを返します。このイベントについてわかっていることは、監視しているルート パスだけです。これを回避するには、RegistryKeyChangeEventクラスを使用して、クエリの Where 句で複数のキーを指定します。例(テストされていません):

SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND (KeyPath='SOFTWARE\Microsoft' OR KeyPath='SOFTWARE\Microsoft\Windows')

この場合、EventArrivedEventArgs.NewEvent プロパティを使用して RegistryKeyChangeEvent インスタンスを取得し、その Keypath プロパティを使用して変更されたレジストリ キーを取得します。

于 2010-10-23T15:40:07.967 に答える