2010-10-21 105 views
0

我嘗試通過WMI觀察註冊表事件。我用下面的查詢來觀看HKLM \軟件如何從EventArrivedEventArgs對象獲取註冊表路徑

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

內的任何事件,正如預期的那樣能抓住在EventArrivedEventArgs所有事件。 例如:1)是否有HKLM \ SOFTWARE \微軟內部則newkey,它捕捉 2)是否有HKLM \軟件內的數值變化\微軟\的Windows,它捕捉

不過,我需要知道註冊表發生變化的路徑或鍵或值。

我不知道如何解釋EventArrivedEventArgs對象來獲取它。 任何人都可以幫助我。

回答

0

經過分析,明確指出子鍵的鍵路徑不能通過註冊表事件獲得。由於Regkeychangeevent無法監視子密鑰,並且reg treechange事件監視器不會提供密鑰路徑的子密鑰,因此發生了更改。因此,preimage post image的差異應該是目前唯一的解決方案。

0

我不相信這是可能的。 EventArrivedEventArgs將返回一個RegistryTreeChangeEvent的實例,並且您瞭解該事件的唯一信息是您正在監視的根路徑。您可以使用RegistryKeyChangeEvent類來解決此問題,在查詢Where子句中指定多個鍵。例如(未測試):

SELECT * FROM RegistryKeyChangeEvent WHERE蜂巢= 'HKEY_LOCAL_MACHINE' AND (的keyPath ='SOFTWARE \ Microsoft的OR 的keyPath ='SOFTWARE \微軟\ Windows的)

在這如果您使用EventArrivedEventArgs.NewEvent屬性來獲取RegistryKeyChangeEvent實例及其KeyPath屬性以獲取已更改的註冊表項。