2011-01-28 131 views
7

我記得我最後一年的大學項目中,我寫了一個C#註冊表監控,然而,當我與微軟的ProcessMonitor應用程序相比,它(我不記得它的確切名字,但被MSoft收購的公司),我不是捕捉儘可能多註冊表調用。註冊表監控,包括內核模式註冊表訪問?

了這是因爲我使用的是C#的包裝,因此,它只會被捕捉用戶模式註冊表訪問?

我用這個包裝:http://www.codeproject.com/KB/DLL/EasyHook64.aspx

趕上內核模式註冊表訪問我將不得不在C++寫?

+2

您是來自已經被替換進程監視器http://technet.microsoft Sysinternals的思維RegMon的的。 com/en-us/sysinternals/bb896645 – 2011-01-28 22:43:01

+0

進程監視器是我用過的,是的! – Tom 2011-01-28 22:46:22

+1

這些SysInternals公用程序的早期版本沒有附帶源代碼,還是我在做夢? – 2011-01-29 00:20:32

回答

9

Process Monitor要麼使用內核驅動程序或ETW(見下文)來捕獲註冊表事件。我知道Process Monitor使用ETW來處理它的一些數據(比如網絡信息)。

像EasyHook這樣的API掛鉤或繞行機制通常在Win32 API級別運行(例如,ADVAPI32.dll中的RegSetValueRegCreateKeyEx)。因此,它具有您提到的限制:僅捕獲用戶模式註冊表訪問。另外,API掛鉤通常是在每個進程的基礎上完成的,因此您必須將自己注入到您想要收集數據的每個進程中。如果您想真正捕獲整個系統的所有訪問,您還必須監視流程創建。

Event Tracing for Windows(ETW)是一種簡單的方法(相對而言)來捕獲所有註冊表訪問。 ETW背後的基本思想是,操作系統,運行時,庫,甚至日常應用程序開發人員都可以在代碼中添加特定的工具,以記錄關於有趣的事件和場景的數據。這種追蹤開銷很低,可以很容易地收集。 ETW已經有一段時間了,但從Vista開始,它在整個內核中的確引起了很大的關注。幾乎所有主要的內核子系統現在都裝有ETW。它現在也是Windows事件日誌的基礎。

ETW有行李的公平份額,並且缺乏在一些地區大量的文檔,但是如果你有興趣,你可以檢查出以下幾點:

趕上內核模式註冊表 訪問我將不得不在C++寫?

不,使用上面提到的TraceEvent庫,可以使用C#捕獲和分析整個系統的內核和用戶模式註冊表訪問。