Как получить путь к реестру из объекта EventArrivedEventArgs - PullRequest
0 голосов
/ 21 октября 2010

Я пытаюсь смотреть события реестра через 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, чтобы получить его. Кто-нибудь может мне помочь.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2010

После анализа становится ясно, что путь к ключам для подразделов не может быть получен с помощью событий реестра. Поскольку Regkeychangeevent не может отслеживать подключи, а событие reg treechange отслеживает подключи, которые не дают путь к ключу, изменение произошло. Следовательно, preimage post-image diff должно быть пока единственным решением.

0 голосов
/ 23 октября 2010

Я не верю, что это возможно. EventArrivedEventArgs вернет экземпляр RegistryTreeChangeEvent , и единственное, что вы знаете о событии, это корневой путь, который вы отслеживаете. Вы можете обойти это, используя класс RegistryKeyChangeEvent , указав более одного ключа в предложении запроса Where. Например (не проверено):

SELECT * FROM RegistryKeyChangeEvent WHERE Hive = 'HKEY_LOCAL_MACHINE' И (KeyPath = 'ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft' ИЛИ Ключевой путь = 'SOFTWARE \ Microsoft \ Windows')

В этом случае вы должны использовать свойство EventArrivedEventArgs.NewEvent, чтобы получить экземпляр RegistryKeyChangeEvent и его свойство Keypath, чтобы получить измененный раздел реестра.

...