2011-10-15 59 views
0

當我使用C#時,我只能訪問用戶模式的註冊表訪問。C++可能訪問內核模式註冊表項訪問?

使用C++訪問內核模式註冊表訪問非常困難嗎?

我記得我讀過的地方可能需要創建一個虛擬的Windows驅動程序或其他東西嗎?

編輯:基本上作爲一個業餘愛好項目,我希望創建一個簡單的註冊表監視器。但是,我確實想要捕獲內核模式(以及用戶模式)註冊表訪問.....上次我做到了這一點,使用C#我無法訪問內核模式活動。

+1

無論你在說什麼?你能否進一步解釋你想要完成的事情?或舉一個例子? – paulsm4

+0

這可能會幫助你:http://stackoverflow.com/questions/508614/create-a-new-windows-registry-key-using-c – doctorless

+0

什麼是「內核模式註冊表訪問」,以及如何訪問它? – avakar

回答

2

有兩種方法來實現這一目標:

  • 掛鉤的相關功能,在內核 - 傳統的方式 - 這需要一個C /內核驅動程序。這可能在x86 Windows上,但在x64 Kernel Patch Protection上將檢測到這些修改並關閉系統(使用藍屏)。
  • 構建一個registry filter driver - 這是現在鼓勵的方式來解決這個問題,並且是流程監視器的工作方式。您也可以用這種方法構建文件系統過濾器驅動程序從本質上講,你只需要通過信息反饋給用戶空間,其歸結爲:

    IoRegisterDevice(...somewhere in \Devices\YourDriverName...) 
    IoCreateSymbolicLink(\\DosDevices\Name -> \Devices\YourDriverName) 
    

    然後是C,C++,C#應用程序應該能夠打開文件\\.\YourDriverNameDeviceIoControl它和接收響應。

可以使用C++編寫內核驅動程序,但see this before you embark on doing so。更清楚的是,你需要非常小心內核模式下的內存(分頁,非分頁),並且你不能訪問大部分標準庫。

順便說一句,你應該知道:

  • 並非所有的註冊表配置單元都可以訪問內核模式驅動程序,這取決於上下文。
  • 路徑不常見。因此,內核訪問\Registry\System,而用戶訪問HKLM