2013-11-22 32 views
0

有沒有什麼方法可以使用c#來監視某個進程添加了哪個註冊表項? 對我而言,重要的是要知道關鍵名稱(路徑),而不僅僅是已添加密鑰 這一事實。 謝謝通過某個過程監視添加的註冊表項(使用c#)

+0

不,不是通過'某個過程'。 –

+0

看看這個鏈接可以幫助你更好地瞭解你正在做什麼:http://stackoverflow.com/questions/8898182/how-to-handle-key-press-event-in-console-application –

+0

* *註冊**鍵。不是鍵盤鍵。 – Olivier

回答

0

在我的愚見,你不能在C#中做到這一點。

不過,我可以指導你的解決方案(但它是相當先進的,雖然)

系統登錄由WINAPI電話(這是本機的功能)來處理。 例如,其中之一是:

[DllImport("advapi32.dll", CharSet = CharSet.Auto, BestFitMapping = false)] 
internal static int RegSetValueEx(SafeRegistryHandle hKey, string lpValueName, int Reserved, RegistryValueKind dwType, string lpData, int cbData); 

因此,知道當一個進程設置一個註冊表值等同於知道什麼時候該函數被調用。

使用easy hook可以注入一個進程並「破解」一個函數(即用您自己的實現替換現有函數)。

你的解決方案是使用這個庫,鉤住你想要的進程並用自定義實現替換RegSetValueEx(在advapi32.dll中),只會將調用轉發給實際實現,並在需要時通知你。

+0

謝謝你的回答,它讓我向前邁了一步。 – Sagi

+0

假設我想創建一個應用程序來監視函數RegSetValueEx何時被觸發以及它獲取了哪些參數,我該怎麼做? – Sagi