簡體   English   中英

如何監視注冊表訪問? [C#]

[英]How to monitor registry accessing? [C#]

我有一個以LocalSystem身份運行的C#服務(我們稱其為Serv.exe),並且我需要此服務來監視所有注冊表訪問。

具體來說,每當它啟動的任何進程對HKEY_CURRENT_USER \\ Software *。*進行調用時,我都需要捕獲該調用(更改或只是訪問),以便我可以相應地重定向它-我知道CHANGE事件,但是只是訪問注冊表以獲得價值?

推理(如果有人提出更好的建議-我會更歡迎)-該服務在LocalSystem上運行,該系統具有自己的HKEY_CURRENT_USER,但是此服務用於在登錄用戶的后台安裝軟件-因此,當已安裝軟件,它可能會嘗試影響USER本身的HKEY_CURRENT_USER(很好)-因此,我需要確保將這些更改反映給USER,而不是LocalSystem帳戶。

任何意見,幫助,建議將不勝感激。 謝謝,

如果您只想查看發生了什么,請使用Sysinternals Process Monitor

重定向很復雜; 您需要將API與Detours之類的庫掛鈎,但是在生產環境中使用它的許可很昂貴。 也就是說,Process Monitor對於確保您的API掛鈎執行正確的操作仍然很有用。

服務啟動的進程是否需要繼續作為LocalSystem運行? 如果不是,請嘗試CreateProcessAsUser以在適當的帳戶下創建進程。

如果您的需求較為簡單(例如,運行粗心的應用程序而沒有對HKLM的寫訪問權,則可以使用應用程序兼容性工具包)

不幸的是,安裝是最討厭的情況。 您可能需要采取笨拙的做法,即讓您的服務將用戶添加到Administrators組,使用CreateProcessAsUser啟動安裝程序,然后在啟動過程后再次從Administrators組中刪除用戶,類似於Aaron Margosis的MakeMeAdmin腳本

如果安裝程序的性能很差,則最好將所需的HKCU注冊表設置(在安裝前后使用Process Monitor或reg export HKCU並將它們進行差異化)收集到.reg文件中,並整理一些啟動腳本,在登錄時導入注冊表項(並留下痕跡,這樣就不會為同一用戶重新運行並覆蓋其設置)。 我將這種方法用於堅持將所有內容保留在HKCU中的特殊應用程序中。

如果您不介意深入研究未記錄的深度,則以LocalSystem身份運行的服務可能會執行一些復雜的工作,涉及本質上未記錄的API(例如ZwCreateToken從而在添加了本地Administrators組的用戶會話中運行安裝程序。 這也有一些限制-例如,創建沒有密碼的令牌將沒有網絡憑據。

您可以使用WMI查詢。 是一個例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM