1

RegistryValueChangeEventネットには、イベント ソース ( など) をサブスクライブし、そのイベントに応答してコードを呼び出す方法を示す多くの例があります。

しかし、そのようなリスナーを列挙する方法はありますか? たとえば、 をリッスンしているすべてのスクリプトまたはプログラム (それらの PID を除く) を一覧表示したいと思いRegistryValueChangeEventます。これは WMI で可能ですか?

これは、検出したいレジストリ変更イベントをリッスンするスクリプト ファイルの例です。

strComputer = "."

Set objWMIServices=GetObject( _
    "winmgmts:{impersonationLevel=impersonate}!\\" & _ 
    strComputer & "\root\default")

set objSink = WScript.CreateObject( _
    "WbemScripting.SWbemSink","SINK_")

objWMIServices.ExecNotificationQueryAsync objSink, _
    "Select * from RegistryValueChangeEvent Where " & _
    "Hive = 'HKEY_LOCAL_MACHINE' and " & _
    "KeyPath = 'SYSTEM\\ControlSet001\\Control' and " & _
    "ValueName = 'CurrentUser'"

WScript.Echo "Listening for Registry " _
    & "Change Events..." & vbCrLf 

While(True) 
    WScript.Sleep 1000 
Wend 

Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext) 
    WScript.Echo "Received Registry Value Change Event" _
    & vbCrLf & wmiObject.GetObjectText_() 
End Sub
4

1 に答える 1

0

これは、「追加情報を提供する」が質問を解決しない半回答の1つです

永続的なイベント コンシューマーを表示する場合は、WMIroot\subscription名前空間 (Win XP 以降) に登録されます。永久コンシューマーが必要とする 3 つのインスタンス (__EventFilter、__EventConsumer (または派生型の 1 つ)、および __FilterToConsumerBinding) を探します。

残念ながら、一時的なイベント コンシューマー (ExecNotificationQueryAsync の呼び出し) を見つける方法については触れていません。
(しかし、それがまったく役立つ場合に備えて、それについて言及したいと思いました。)

于 2012-12-11T20:06:53.603 に答える