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

我不相信这是可能的。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 回答
0

经分析,无法通过注册表事件获取子键的Key path。因为 Regkeychangeevent 无法监视子键,而 reg treechange 事件监视不会给出键路径的子键,所以发生了更改。因此,原像后图像的差异应该是迄今为止唯一的解决方案。

于 2010-11-02T03:55:44.213 回答