2011-03-10 102 views
1

我想從我的C#代碼執行.exe文件。 .exe文件需要在註冊表中存在一些密鑰。現在我有兩個選擇: 1.我可以添加密鑰,執行文件,然後刪除我從註冊表中添加的內容。 2.或者如果可能的話,我可以僞造註冊表中的密鑰,以便.exe可以執行,而且我不必修改註冊表。有沒有辦法在C#中僞造註冊表項?

有人可以告訴我,如果#2是可能的嗎?如果沒有,那麼是否有其他更好的方法來處理這種情況(perhapds撤消我從註冊表中所做的更改)?還是我必須堅持#1?

請指導我。

感謝

+0

你會如何僞造Windows註冊表?您所描述的是強制EXE沿着不同的代碼路徑,而不是使用Windows API調用來訪問註冊表。這需要反彙編代碼或用某種HEX編輯器進行修改,這些編輯器實際上超出了本網站的範圍。 – 2011-03-10 02:03:06

+0

如果您添加了密鑰,然後又無法恢復,會有多嚴重?請記住,您的程序可能會在該關鍵時間間隔內發生故障(不可恢復的RAM錯誤,電源故障等) – 2011-03-10 02:18:24

+1

聽起來你很明顯:把它添加到註冊表中,*不要*刪除它,永遠不要亂用它再次。安裝人員的典型工作。 – 2011-03-10 02:25:01

回答

2

攔截註冊表中讀取不是爲微弱的心臟幾乎肯定會需要數量級比選擇更多的工作了幾個數量1

0

它在技術上可能使用攔截的註冊表調用像Detours。但是,攔截代碼不能用C#編寫,並且必須使用C++(或C,我想)。更不用說,以一種可靠的方式做到這一點將是一個lot的工作。

+0

Detours不是必需的,簡單的DLL注入就足夠了。 – 2011-03-10 02:09:08

2

There is a function for that,但它隻影響調用它的過程。所以你將不得不使用DLL注入。 C#(或任何類型的託管代碼)不會是我完成這個任務的選擇。

1

如果必須攔截讀,然後開始開發調用CmRegisterCallback掛鉤全系統的調用並篩選出那些你需要的C/C++的驅動器。但我想你會嚴重後悔甚至開始該項目...只是去選擇1。

相關問題